diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 13:34:06 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 13:34:06 +0300 |
commit | 859a6fb938bb9ee2a317c46dfa4fcc1af49608f0 (patch) | |
tree | d7f2700abe6b4ffcb2dcfc80631b2d87d0609239 /spec/frontend/groups | |
parent | 446d496a6d000c73a304be52587cd9bbc7493136 (diff) |
Add latest changes from gitlab-org/gitlab@13-9-stable-eev13.9.0-rc42
Diffstat (limited to 'spec/frontend/groups')
-rw-r--r-- | spec/frontend/groups/components/app_spec.js | 12 | ||||
-rw-r--r-- | spec/frontend/groups/components/group_folder_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/groups/components/group_item_spec.js | 6 | ||||
-rw-r--r-- | spec/frontend/groups/components/groups_spec.js | 6 | ||||
-rw-r--r-- | spec/frontend/groups/components/invite_members_banner_spec.js | 4 | ||||
-rw-r--r-- | spec/frontend/groups/components/item_actions_spec.js | 16 | ||||
-rw-r--r-- | spec/frontend/groups/components/item_caret_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/groups/components/item_stats_value_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/groups/components/item_type_icon_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/groups/members/components/app_spec.js | 95 | ||||
-rw-r--r-- | spec/frontend/groups/members/index_spec.js | 113 | ||||
-rw-r--r-- | spec/frontend/groups/members/mock_data.js | 33 | ||||
-rw-r--r-- | spec/frontend/groups/members/utils_spec.js | 45 | ||||
-rw-r--r-- | spec/frontend/groups/service/groups_service_spec.js | 2 |
14 files changed, 38 insertions, 302 deletions
diff --git a/spec/frontend/groups/components/app_spec.js b/spec/frontend/groups/components/app_spec.js index 9244e4f331e..e559c9519f2 100644 --- a/spec/frontend/groups/components/app_spec.js +++ b/spec/frontend/groups/components/app_spec.js @@ -1,16 +1,16 @@ import '~/flash'; -import Vue from 'vue'; -import AxiosMockAdapter from 'axios-mock-adapter'; import { GlModal, GlLoadingIcon } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; +import AxiosMockAdapter from 'axios-mock-adapter'; +import Vue from 'vue'; import waitForPromises from 'helpers/wait_for_promises'; -import axios from '~/lib/utils/axios_utils'; import appComponent from '~/groups/components/app.vue'; import groupFolderComponent from '~/groups/components/group_folder.vue'; import groupItemComponent from '~/groups/components/group_item.vue'; import eventHub from '~/groups/event_hub'; -import GroupsStore from '~/groups/store/groups_store'; import GroupsService from '~/groups/service/groups_service'; +import GroupsStore from '~/groups/store/groups_store'; +import axios from '~/lib/utils/axios_utils'; import * as urlUtilities from '~/lib/utils/url_utility'; import { @@ -60,8 +60,8 @@ describe('AppComponent', () => { beforeEach(() => { mock = new AxiosMockAdapter(axios); mock.onGet('/dashboard/groups.json').reply(200, mockGroups); - Vue.component('group-folder', groupFolderComponent); - Vue.component('group-item', groupItemComponent); + Vue.component('GroupFolder', groupFolderComponent); + Vue.component('GroupItem', groupItemComponent); createShallowComponent(); getGroupsSpy = jest.spyOn(vm.service, 'getGroups'); diff --git a/spec/frontend/groups/components/group_folder_spec.js b/spec/frontend/groups/components/group_folder_spec.js index a40fa9bece8..1d8e10479b6 100644 --- a/spec/frontend/groups/components/group_folder_spec.js +++ b/spec/frontend/groups/components/group_folder_spec.js @@ -19,7 +19,7 @@ describe('GroupFolderComponent', () => { let vm; beforeEach(() => { - Vue.component('group-item', groupItemComponent); + Vue.component('GroupItem', groupItemComponent); vm = createComponent(); vm.$mount(); diff --git a/spec/frontend/groups/components/group_item_spec.js b/spec/frontend/groups/components/group_item_spec.js index d70ea709dee..4fcc9bafa46 100644 --- a/spec/frontend/groups/components/group_item_spec.js +++ b/spec/frontend/groups/components/group_item_spec.js @@ -1,9 +1,9 @@ import Vue from 'vue'; import mountComponent from 'helpers/vue_mount_component_helper'; -import groupItemComponent from '~/groups/components/group_item.vue'; import groupFolderComponent from '~/groups/components/group_folder.vue'; -import { getGroupItemMicrodata } from '~/groups/store/utils'; +import groupItemComponent from '~/groups/components/group_item.vue'; import eventHub from '~/groups/event_hub'; +import { getGroupItemMicrodata } from '~/groups/store/utils'; import * as urlUtilities from '~/lib/utils/url_utility'; import { mockParentGroupItem, mockChildren } from '../mock_data'; @@ -20,7 +20,7 @@ describe('GroupItemComponent', () => { let vm; beforeEach(() => { - Vue.component('group-folder', groupFolderComponent); + Vue.component('GroupFolder', groupFolderComponent); vm = createComponent(); diff --git a/spec/frontend/groups/components/groups_spec.js b/spec/frontend/groups/components/groups_spec.js index 6205400eb03..dc1a10639fc 100644 --- a/spec/frontend/groups/components/groups_spec.js +++ b/spec/frontend/groups/components/groups_spec.js @@ -1,9 +1,9 @@ import Vue from 'vue'; import mountComponent from 'helpers/vue_mount_component_helper'; -import groupsComponent from '~/groups/components/groups.vue'; import groupFolderComponent from '~/groups/components/group_folder.vue'; import groupItemComponent from '~/groups/components/group_item.vue'; +import groupsComponent from '~/groups/components/groups.vue'; import eventHub from '~/groups/event_hub'; import { mockGroups, mockPageInfo } from '../mock_data'; @@ -22,8 +22,8 @@ describe('GroupsComponent', () => { let vm; beforeEach(() => { - Vue.component('group-folder', groupFolderComponent); - Vue.component('group-item', groupItemComponent); + Vue.component('GroupFolder', groupFolderComponent); + Vue.component('GroupItem', groupItemComponent); vm = createComponent(); diff --git a/spec/frontend/groups/components/invite_members_banner_spec.js b/spec/frontend/groups/components/invite_members_banner_spec.js index 4e69f3cd433..9a2068a27a1 100644 --- a/spec/frontend/groups/components/invite_members_banner_spec.js +++ b/spec/frontend/groups/components/invite_members_banner_spec.js @@ -1,8 +1,8 @@ -import { shallowMount } from '@vue/test-utils'; import { GlBanner, GlButton } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; -import { setCookie, parseBoolean } from '~/lib/utils/common_utils'; import InviteMembersBanner from '~/groups/components/invite_members_banner.vue'; +import { setCookie, parseBoolean } from '~/lib/utils/common_utils'; jest.mock('~/lib/utils/common_utils'); diff --git a/spec/frontend/groups/components/item_actions_spec.js b/spec/frontend/groups/components/item_actions_spec.js index 9adbc9abe13..ffbdf9b1aa6 100644 --- a/spec/frontend/groups/components/item_actions_spec.js +++ b/spec/frontend/groups/components/item_actions_spec.js @@ -66,6 +66,22 @@ describe('ItemActions', () => { }); }); + it('emits `showLeaveGroupModal` event with the correct prefix if `action` prop is passed', () => { + const group = { + ...mockParentGroupItem, + canEdit: true, + canLeave: true, + }; + createComponent({ + group, + action: 'test', + }); + jest.spyOn(eventHub, '$emit'); + findLeaveGroupBtn().vm.$emit('click', { stopPropagation: () => {} }); + + expect(eventHub.$emit).toHaveBeenCalledWith('testshowLeaveGroupModal', group, parentGroup); + }); + it('does not render leave button if group can not be left', () => { createComponent({ group: { diff --git a/spec/frontend/groups/components/item_caret_spec.js b/spec/frontend/groups/components/item_caret_spec.js index b2915607a06..cbe1f21d6e2 100644 --- a/spec/frontend/groups/components/item_caret_spec.js +++ b/spec/frontend/groups/components/item_caret_spec.js @@ -1,5 +1,5 @@ -import { shallowMount } from '@vue/test-utils'; import { GlIcon } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; import ItemCaret from '~/groups/components/item_caret.vue'; describe('ItemCaret', () => { diff --git a/spec/frontend/groups/components/item_stats_value_spec.js b/spec/frontend/groups/components/item_stats_value_spec.js index bca233883af..98186120a81 100644 --- a/spec/frontend/groups/components/item_stats_value_spec.js +++ b/spec/frontend/groups/components/item_stats_value_spec.js @@ -1,5 +1,5 @@ -import { shallowMount } from '@vue/test-utils'; import { GlIcon } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; import ItemStatsValue from '~/groups/components/item_stats_value.vue'; describe('ItemStatsValue', () => { diff --git a/spec/frontend/groups/components/item_type_icon_spec.js b/spec/frontend/groups/components/item_type_icon_spec.js index 5e7056be218..9310943841e 100644 --- a/spec/frontend/groups/components/item_type_icon_spec.js +++ b/spec/frontend/groups/components/item_type_icon_spec.js @@ -1,5 +1,5 @@ -import { shallowMount } from '@vue/test-utils'; import { GlIcon } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; import ItemTypeIcon from '~/groups/components/item_type_icon.vue'; import { ITEM_TYPE } from '../mock_data'; diff --git a/spec/frontend/groups/members/components/app_spec.js b/spec/frontend/groups/members/components/app_spec.js deleted file mode 100644 index 9847dacbec8..00000000000 --- a/spec/frontend/groups/members/components/app_spec.js +++ /dev/null @@ -1,95 +0,0 @@ -import { shallowMount, createLocalVue } from '@vue/test-utils'; -import { nextTick } from 'vue'; -import Vuex from 'vuex'; -import { GlAlert } from '@gitlab/ui'; -import App from '~/groups/members/components/app.vue'; -import FilterSortContainer from '~/members/components/filter_sort/filter_sort_container.vue'; -import * as commonUtils from '~/lib/utils/common_utils'; -import { RECEIVE_MEMBER_ROLE_ERROR, HIDE_ERROR } from '~/members/store/mutation_types'; -import mutations from '~/members/store/mutations'; - -describe('GroupMembersApp', () => { - const localVue = createLocalVue(); - localVue.use(Vuex); - - let wrapper; - let store; - - const createComponent = (state = {}, options = {}) => { - store = new Vuex.Store({ - state: { - showError: true, - errorMessage: 'Something went wrong, please try again.', - ...state, - }, - mutations, - }); - - wrapper = shallowMount(App, { - localVue, - store, - ...options, - }); - }; - - const findAlert = () => wrapper.find(GlAlert); - const findFilterSortContainer = () => wrapper.find(FilterSortContainer); - - beforeEach(() => { - commonUtils.scrollToElement = jest.fn(); - }); - - afterEach(() => { - wrapper.destroy(); - store = null; - }); - - describe('when `showError` is changed to `true`', () => { - it('renders and scrolls to error alert', async () => { - createComponent({ showError: false, errorMessage: '' }); - - store.commit(RECEIVE_MEMBER_ROLE_ERROR); - - await nextTick(); - - const alert = findAlert(); - - expect(alert.exists()).toBe(true); - expect(alert.text()).toBe( - "An error occurred while updating the member's role, please try again.", - ); - expect(commonUtils.scrollToElement).toHaveBeenCalledWith(alert.element); - }); - }); - - describe('when `showError` is changed to `false`', () => { - it('does not render and scroll to error alert', async () => { - createComponent(); - - store.commit(HIDE_ERROR); - - await nextTick(); - - expect(findAlert().exists()).toBe(false); - expect(commonUtils.scrollToElement).not.toHaveBeenCalled(); - }); - }); - - describe('when alert is dismissed', () => { - it('hides alert', async () => { - createComponent(); - - findAlert().vm.$emit('dismiss'); - - await nextTick(); - - expect(findAlert().exists()).toBe(false); - }); - }); - - it('renders `FilterSortContainer`', () => { - createComponent(); - - expect(findFilterSortContainer().exists()).toBe(true); - }); -}); diff --git a/spec/frontend/groups/members/index_spec.js b/spec/frontend/groups/members/index_spec.js deleted file mode 100644 index 5c717e53229..00000000000 --- a/spec/frontend/groups/members/index_spec.js +++ /dev/null @@ -1,113 +0,0 @@ -import { createWrapper } from '@vue/test-utils'; -import { initGroupMembersApp } from '~/groups/members'; -import GroupMembersApp from '~/groups/members/components/app.vue'; -import { membersJsonString, membersParsed } from './mock_data'; - -describe('initGroupMembersApp', () => { - let el; - let vm; - let wrapper; - - const setup = () => { - vm = initGroupMembersApp(el, { - tableFields: ['account'], - tableAttrs: { table: { 'data-qa-selector': 'members_list' } }, - tableSortableFields: ['account'], - requestFormatter: () => ({}), - filteredSearchBar: { show: false }, - }); - wrapper = createWrapper(vm); - }; - - beforeEach(() => { - el = document.createElement('div'); - el.setAttribute('data-members', membersJsonString); - el.setAttribute('data-group-id', '234'); - el.setAttribute('data-can-manage-members', 'true'); - el.setAttribute('data-member-path', '/groups/foo-bar/-/group_members/:id'); - - window.gon = { current_user_id: 123 }; - }); - - afterEach(() => { - el = null; - - wrapper.destroy(); - wrapper = null; - }); - - it('renders `GroupMembersApp`', () => { - setup(); - - expect(wrapper.find(GroupMembersApp).exists()).toBe(true); - }); - - it('sets `currentUserId` in Vuex store', () => { - setup(); - - expect(vm.$store.state.currentUserId).toBe(123); - }); - - describe('when `gon.current_user_id` is not set (user is not logged in)', () => { - it('sets `currentUserId` as `null` in Vuex store', () => { - window.gon = {}; - setup(); - - expect(vm.$store.state.currentUserId).toBeNull(); - }); - }); - - it('parses and sets `data-group-id` as `sourceId` in Vuex store', () => { - setup(); - - expect(vm.$store.state.sourceId).toBe(234); - }); - - it('parses and sets `data-can-manage-members` as `canManageMembers` in Vuex store', () => { - setup(); - - expect(vm.$store.state.canManageMembers).toBe(true); - }); - - it('parses and sets `members` in Vuex store', () => { - setup(); - - expect(vm.$store.state.members).toEqual(membersParsed); - }); - - it('sets `tableFields` in Vuex store', () => { - setup(); - - expect(vm.$store.state.tableFields).toEqual(['account']); - }); - - it('sets `tableAttrs` in Vuex store', () => { - setup(); - - expect(vm.$store.state.tableAttrs).toEqual({ table: { 'data-qa-selector': 'members_list' } }); - }); - - it('sets `tableSortableFields` in Vuex store', () => { - setup(); - - expect(vm.$store.state.tableSortableFields).toEqual(['account']); - }); - - it('sets `requestFormatter` in Vuex store', () => { - setup(); - - expect(vm.$store.state.requestFormatter()).toEqual({}); - }); - - it('sets `filteredSearchBar` in Vuex store', () => { - setup(); - - expect(vm.$store.state.filteredSearchBar).toEqual({ show: false }); - }); - - it('sets `memberPath` in Vuex store', () => { - setup(); - - expect(vm.$store.state.memberPath).toBe('/groups/foo-bar/-/group_members/:id'); - }); -}); diff --git a/spec/frontend/groups/members/mock_data.js b/spec/frontend/groups/members/mock_data.js deleted file mode 100644 index b84c9c6d446..00000000000 --- a/spec/frontend/groups/members/mock_data.js +++ /dev/null @@ -1,33 +0,0 @@ -export const membersJsonString = - '[{"requested_at":null,"can_update":true,"can_remove":true,"can_override":false,"access_level":{"integer_value":50,"string_value":"Owner"},"source":{"id":323,"name":"My group / my subgroup","web_url":"http://127.0.0.1:3000/groups/my-group/my-subgroup"},"user":{"id":1,"name":"Administrator","username":"root","web_url":"http://127.0.0.1:3000/root","avatar_url":"https://www.gravatar.com/avatar/4816142ef496f956a277bedf1a40607b?s=80\u0026d=identicon","blocked":false,"two_factor_enabled":false},"id":524,"created_at":"2020-08-21T21:33:27.631Z","expires_at":null,"using_license":false,"group_sso":false,"group_managed_account":false}]'; - -export const membersParsed = [ - { - requestedAt: null, - canUpdate: true, - canRemove: true, - canOverride: false, - accessLevel: { integerValue: 50, stringValue: 'Owner' }, - source: { - id: 323, - name: 'My group / my subgroup', - webUrl: 'http://127.0.0.1:3000/groups/my-group/my-subgroup', - }, - user: { - id: 1, - name: 'Administrator', - username: 'root', - webUrl: 'http://127.0.0.1:3000/root', - avatarUrl: - 'https://www.gravatar.com/avatar/4816142ef496f956a277bedf1a40607b?s=80&d=identicon', - blocked: false, - twoFactorEnabled: false, - }, - id: 524, - createdAt: '2020-08-21T21:33:27.631Z', - expiresAt: null, - usingLicense: false, - groupSso: false, - groupManagedAccount: false, - }, -]; diff --git a/spec/frontend/groups/members/utils_spec.js b/spec/frontend/groups/members/utils_spec.js index 68945174e9d..0912e66e3e8 100644 --- a/spec/frontend/groups/members/utils_spec.js +++ b/spec/frontend/groups/members/utils_spec.js @@ -1,53 +1,14 @@ -import { membersJsonString, membersParsed } from './mock_data'; -import { - parseDataAttributes, - memberRequestFormatter, - groupLinkRequestFormatter, -} from '~/groups/members/utils'; +import { groupMemberRequestFormatter } from '~/groups/members/utils'; describe('group member utils', () => { - describe('parseDataAttributes', () => { - let el; - - beforeEach(() => { - el = document.createElement('div'); - el.setAttribute('data-members', membersJsonString); - el.setAttribute('data-group-id', '234'); - el.setAttribute('data-can-manage-members', 'true'); - }); - - afterEach(() => { - el = null; - }); - - it('correctly parses the data attributes', () => { - expect(parseDataAttributes(el)).toEqual({ - members: membersParsed, - sourceId: 234, - canManageMembers: true, - }); - }); - }); - - describe('memberRequestFormatter', () => { + describe('groupMemberRequestFormatter', () => { it('returns expected format', () => { expect( - memberRequestFormatter({ + groupMemberRequestFormatter({ accessLevel: 50, expires_at: '2020-10-16', }), ).toEqual({ group_member: { access_level: 50, expires_at: '2020-10-16' } }); }); }); - - describe('groupLinkRequestFormatter', () => { - it('returns expected format', () => { - expect( - groupLinkRequestFormatter({ - accessLevel: 50, - expires_at: '2020-10-16', - }), - ).toEqual({ group_link: { group_access: 50, expires_at: '2020-10-16' } }); - }); - }); }); diff --git a/spec/frontend/groups/service/groups_service_spec.js b/spec/frontend/groups/service/groups_service_spec.js index 38a565eba01..e037a6df1e2 100644 --- a/spec/frontend/groups/service/groups_service_spec.js +++ b/spec/frontend/groups/service/groups_service_spec.js @@ -1,6 +1,6 @@ +import GroupsService from '~/groups/service/groups_service'; import axios from '~/lib/utils/axios_utils'; -import GroupsService from '~/groups/service/groups_service'; import { mockEndpoint, mockParentGroupItem } from '../mock_data'; describe('GroupsService', () => { |