From a32bd4dffa547124e9b54cd44ff6d1b16fc7f6ae Mon Sep 17 00:00:00 2001 From: peterhegman <phegman@gitlab.com> Date: Wed, 6 May 2020 16:36:17 -0700 Subject: [PATCH] Move `gitlab_team_member_badge.vue` to EE It is a `.com` only feature so it is not needed in the CE build --- .../notes/components/note_header.vue | 9 ++-- .../epic/components/epic_header.vue | 12 ++--- .../badges/gitlab_team_member_badge.vue | 0 .../epic/components/epic_header_spec.js | 18 +------ .../notes/components/note_header_spec.js | 50 +++++++++++++++++++ .../notes/components/note_header_spec.js | 15 ------ 6 files changed, 61 insertions(+), 43 deletions(-) rename {app => ee/app}/assets/javascripts/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue (100%) create mode 100644 ee/spec/frontend/notes/components/note_header_spec.js diff --git a/app/assets/javascripts/notes/components/note_header.vue b/app/assets/javascripts/notes/components/note_header.vue index 74a0b69bc54a..a323e08d26d1 100644 --- a/app/assets/javascripts/notes/components/note_header.vue +++ b/app/assets/javascripts/notes/components/note_header.vue @@ -1,12 +1,12 @@ <script> import { mapActions } from 'vuex'; import timeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; -import GitlabTeamMemberBadge from '~/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue'; export default { components: { timeAgoTooltip, - GitlabTeamMemberBadge, + GitlabTeamMemberBadge: () => + import('ee_component/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue'), }, props: { author: { @@ -62,9 +62,6 @@ export default { hasAuthor() { return this.author && Object.keys(this.author).length; }, - showGitlabTeamMemberBadge() { - return this.author?.is_gitlab_employee; - }, authorLinkClasses() { return { hover: this.isUsernameLinkHovered, @@ -156,7 +153,7 @@ export default { @mouseleave="handleUsernameMouseLeave" ><span class="note-headline-light">@{{ author.username }}</span> </a> - <gitlab-team-member-badge v-if="showGitlabTeamMemberBadge" /> + <gitlab-team-member-badge v-if="author && author.is_gitlab_employee" /> </span> </template> <span v-else>{{ __('A deleted user') }}</span> diff --git a/ee/app/assets/javascripts/epic/components/epic_header.vue b/ee/app/assets/javascripts/epic/components/epic_header.vue index 6da7f2e0cbca..86661ee2b714 100644 --- a/ee/app/assets/javascripts/epic/components/epic_header.vue +++ b/ee/app/assets/javascripts/epic/components/epic_header.vue @@ -8,7 +8,6 @@ import tooltip from '~/vue_shared/directives/tooltip'; import Icon from '~/vue_shared/components/icon.vue'; import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue'; import TimeagoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; -import GitlabTeamMemberBadge from '~/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue'; import epicUtils from '../utils/epic_utils'; import { statusType } from '../constants'; @@ -22,7 +21,8 @@ export default { GlDeprecatedButton, UserAvatarLink, TimeagoTooltip, - GitlabTeamMemberBadge, + GitlabTeamMemberBadge: () => + import('ee_component/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue'), }, computed: { ...mapState([ @@ -51,9 +51,6 @@ export default { actionButtonText() { return this.isEpicOpen ? __('Close epic') : __('Reopen epic'); }, - showGitlabTeamMemberBadge() { - return this.author?.isGitlabEmployee; - }, }, mounted() { /** @@ -101,7 +98,10 @@ export default { :username="author.name" img-css-classes="avatar-inline" /> - <gitlab-team-member-badge v-if="showGitlabTeamMemberBadge" ref="gitlabTeamMemberBadge" /> + <gitlab-team-member-badge + v-if="author && author.isGitlabEmployee" + ref="gitlabTeamMemberBadge" + /> </strong> </div> </div> diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue b/ee/app/assets/javascripts/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue similarity index 100% rename from app/assets/javascripts/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue rename to ee/app/assets/javascripts/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue diff --git a/ee/spec/frontend/epic/components/epic_header_spec.js b/ee/spec/frontend/epic/components/epic_header_spec.js index 53ad84591eef..0e0d00947eff 100644 --- a/ee/spec/frontend/epic/components/epic_header_spec.js +++ b/ee/spec/frontend/epic/components/epic_header_spec.js @@ -87,21 +87,6 @@ describe('EpicHeaderComponent', () => { expect(vm.actionButtonText).toBe('Reopen epic'); }); }); - - describe('showGitlabTeamMemberBadge', () => { - test.each` - isGitlabEmployeeValue | expected - ${true} | ${true} - ${false} | ${false} - `( - 'returns $expected when `author.isGitlabEmployee` is $isGitlabEmployeeValue', - ({ isGitlabEmployeeValue, expected }) => { - vm.$store.state.author.isGitlabEmployee = isGitlabEmployeeValue; - - expect(vm.showGitlabTeamMemberBadge).toBe(expected); - }, - ); - }); }); describe('template', () => { @@ -149,7 +134,8 @@ describe('EpicHeaderComponent', () => { it('renders GitLab team member badge when `author.isGitlabEmployee` is `true`', () => { vm.$store.state.author.isGitlabEmployee = true; - return vm.$nextTick().then(() => { + // Wait for dynamic imports to resolve + return new Promise(setImmediate).then(() => { expect(vm.$refs.gitlabTeamMemberBadge).not.toBeUndefined(); }); }); diff --git a/ee/spec/frontend/notes/components/note_header_spec.js b/ee/spec/frontend/notes/components/note_header_spec.js new file mode 100644 index 000000000000..31d4852e381c --- /dev/null +++ b/ee/spec/frontend/notes/components/note_header_spec.js @@ -0,0 +1,50 @@ +import { shallowMount, createLocalVue } from '@vue/test-utils'; +import Vuex from 'vuex'; +import NoteHeader from '~/notes/components/note_header.vue'; +import GitlabTeamMemberBadge from 'ee/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue'; + +const localVue = createLocalVue(); +localVue.use(Vuex); + +describe('NoteHeader component', () => { + let wrapper; + + const author = { + avatar_url: null, + id: 1, + name: 'Root', + path: '/root', + state: 'active', + username: 'root', + }; + + const createComponent = props => { + wrapper = shallowMount(NoteHeader, { + localVue, + store: new Vuex.Store(), + propsData: { ...props }, + }); + }; + + afterEach(() => { + wrapper.destroy(); + wrapper = null; + }); + + test.each` + props | expected | message1 | message2 + ${{ author: { ...author, is_gitlab_employee: true } }} | ${true} | ${'renders'} | ${'true'} + ${{ author: { ...author, is_gitlab_employee: false } }} | ${false} | ${"doesn't render"} | ${'false'} + ${{ author }} | ${false} | ${"doesn't render"} | ${'undefined'} + `( + '$message1 GitLab team member badge when `is_gitlab_employee` is $message2', + ({ props, expected }) => { + createComponent(props); + + // Wait for dynamic imports to resolve + return new Promise(setImmediate).then(() => { + expect(wrapper.find(GitlabTeamMemberBadge).exists()).toBe(expected); + }); + }, + ); +}); diff --git a/spec/frontend/notes/components/note_header_spec.js b/spec/frontend/notes/components/note_header_spec.js index 8cb78720c7ef..9b9ce0a8ed0b 100644 --- a/spec/frontend/notes/components/note_header_spec.js +++ b/spec/frontend/notes/components/note_header_spec.js @@ -2,7 +2,6 @@ import { shallowMount, createLocalVue } from '@vue/test-utils'; import { nextTick } from 'vue'; import Vuex from 'vuex'; import NoteHeader from '~/notes/components/note_header.vue'; -import GitlabTeamMemberBadge from '~/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue'; const localVue = createLocalVue(); localVue.use(Vuex); @@ -141,20 +140,6 @@ describe('NoteHeader component', () => { }); }); - test.each` - props | expected | message1 | message2 - ${{ author: { ...author, is_gitlab_employee: true } }} | ${true} | ${'renders'} | ${'true'} - ${{ author: { ...author, is_gitlab_employee: false } }} | ${false} | ${"doesn't render"} | ${'false'} - ${{ author }} | ${false} | ${"doesn't render"} | ${'undefined'} - `( - '$message1 GitLab team member badge when `is_gitlab_employee` is $message2', - ({ props, expected }) => { - createComponent(props); - - expect(wrapper.find(GitlabTeamMemberBadge).exists()).toBe(expected); - }, - ); - describe('loading spinner', () => { it('shows spinner when showSpinner is true', () => { createComponent(); -- GitLab