diff options
Diffstat (limited to 'spec/frontend/members')
16 files changed, 99 insertions, 75 deletions
diff --git a/spec/frontend/members/components/action_buttons/approve_access_request_button_spec.js b/spec/frontend/members/components/action_buttons/approve_access_request_button_spec.js index 936715e7723..08d7cf3c932 100644 --- a/spec/frontend/members/components/action_buttons/approve_access_request_button_spec.js +++ b/spec/frontend/members/components/action_buttons/approve_access_request_button_spec.js @@ -1,5 +1,6 @@ import { GlButton, GlForm } from '@gitlab/ui'; -import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import { createMockDirective, getBinding } from 'helpers/vue_mock_directive'; import ApproveAccessRequestButton from '~/members/components/action_buttons/approve_access_request_button.vue'; @@ -7,8 +8,7 @@ import { MEMBER_TYPES } from '~/members/constants'; jest.mock('~/lib/utils/csrf', () => ({ token: 'mock-csrf-token' })); -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('ApproveAccessRequestButton', () => { let wrapper; @@ -29,7 +29,6 @@ describe('ApproveAccessRequestButton', () => { const createComponent = (propsData = {}, state) => { wrapper = shallowMount(ApproveAccessRequestButton, { - localVue, store: createStore(state), provide: { namespace: MEMBER_TYPES.accessRequest, diff --git a/spec/frontend/members/components/action_buttons/remove_group_link_button_spec.js b/spec/frontend/members/components/action_buttons/remove_group_link_button_spec.js index f91aef131a1..ca655e36c42 100644 --- a/spec/frontend/members/components/action_buttons/remove_group_link_button_spec.js +++ b/spec/frontend/members/components/action_buttons/remove_group_link_button_spec.js @@ -1,13 +1,13 @@ import { GlButton } from '@gitlab/ui'; -import { mount, createLocalVue } from '@vue/test-utils'; +import { mount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import { createMockDirective, getBinding } from 'helpers/vue_mock_directive'; import RemoveGroupLinkButton from '~/members/components/action_buttons/remove_group_link_button.vue'; import { MEMBER_TYPES } from '~/members/constants'; import { group } from '../../mock_data'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('RemoveGroupLinkButton', () => { let wrapper; @@ -29,7 +29,6 @@ describe('RemoveGroupLinkButton', () => { const createComponent = () => { wrapper = mount(RemoveGroupLinkButton, { - localVue, store: createStore(), provide: { namespace: MEMBER_TYPES.group, diff --git a/spec/frontend/members/components/action_buttons/remove_member_button_spec.js b/spec/frontend/members/components/action_buttons/remove_member_button_spec.js index 1a031cc56d6..0e5b667eb9b 100644 --- a/spec/frontend/members/components/action_buttons/remove_member_button_spec.js +++ b/spec/frontend/members/components/action_buttons/remove_member_button_spec.js @@ -1,13 +1,13 @@ import { GlButton } from '@gitlab/ui'; -import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import { createMockDirective, getBinding } from 'helpers/vue_mock_directive'; import { modalData } from 'jest/members/mock_data'; import RemoveMemberButton from '~/members/components/action_buttons/remove_member_button.vue'; import { MEMBER_TYPES } from '~/members/constants'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('RemoveMemberButton', () => { let wrapper; @@ -33,7 +33,6 @@ describe('RemoveMemberButton', () => { const createComponent = (propsData = {}, state) => { wrapper = shallowMount(RemoveMemberButton, { - localVue, store: createStore(state), provide: { namespace: MEMBER_TYPES.user, diff --git a/spec/frontend/members/components/action_buttons/resend_invite_button_spec.js b/spec/frontend/members/components/action_buttons/resend_invite_button_spec.js index 547e067450c..8e933d16463 100644 --- a/spec/frontend/members/components/action_buttons/resend_invite_button_spec.js +++ b/spec/frontend/members/components/action_buttons/resend_invite_button_spec.js @@ -1,5 +1,6 @@ import { GlButton } from '@gitlab/ui'; -import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import { createMockDirective, getBinding } from 'helpers/vue_mock_directive'; import ResendInviteButton from '~/members/components/action_buttons/resend_invite_button.vue'; @@ -7,8 +8,7 @@ import { MEMBER_TYPES } from '~/members/constants'; jest.mock('~/lib/utils/csrf', () => ({ token: 'mock-csrf-token' })); -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('ResendInviteButton', () => { let wrapper; @@ -29,7 +29,6 @@ describe('ResendInviteButton', () => { const createComponent = (propsData = {}, state) => { wrapper = shallowMount(ResendInviteButton, { - localVue, store: createStore(state), provide: { namespace: MEMBER_TYPES.invite, diff --git a/spec/frontend/members/components/app_spec.js b/spec/frontend/members/components/app_spec.js index 9590cd9d8d4..4124a1870a6 100644 --- a/spec/frontend/members/components/app_spec.js +++ b/spec/frontend/members/components/app_spec.js @@ -1,6 +1,6 @@ import { GlAlert } from '@gitlab/ui'; -import { shallowMount, createLocalVue } from '@vue/test-utils'; -import { nextTick } from 'vue'; +import { shallowMount } from '@vue/test-utils'; +import Vue, { nextTick } from 'vue'; import Vuex from 'vuex'; import * as commonUtils from '~/lib/utils/common_utils'; import MembersApp from '~/members/components/app.vue'; @@ -11,8 +11,7 @@ import { RECEIVE_MEMBER_ROLE_ERROR, HIDE_ERROR } from '~/members/store/mutation_ import mutations from '~/members/store/mutations'; describe('MembersApp', () => { - const localVue = createLocalVue(); - localVue.use(Vuex); + Vue.use(Vuex); let wrapper; let store; @@ -33,7 +32,6 @@ describe('MembersApp', () => { }); wrapper = shallowMount(MembersApp, { - localVue, propsData: { namespace: MEMBER_TYPES.group, tabQueryParamValue: TAB_QUERY_PARAM_VALUES.group, diff --git a/spec/frontend/members/components/avatars/user_avatar_spec.js b/spec/frontend/members/components/avatars/user_avatar_spec.js index 5cf3a4cdc13..7bcf4a11413 100644 --- a/spec/frontend/members/components/avatars/user_avatar_spec.js +++ b/spec/frontend/members/components/avatars/user_avatar_spec.js @@ -1,7 +1,8 @@ import { GlAvatarLink, GlBadge } from '@gitlab/ui'; -import { within } from '@testing-library/dom'; -import { mount, createWrapper } from '@vue/test-utils'; +import { mountExtended } from 'helpers/vue_test_utils_helper'; import UserAvatar from '~/members/components/avatars/user_avatar.vue'; +import { AVAILABILITY_STATUS } from '~/set_status_modal/utils'; + import { member as memberMock, member2faEnabled, orphanedMember } from '../../mock_data'; describe('UserAvatar', () => { @@ -10,7 +11,7 @@ describe('UserAvatar', () => { const { user } = memberMock; const createComponent = (propsData = {}, provide = {}) => { - wrapper = mount(UserAvatar, { + wrapper = mountExtended(UserAvatar, { propsData: { member: memberMock, isCurrentUser: false, @@ -23,9 +24,6 @@ describe('UserAvatar', () => { }); }; - const getByText = (text, options) => - createWrapper(within(wrapper.element).findByText(text, options)); - const findStatusEmoji = (emoji) => wrapper.find(`gl-emoji[data-name="${emoji}"]`); afterEach(() => { @@ -48,13 +46,13 @@ describe('UserAvatar', () => { it("renders user's name", () => { createComponent(); - expect(getByText(user.name).exists()).toBe(true); + expect(wrapper.findByText(user.name).exists()).toBe(true); }); it("renders user's username", () => { createComponent(); - expect(getByText(`@${user.username}`).exists()).toBe(true); + expect(wrapper.findByText(`@${user.username}`).exists()).toBe(true); }); it("renders user's avatar", () => { @@ -67,7 +65,7 @@ describe('UserAvatar', () => { it('displays an orphaned user', () => { createComponent({ member: orphanedMember }); - expect(getByText('Orphaned member').exists()).toBe(true); + expect(wrapper.findByText('Orphaned member').exists()).toBe(true); }); }); @@ -85,13 +83,13 @@ describe('UserAvatar', () => { it('renders the "It\'s you" badge when member is current user', () => { createComponent({ isCurrentUser: true }); - expect(getByText("It's you").exists()).toBe(true); + expect(wrapper.findByText("It's you").exists()).toBe(true); }); it('does not render 2FA badge when `canManageMembers` is `false`', () => { createComponent({ member: member2faEnabled }, { canManageMembers: false }); - expect(within(wrapper.element).queryByText('2FA')).toBe(null); + expect(wrapper.findByText('2FA').exists()).toBe(false); }); }); @@ -112,6 +110,23 @@ describe('UserAvatar', () => { expect(findStatusEmoji(emoji).exists()).toBe(true); }); + + describe('when `user.showStatus` is `false', () => { + it('does not display status emoji', () => { + createComponent({ + member: { + ...memberMock, + user: { + ...memberMock.user, + showStatus: false, + status: { emoji, messageHtml: 'On vacation' }, + }, + }, + }); + + expect(findStatusEmoji(emoji).exists()).toBe(false); + }); + }); }); describe('when not set', () => { @@ -122,4 +137,30 @@ describe('UserAvatar', () => { }); }); }); + + describe('user availability', () => { + describe('when `user.availability` is `null`', () => { + it("does not show `(Busy)` next to user's name", () => { + createComponent(); + + expect(wrapper.findByText('(Busy)').exists()).toBe(false); + }); + }); + + describe(`when user.availability is ${AVAILABILITY_STATUS.BUSY}`, () => { + it("shows `(Busy)` next to user's name", () => { + createComponent({ + member: { + ...memberMock, + user: { + ...memberMock.user, + availability: AVAILABILITY_STATUS.BUSY, + }, + }, + }); + + expect(wrapper.findByText('(Busy)').exists()).toBe(true); + }); + }); + }); }); diff --git a/spec/frontend/members/components/filter_sort/filter_sort_container_spec.js b/spec/frontend/members/components/filter_sort/filter_sort_container_spec.js index 16ac52737bc..4ca8a3bdc36 100644 --- a/spec/frontend/members/components/filter_sort/filter_sort_container_spec.js +++ b/spec/frontend/members/components/filter_sort/filter_sort_container_spec.js @@ -1,12 +1,12 @@ -import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import FilterSortContainer from '~/members/components/filter_sort/filter_sort_container.vue'; import MembersFilteredSearchBar from '~/members/components/filter_sort/members_filtered_search_bar.vue'; import SortDropdown from '~/members/components/filter_sort/sort_dropdown.vue'; import { MEMBER_TYPES } from '~/members/constants'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('FilterSortContainer', () => { let wrapper; @@ -32,7 +32,6 @@ describe('FilterSortContainer', () => { }); wrapper = shallowMount(FilterSortContainer, { - localVue, store, provide: { namespace: MEMBER_TYPES.user, diff --git a/spec/frontend/members/components/filter_sort/members_filtered_search_bar_spec.js b/spec/frontend/members/components/filter_sort/members_filtered_search_bar_spec.js index 3f47fa024bc..ee2fbbe57b9 100644 --- a/spec/frontend/members/components/filter_sort/members_filtered_search_bar_spec.js +++ b/spec/frontend/members/components/filter_sort/members_filtered_search_bar_spec.js @@ -1,5 +1,6 @@ import { GlFilteredSearchToken } from '@gitlab/ui'; -import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import setWindowLocation from 'helpers/set_window_location_helper'; import { redirectTo } from '~/lib/utils/url_utility'; @@ -18,8 +19,7 @@ jest.mock('~/lib/utils/url_utility', () => { }; }); -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('MembersFilteredSearchBar', () => { let wrapper; @@ -44,7 +44,6 @@ describe('MembersFilteredSearchBar', () => { }); wrapper = shallowMount(MembersFilteredSearchBar, { - localVue, provide: { sourceId: 1, canManageMembers: true, diff --git a/spec/frontend/members/components/filter_sort/sort_dropdown_spec.js b/spec/frontend/members/components/filter_sort/sort_dropdown_spec.js index d0684acd487..709ad907a38 100644 --- a/spec/frontend/members/components/filter_sort/sort_dropdown_spec.js +++ b/spec/frontend/members/components/filter_sort/sort_dropdown_spec.js @@ -1,13 +1,13 @@ import { GlSorting, GlSortingItem } from '@gitlab/ui'; -import { mount, createLocalVue } from '@vue/test-utils'; +import { mount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import setWindowLocation from 'helpers/set_window_location_helper'; import * as urlUtilities from '~/lib/utils/url_utility'; import SortDropdown from '~/members/components/filter_sort/sort_dropdown.vue'; import { MEMBER_TYPES } from '~/members/constants'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('SortDropdown', () => { let wrapper; @@ -35,7 +35,6 @@ describe('SortDropdown', () => { }); wrapper = mount(SortDropdown, { - localVue, provide: { sourceId: 1, namespace: MEMBER_TYPES.user, diff --git a/spec/frontend/members/components/modals/leave_modal_spec.js b/spec/frontend/members/components/modals/leave_modal_spec.js index f755f08dbf2..cdbabb2f646 100644 --- a/spec/frontend/members/components/modals/leave_modal_spec.js +++ b/spec/frontend/members/components/modals/leave_modal_spec.js @@ -1,8 +1,8 @@ import { GlModal, GlForm } from '@gitlab/ui'; import { within } from '@testing-library/dom'; -import { mount, createLocalVue, createWrapper } from '@vue/test-utils'; +import { mount, createWrapper } from '@vue/test-utils'; import { cloneDeep } from 'lodash'; -import { nextTick } from 'vue'; +import Vue, { nextTick } from 'vue'; import Vuex from 'vuex'; import LeaveModal from '~/members/components/modals/leave_modal.vue'; import { LEAVE_MODAL_ID, MEMBER_TYPES } from '~/members/constants'; @@ -12,8 +12,7 @@ import { member } from '../../mock_data'; jest.mock('~/lib/utils/csrf', () => ({ token: 'mock-csrf-token' })); -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('LeaveModal', () => { let wrapper; @@ -34,7 +33,6 @@ describe('LeaveModal', () => { const createComponent = (propsData = {}, state) => { wrapper = mount(LeaveModal, { - localVue, store: createStore(state), provide: { namespace: MEMBER_TYPES.user, diff --git a/spec/frontend/members/components/modals/remove_group_link_modal_spec.js b/spec/frontend/members/components/modals/remove_group_link_modal_spec.js index 313c237f51c..447496910b8 100644 --- a/spec/frontend/members/components/modals/remove_group_link_modal_spec.js +++ b/spec/frontend/members/components/modals/remove_group_link_modal_spec.js @@ -1,7 +1,7 @@ import { GlModal, GlForm } from '@gitlab/ui'; import { within } from '@testing-library/dom'; -import { mount, createLocalVue, createWrapper } from '@vue/test-utils'; -import { nextTick } from 'vue'; +import { mount, createWrapper } from '@vue/test-utils'; +import Vue, { nextTick } from 'vue'; import Vuex from 'vuex'; import RemoveGroupLinkModal from '~/members/components/modals/remove_group_link_modal.vue'; import { REMOVE_GROUP_LINK_MODAL_ID, MEMBER_TYPES } from '~/members/constants'; @@ -9,8 +9,7 @@ import { group } from '../../mock_data'; jest.mock('~/lib/utils/csrf', () => ({ token: 'mock-csrf-token' })); -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('RemoveGroupLinkModal', () => { let wrapper; @@ -38,7 +37,6 @@ describe('RemoveGroupLinkModal', () => { const createComponent = (state) => { wrapper = mount(RemoveGroupLinkModal, { - localVue, store: createStore(state), provide: { namespace: MEMBER_TYPES.group, diff --git a/spec/frontend/members/components/table/expiration_datepicker_spec.js b/spec/frontend/members/components/table/expiration_datepicker_spec.js index 3c4a9ba37ff..4fb43fbd888 100644 --- a/spec/frontend/members/components/table/expiration_datepicker_spec.js +++ b/spec/frontend/members/components/table/expiration_datepicker_spec.js @@ -1,6 +1,6 @@ import { GlDatepicker } from '@gitlab/ui'; -import { mount, createLocalVue } from '@vue/test-utils'; -import { nextTick } from 'vue'; +import { mount } from '@vue/test-utils'; +import Vue, { nextTick } from 'vue'; import Vuex from 'vuex'; import { useFakeDate } from 'helpers/fake_date'; import waitForPromises from 'helpers/wait_for_promises'; @@ -8,8 +8,7 @@ import ExpirationDatepicker from '~/members/components/table/expiration_datepick import { MEMBER_TYPES } from '~/members/constants'; import { member } from '../../mock_data'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('ExpirationDatepicker', () => { // March 15th, 2020 3:00 @@ -49,7 +48,6 @@ describe('ExpirationDatepicker', () => { provide: { namespace: MEMBER_TYPES.user, }, - localVue, store: createStore(), mocks: { $toast, diff --git a/spec/frontend/members/components/table/members_table_cell_spec.js b/spec/frontend/members/components/table/members_table_cell_spec.js index 5375ee11736..6575a7c7126 100644 --- a/spec/frontend/members/components/table/members_table_cell_spec.js +++ b/spec/frontend/members/components/table/members_table_cell_spec.js @@ -1,4 +1,5 @@ -import { mount, createLocalVue } from '@vue/test-utils'; +import { mount } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import MembersTableCell from '~/members/components/table/members_table_cell.vue'; import { MEMBER_TYPES } from '~/members/constants'; @@ -36,9 +37,8 @@ describe('MembersTableCell', () => { }, }; - const localVue = createLocalVue(); - localVue.use(Vuex); - localVue.component('WrappedComponent', WrappedComponent); + Vue.use(Vuex); + Vue.component('WrappedComponent', WrappedComponent); const createStore = (state = {}) => { return new Vuex.Store({ @@ -50,7 +50,6 @@ describe('MembersTableCell', () => { const createComponent = (propsData, state) => { wrapper = mount(MembersTableCell, { - localVue, propsData, store: createStore(state), provide: { diff --git a/spec/frontend/members/components/table/members_table_spec.js b/spec/frontend/members/components/table/members_table_spec.js index 580e5edd652..b2756e506eb 100644 --- a/spec/frontend/members/components/table/members_table_spec.js +++ b/spec/frontend/members/components/table/members_table_spec.js @@ -1,5 +1,5 @@ import { GlBadge, GlPagination, GlTable } from '@gitlab/ui'; -import { createLocalVue } from '@vue/test-utils'; +import Vue from 'vue'; import Vuex from 'vuex'; import setWindowLocation from 'helpers/set_window_location_helper'; import { mountExtended, extendedWrapper } from 'helpers/vue_test_utils_helper'; @@ -16,6 +16,7 @@ import { MEMBER_STATE_AWAITING, MEMBER_STATE_ACTIVE, USER_STATE_BLOCKED_PENDING_APPROVAL, + BADGE_LABELS_AWAITING_USER_SIGNUP, BADGE_LABELS_PENDING_OWNER_APPROVAL, TAB_QUERY_PARAM_VALUES, } from '~/members/constants'; @@ -28,8 +29,7 @@ import { pagination, } from '../../mock_data'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('MembersTable', () => { let wrapper; @@ -56,7 +56,6 @@ describe('MembersTable', () => { const createComponent = (state, provide = {}) => { wrapper = mountExtended(MembersTable, { - localVue, propsData: { tabQueryParamValue: TAB_QUERY_PARAM_VALUES.invite, }, @@ -133,9 +132,9 @@ describe('MembersTable', () => { describe('Invited column', () => { describe.each` state | userState | expectedBadgeLabel - ${MEMBER_STATE_CREATED} | ${null} | ${''} + ${MEMBER_STATE_CREATED} | ${null} | ${BADGE_LABELS_AWAITING_USER_SIGNUP} ${MEMBER_STATE_CREATED} | ${USER_STATE_BLOCKED_PENDING_APPROVAL} | ${BADGE_LABELS_PENDING_OWNER_APPROVAL} - ${MEMBER_STATE_AWAITING} | ${''} | ${''} + ${MEMBER_STATE_AWAITING} | ${''} | ${BADGE_LABELS_AWAITING_USER_SIGNUP} ${MEMBER_STATE_AWAITING} | ${USER_STATE_BLOCKED_PENDING_APPROVAL} | ${BADGE_LABELS_PENDING_OWNER_APPROVAL} ${MEMBER_STATE_AWAITING} | ${'something_else'} | ${BADGE_LABELS_PENDING_OWNER_APPROVAL} ${MEMBER_STATE_ACTIVE} | ${null} | ${''} diff --git a/spec/frontend/members/components/table/role_dropdown_spec.js b/spec/frontend/members/components/table/role_dropdown_spec.js index a4a4c620921..d4d950e99ba 100644 --- a/spec/frontend/members/components/table/role_dropdown_spec.js +++ b/spec/frontend/members/components/table/role_dropdown_spec.js @@ -1,8 +1,8 @@ import { GlDropdown, GlDropdownItem } from '@gitlab/ui'; import { GlBreakpointInstance as bp } from '@gitlab/ui/dist/utils'; import { within } from '@testing-library/dom'; -import { mount, createWrapper, createLocalVue } from '@vue/test-utils'; -import { nextTick } from 'vue'; +import { mount, createWrapper } from '@vue/test-utils'; +import Vue, { nextTick } from 'vue'; import Vuex from 'vuex'; import waitForPromises from 'helpers/wait_for_promises'; import { BV_DROPDOWN_SHOW } from '~/lib/utils/constants'; @@ -10,8 +10,7 @@ import RoleDropdown from '~/members/components/table/role_dropdown.vue'; import { MEMBER_TYPES } from '~/members/constants'; import { member } from '../../mock_data'; -const localVue = createLocalVue(); -localVue.use(Vuex); +Vue.use(Vuex); describe('RoleDropdown', () => { let wrapper; @@ -42,7 +41,6 @@ describe('RoleDropdown', () => { permissions: {}, ...propsData, }, - localVue, store: createStore(), mocks: { $toast, diff --git a/spec/frontend/members/mock_data.js b/spec/frontend/members/mock_data.js index 218db0b587a..83856a00a15 100644 --- a/spec/frontend/members/mock_data.js +++ b/spec/frontend/members/mock_data.js @@ -25,6 +25,8 @@ export const member = { twoFactorEnabled: false, oncallSchedules: [{ name: 'schedule 1' }], escalationPolicies: [{ name: 'policy 1' }], + availability: null, + showStatus: true, }, id: 238, createdAt: '2020-07-17T16:22:46.923Z', |