From b60f12e8121a12adb3d045ff0cd7342f6fbb0e2d Mon Sep 17 00:00:00 2001
From: Kos Palchyk <kpalchyk@gitlab.com>
Date: Mon, 20 May 2024 17:12:51 +0300
Subject: [PATCH] Split code to omit graphql.js bundle duplication in specs

---
 .../members/components/members_tabs.vue       |  3 +-
 app/assets/javascripts/members/constants.js   | 34 ------------------
 app/assets/javascripts/members/index.js       |  2 +-
 .../javascripts/members/tabs_metadata.js      | 35 +++++++++++++++++++
 .../assets/javascripts/members/constants.js   | 20 -----------
 .../javascripts/members/tabs_metadata.js      | 21 +++++++++++
 .../members/components/members_tabs_spec.js   |  3 +-
 qa/qa/page/component/members/members_table.rb |  2 +-
 8 files changed, 62 insertions(+), 58 deletions(-)
 create mode 100644 app/assets/javascripts/members/tabs_metadata.js
 create mode 100644 ee/app/assets/javascripts/members/tabs_metadata.js

diff --git a/app/assets/javascripts/members/components/members_tabs.vue b/app/assets/javascripts/members/components/members_tabs.vue
index 166b3f970f629..84b2fb6d9ae44 100644
--- a/app/assets/javascripts/members/components/members_tabs.vue
+++ b/app/assets/javascripts/members/components/members_tabs.vue
@@ -3,7 +3,8 @@ import { GlTabs, GlTab, GlBadge, GlButton } from '@gitlab/ui';
 // eslint-disable-next-line no-restricted-imports
 import { mapState } from 'vuex';
 import { queryToObject } from '~/lib/utils/url_utility';
-import { MEMBER_TYPES, TABS, ACTIVE_TAB_QUERY_PARAM_NAME } from 'ee_else_ce/members/constants';
+import { MEMBER_TYPES, ACTIVE_TAB_QUERY_PARAM_NAME } from 'ee_else_ce/members/constants';
+import { TABS } from 'ee_else_ce/members/tabs_metadata';
 import MembersApp from './app.vue';
 
 const countComputed = (state, namespace) => state[namespace]?.pagination?.totalItems || 0;
diff --git a/app/assets/javascripts/members/constants.js b/app/assets/javascripts/members/constants.js
index c2e5f3fa44eb0..33379452eaa11 100644
--- a/app/assets/javascripts/members/constants.js
+++ b/app/assets/javascripts/members/constants.js
@@ -3,8 +3,6 @@ import { GlFilteredSearchToken } from '@gitlab/ui';
 import { __, s__ } from '~/locale';
 import { OPERATORS_IS } from '~/vue_shared/components/filtered_search_bar/constants';
 
-import PlaceholdersTabApp from './components/placeholders/app.vue';
-
 // Overridden in EE
 export const EE_GROUPS_APP_OPTIONS = {};
 export const EE_PROJECTS_APP_OPTIONS = {};
@@ -184,38 +182,6 @@ export const TAB_QUERY_PARAM_VALUES = Object.freeze({
   placeholder: 'placeholders',
 });
 
-// Overridden in EE
-export const TABS = [
-  {
-    namespace: MEMBER_TYPES.user,
-    title: __('Members'),
-  },
-  {
-    namespace: MEMBER_TYPES.group,
-    title: __('Groups'),
-    attrs: { 'data-testid': 'groups-list-tab' },
-    queryParamValue: TAB_QUERY_PARAM_VALUES.group,
-  },
-  {
-    namespace: MEMBER_TYPES.invite,
-    title: s__('Members|Pending invitations'),
-    requiredPermissions: ['canManageMembers'],
-    queryParamValue: TAB_QUERY_PARAM_VALUES.invite,
-  },
-  {
-    namespace: MEMBER_TYPES.accessRequest,
-    title: __('Access requests'),
-    requiredPermissions: ['canManageAccessRequests'],
-    queryParamValue: TAB_QUERY_PARAM_VALUES.accessRequest,
-  },
-  {
-    namespace: MEMBER_TYPES.placeholder,
-    title: s__('UserMapping|Placeholders'),
-    queryParamValue: TAB_QUERY_PARAM_VALUES.placeholder,
-    component: PlaceholdersTabApp,
-  },
-];
-
 /**
  * This user state value comes from the User model
  * see the state machine in app/models/user.rb
diff --git a/app/assets/javascripts/members/index.js b/app/assets/javascripts/members/index.js
index 7eea0a7ebda62..d2b4bf8181c00 100644
--- a/app/assets/javascripts/members/index.js
+++ b/app/assets/javascripts/members/index.js
@@ -5,7 +5,7 @@ import Vuex from 'vuex';
 import VueApollo from 'vue-apollo';
 import createDefaultClient from '~/lib/graphql';
 import { parseDataAttributes } from '~/members/utils';
-import { TABS } from 'ee_else_ce/members/constants';
+import { TABS } from 'ee_else_ce/members/tabs_metadata';
 import MembersTabs from './components/members_tabs.vue';
 import membersStore from './store';
 
diff --git a/app/assets/javascripts/members/tabs_metadata.js b/app/assets/javascripts/members/tabs_metadata.js
new file mode 100644
index 0000000000000..0ef7cbf3da86b
--- /dev/null
+++ b/app/assets/javascripts/members/tabs_metadata.js
@@ -0,0 +1,35 @@
+import { __, s__ } from '~/locale';
+import PlaceholdersTabApp from './components/placeholders/app.vue';
+import { MEMBER_TYPES, TAB_QUERY_PARAM_VALUES } from './constants';
+
+// Overridden in EE
+export const TABS = [
+  {
+    namespace: MEMBER_TYPES.user,
+    title: __('Members'),
+  },
+  {
+    namespace: MEMBER_TYPES.group,
+    title: __('Groups'),
+    attrs: { 'data-testid': 'groups-list-tab' },
+    queryParamValue: TAB_QUERY_PARAM_VALUES.group,
+  },
+  {
+    namespace: MEMBER_TYPES.invite,
+    title: s__('Members|Pending invitations'),
+    requiredPermissions: ['canManageMembers'],
+    queryParamValue: TAB_QUERY_PARAM_VALUES.invite,
+  },
+  {
+    namespace: MEMBER_TYPES.accessRequest,
+    title: __('Access requests'),
+    requiredPermissions: ['canManageAccessRequests'],
+    queryParamValue: TAB_QUERY_PARAM_VALUES.accessRequest,
+  },
+  {
+    namespace: MEMBER_TYPES.placeholder,
+    title: s__('UserMapping|Placeholders'),
+    queryParamValue: TAB_QUERY_PARAM_VALUES.placeholder,
+    component: PlaceholdersTabApp,
+  },
+];
diff --git a/ee/app/assets/javascripts/members/constants.js b/ee/app/assets/javascripts/members/constants.js
index 6dfdee96edaf7..dabf24a50008f 100644
--- a/ee/app/assets/javascripts/members/constants.js
+++ b/ee/app/assets/javascripts/members/constants.js
@@ -7,11 +7,8 @@ import {
   AVAILABLE_FILTERED_SEARCH_TOKENS as AVAILABLE_FILTERED_SEARCH_TOKENS_CE,
   MEMBER_TYPES as MEMBER_TYPES_CE,
   TAB_QUERY_PARAM_VALUES as CE_TAB_QUERY_PARAM_VALUES,
-  TABS as CE_TABS,
 } from '~/members/constants';
 import { helpPagePath } from '~/helpers/help_page_helper';
-import PromotionRequestsTabApp from './promotion_requests/components/app.vue';
-import promotionRequestsTabStore from './promotion_requests/store/index';
 
 // eslint-disable-next-line import/export
 export * from '~/members/constants';
@@ -76,23 +73,6 @@ export const TAB_QUERY_PARAM_VALUES = Object.freeze({
   banned: 'banned',
 });
 
-// eslint-disable-next-line import/export
-export const TABS = [
-  ...CE_TABS,
-  {
-    namespace: MEMBER_TYPES.promotionRequest,
-    title: __('Promotions'),
-    queryParamValue: TAB_QUERY_PARAM_VALUES.promotionRequest,
-    component: PromotionRequestsTabApp,
-    store: promotionRequestsTabStore,
-  },
-  {
-    namespace: MEMBER_TYPES.banned,
-    title: __('Banned'),
-    queryParamValue: TAB_QUERY_PARAM_VALUES.banned,
-  },
-];
-
 const APP_OPTIONS_BASE = {
   [MEMBER_TYPES.promotionRequest]: gon.features?.memberPromotionManagement,
 };
diff --git a/ee/app/assets/javascripts/members/tabs_metadata.js b/ee/app/assets/javascripts/members/tabs_metadata.js
new file mode 100644
index 0000000000000..b72bf56aa1bd1
--- /dev/null
+++ b/ee/app/assets/javascripts/members/tabs_metadata.js
@@ -0,0 +1,21 @@
+import { __ } from '~/locale';
+import { TABS as CE_TABS } from '~/members/tabs_metadata';
+import PromotionRequestsTabApp from './promotion_requests/components/app.vue';
+import promotionRequestsTabStore from './promotion_requests/store/index';
+import { MEMBER_TYPES, TAB_QUERY_PARAM_VALUES } from './constants';
+
+export const TABS = [
+  ...CE_TABS,
+  {
+    namespace: MEMBER_TYPES.promotionRequest,
+    title: __('Promotions'),
+    queryParamValue: TAB_QUERY_PARAM_VALUES.promotionRequest,
+    component: PromotionRequestsTabApp,
+    store: promotionRequestsTabStore,
+  },
+  {
+    namespace: MEMBER_TYPES.banned,
+    title: __('Banned'),
+    queryParamValue: TAB_QUERY_PARAM_VALUES.banned,
+  },
+];
diff --git a/ee/spec/frontend/members/components/members_tabs_spec.js b/ee/spec/frontend/members/components/members_tabs_spec.js
index 589b1581c79d3..26e07de87343c 100644
--- a/ee/spec/frontend/members/components/members_tabs_spec.js
+++ b/ee/spec/frontend/members/components/members_tabs_spec.js
@@ -5,7 +5,8 @@ import { pagination } from 'ee_else_ce_jest/members/mock_data';
 import { mountExtended } from 'helpers/vue_test_utils_helper';
 import MembersApp from '~/members/components/app.vue';
 import MembersTabs from '~/members/components/members_tabs.vue';
-import { MEMBER_TYPES, TABS } from 'ee_else_ce/members/constants';
+import { MEMBER_TYPES } from 'ee_else_ce/members/constants';
+import { TABS } from 'ee_else_ce/members/tabs_metadata';
 
 describe('MembersTabs', () => {
   Vue.use(Vuex);
diff --git a/qa/qa/page/component/members/members_table.rb b/qa/qa/page/component/members/members_table.rb
index 6642e37202c59..bd23fef32bcbc 100644
--- a/qa/qa/page/component/members/members_table.rb
+++ b/qa/qa/page/component/members/members_table.rb
@@ -38,7 +38,7 @@ def self.included(base)
               element 'approve-access-request-button'
             end
 
-            base.view 'app/assets/javascripts/members/constants.js' do
+            base.view 'app/assets/javascripts/members/tabs_metadata.js' do
               element 'groups-list-tab'
             end
 
-- 
GitLab