From db119bed67e45bb7779aaf187b3af77fbe8af7e7 Mon Sep 17 00:00:00 2001
From: Rahul Chanila <rchanila@gitlab.com>
Date: Tue, 26 Mar 2024 14:52:02 +1100
Subject: [PATCH] Handle missing pipeline user name in terraform registry UI

Changelog: fixed
---
 .../shared/package_list_row.vue               |  2 +-
 .../package_list_row_spec.js.snap             |  9 +++++---
 .../shared/package_list_row_spec.js           | 23 +++++++++++++++++--
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/app/assets/javascripts/packages_and_registries/infrastructure_registry/shared/package_list_row.vue b/app/assets/javascripts/packages_and_registries/infrastructure_registry/shared/package_list_row.vue
index c92208abfc352..73814974d351f 100644
--- a/app/assets/javascripts/packages_and_registries/infrastructure_registry/shared/package_list_row.vue
+++ b/app/assets/javascripts/packages_and_registries/infrastructure_registry/shared/package_list_row.vue
@@ -56,7 +56,7 @@ export default {
   },
   computed: {
     hasPipeline() {
-      return Boolean(this.packageEntity.pipeline);
+      return Boolean(this.packageEntity.pipeline?.user?.name);
     },
     hasProjectLink() {
       return Boolean(this.packageEntity.project_path);
diff --git a/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/__snapshots__/package_list_row_spec.js.snap b/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/__snapshots__/package_list_row_spec.js.snap
index 75cc7e5b78daa..de979132133b6 100644
--- a/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/__snapshots__/package_list_row_spec.js.snap
+++ b/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/__snapshots__/package_list_row_spec.js.snap
@@ -62,9 +62,12 @@ exports[`packages_list_row renders 1`] = `
           class="gl-align-items-center gl-display-flex gl-min-h-6"
         >
           <span>
-            <gl-sprintf-stub
-              message="Created %{timestamp}"
-            />
+            Created
+            <span
+              title="December 10, 2015 at 12:00:00 AM GMT"
+            >
+              4 years ago
+            </span>
           </span>
         </div>
       </div>
diff --git a/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/package_list_row_spec.js b/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/package_list_row_spec.js
index d00d7180f754c..0ef0949de1e1d 100644
--- a/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/package_list_row_spec.js
+++ b/spec/frontend/packages_and_registries/infrastructure_registry/components/shared/package_list_row_spec.js
@@ -1,4 +1,4 @@
-import { GlLink } from '@gitlab/ui';
+import { GlLink, GlSprintf } from '@gitlab/ui';
 import { nextTick } from 'vue';
 import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
 import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
@@ -9,7 +9,7 @@ import PackageTags from '~/packages_and_registries/shared/components/package_tag
 import { PACKAGE_ERROR_STATUS } from '~/packages_and_registries/shared/constants';
 
 import ListItem from '~/vue_shared/components/registry/list_item.vue';
-import { packageList } from '../mock_data';
+import { packageList, npmPackage } from '../mock_data';
 
 describe('packages_list_row', () => {
   let wrapper;
@@ -40,6 +40,7 @@ describe('packages_list_row', () => {
       stubs: {
         ListItem,
         InfrastructureIconAndName,
+        GlSprintf,
       },
       propsData: {
         packageLink: 'foo',
@@ -96,6 +97,24 @@ describe('packages_list_row', () => {
     });
   });
 
+  describe('published by author', () => {
+    it('shows the text when user is set', () => {
+      mountComponent({
+        packageEntity: { ...npmPackage },
+      });
+
+      expect(wrapper.text()).toContain('published by foo');
+    });
+
+    it('is hidden when user is null', () => {
+      mountComponent({
+        packageEntity: { ...npmPackage, pipeline: { ...npmPackage.pipeline, user: null } },
+      });
+
+      expect(wrapper.text()).not.toContain('published by');
+    });
+  });
+
   describe('deleteAvailable', () => {
     it('does not show when not set', () => {
       mountComponent({ disableDelete: true });
-- 
GitLab