summaryrefslogtreecommitdiff
path: root/spec/frontend/boards/components/sidebar
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 13:37:47 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 13:37:47 +0000
commitaee0a117a889461ce8ced6fcf73207fe017f1d99 (patch)
tree891d9ef189227a8445d83f35c1b0fc99573f4380 /spec/frontend/boards/components/sidebar
parent8d46af3258650d305f53b819eabf7ab18d22f59e (diff)
downloadgitlab-ce-aee0a117a889461ce8ced6fcf73207fe017f1d99.tar.gz
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'spec/frontend/boards/components/sidebar')
-rw-r--r--spec/frontend/boards/components/sidebar/board_sidebar_labels_select_spec.js168
-rw-r--r--spec/frontend/boards/components/sidebar/board_sidebar_subscription_spec.js163
2 files changed, 0 insertions, 331 deletions
diff --git a/spec/frontend/boards/components/sidebar/board_sidebar_labels_select_spec.js b/spec/frontend/boards/components/sidebar/board_sidebar_labels_select_spec.js
deleted file mode 100644
index fb9d823107e..00000000000
--- a/spec/frontend/boards/components/sidebar/board_sidebar_labels_select_spec.js
+++ /dev/null
@@ -1,168 +0,0 @@
-import { GlLabel } from '@gitlab/ui';
-import { shallowMount } from '@vue/test-utils';
-import { TEST_HOST } from 'helpers/test_constants';
-import {
- labels as TEST_LABELS,
- mockIssue as TEST_ISSUE,
- mockIssueFullPath as TEST_ISSUE_FULLPATH,
-} from 'jest/boards/mock_data';
-import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue';
-import BoardSidebarLabelsSelect from '~/boards/components/sidebar/board_sidebar_labels_select.vue';
-import { createStore } from '~/boards/stores';
-import { getIdFromGraphQLId } from '~/graphql_shared/utils';
-
-const TEST_LABELS_PAYLOAD = TEST_LABELS.map((label) => ({ ...label, set: true }));
-const TEST_LABELS_TITLES = TEST_LABELS.map((label) => label.title);
-
-describe('~/boards/components/sidebar/board_sidebar_labels_select.vue', () => {
- let wrapper;
- let store;
-
- afterEach(() => {
- wrapper.destroy();
- store = null;
- wrapper = null;
- });
-
- const createWrapper = ({ labels = [], providedValues = {} } = {}) => {
- store = createStore();
- store.state.boardItems = { [TEST_ISSUE.id]: { ...TEST_ISSUE, labels } };
- store.state.activeId = TEST_ISSUE.id;
-
- wrapper = shallowMount(BoardSidebarLabelsSelect, {
- store,
- provide: {
- canUpdate: true,
- labelsManagePath: TEST_HOST,
- labelsFilterBasePath: TEST_HOST,
- ...providedValues,
- },
- stubs: {
- BoardEditableItem,
- LabelsSelect: true,
- },
- });
- };
-
- const findLabelsSelect = () => wrapper.find({ ref: 'labelsSelect' });
- const findLabelsTitles = () =>
- wrapper.findAll(GlLabel).wrappers.map((item) => item.props('title'));
- const findCollapsed = () => wrapper.find('[data-testid="collapsed-content"]');
-
- describe('when labelsFetchPath is provided', () => {
- it('uses injected labels fetch path', () => {
- createWrapper({ providedValues: { labelsFetchPath: 'foobar' } });
-
- expect(findLabelsSelect().props('labelsFetchPath')).toEqual('foobar');
- });
- });
-
- it('uses the default project label endpoint', () => {
- createWrapper();
-
- expect(findLabelsSelect().props('labelsFetchPath')).toEqual(
- `/${TEST_ISSUE_FULLPATH}/-/labels?include_ancestor_groups=true`,
- );
- });
-
- it('renders "None" when no labels are selected', () => {
- createWrapper();
-
- expect(findCollapsed().text()).toBe('None');
- });
-
- it('renders labels when set', () => {
- createWrapper({ labels: TEST_LABELS });
-
- expect(findLabelsTitles()).toEqual(TEST_LABELS_TITLES);
- });
-
- describe('when labels are submitted', () => {
- beforeEach(async () => {
- createWrapper();
-
- jest.spyOn(wrapper.vm, 'setActiveBoardItemLabels').mockImplementation(() => TEST_LABELS);
- findLabelsSelect().vm.$emit('updateSelectedLabels', TEST_LABELS_PAYLOAD);
- store.state.boardItems[TEST_ISSUE.id].labels = TEST_LABELS;
- await wrapper.vm.$nextTick();
- });
-
- it('collapses sidebar and renders labels', () => {
- expect(findCollapsed().isVisible()).toBe(true);
- expect(findLabelsTitles()).toEqual(TEST_LABELS_TITLES);
- });
-
- it('commits change to the server', () => {
- expect(wrapper.vm.setActiveBoardItemLabels).toHaveBeenCalledWith({
- addLabelIds: TEST_LABELS.map((label) => label.id),
- projectPath: TEST_ISSUE_FULLPATH,
- removeLabelIds: [],
- iid: null,
- });
- });
- });
-
- describe('when labels are updated over existing labels', () => {
- const testLabelsPayload = [
- { id: 5, set: true },
- { id: 6, set: false },
- { id: 7, set: true },
- ];
- const expectedLabels = [{ id: 5 }, { id: 7 }];
-
- beforeEach(async () => {
- createWrapper({ labels: TEST_LABELS });
-
- jest.spyOn(wrapper.vm, 'setActiveBoardItemLabels').mockImplementation(() => expectedLabels);
- findLabelsSelect().vm.$emit('updateSelectedLabels', testLabelsPayload);
- await wrapper.vm.$nextTick();
- });
-
- it('commits change to the server', () => {
- expect(wrapper.vm.setActiveBoardItemLabels).toHaveBeenCalledWith({
- addLabelIds: [5, 7],
- removeLabelIds: [6],
- projectPath: TEST_ISSUE_FULLPATH,
- iid: null,
- });
- });
- });
-
- describe('when removing individual labels', () => {
- const testLabel = TEST_LABELS[0];
-
- beforeEach(async () => {
- createWrapper({ labels: [testLabel] });
-
- jest.spyOn(wrapper.vm, 'setActiveBoardItemLabels').mockImplementation(() => {});
- });
-
- it('commits change to the server', () => {
- wrapper.find(GlLabel).vm.$emit('close', testLabel);
-
- expect(wrapper.vm.setActiveBoardItemLabels).toHaveBeenCalledWith({
- removeLabelIds: [getIdFromGraphQLId(testLabel.id)],
- projectPath: TEST_ISSUE_FULLPATH,
- });
- });
- });
-
- describe('when the mutation fails', () => {
- beforeEach(async () => {
- createWrapper({ labels: TEST_LABELS });
-
- jest.spyOn(wrapper.vm, 'setActiveBoardItemLabels').mockImplementation(() => {
- throw new Error(['failed mutation']);
- });
- jest.spyOn(wrapper.vm, 'setError').mockImplementation(() => {});
- findLabelsSelect().vm.$emit('updateSelectedLabels', [{ id: '?' }]);
- await wrapper.vm.$nextTick();
- });
-
- it('collapses sidebar and renders former issue weight', () => {
- expect(findCollapsed().isVisible()).toBe(true);
- expect(findLabelsTitles()).toEqual(TEST_LABELS_TITLES);
- expect(wrapper.vm.setError).toHaveBeenCalled();
- });
- });
-});
diff --git a/spec/frontend/boards/components/sidebar/board_sidebar_subscription_spec.js b/spec/frontend/boards/components/sidebar/board_sidebar_subscription_spec.js
deleted file mode 100644
index 6e1b528babc..00000000000
--- a/spec/frontend/boards/components/sidebar/board_sidebar_subscription_spec.js
+++ /dev/null
@@ -1,163 +0,0 @@
-import { GlToggle, GlLoadingIcon } from '@gitlab/ui';
-import { mount } from '@vue/test-utils';
-import Vue from 'vue';
-import Vuex from 'vuex';
-import BoardSidebarSubscription from '~/boards/components/sidebar/board_sidebar_subscription.vue';
-import { createStore } from '~/boards/stores';
-import * as types from '~/boards/stores/mutation_types';
-import { mockActiveIssue } from '../../mock_data';
-
-Vue.use(Vuex);
-
-describe('~/boards/components/sidebar/board_sidebar_subscription_spec.vue', () => {
- let wrapper;
- let store;
-
- const findNotificationHeader = () => wrapper.find("[data-testid='notification-header-text']");
- const findToggle = () => wrapper.findComponent(GlToggle);
- const findGlLoadingIcon = () => wrapper.findComponent(GlLoadingIcon);
-
- const createComponent = (activeBoardItem = { ...mockActiveIssue }) => {
- store = createStore();
- store.state.boardItems = { [activeBoardItem.id]: activeBoardItem };
- store.state.activeId = activeBoardItem.id;
-
- wrapper = mount(BoardSidebarSubscription, {
- store,
- provide: {
- emailsDisabled: false,
- },
- });
- };
-
- afterEach(() => {
- wrapper.destroy();
- store = null;
- jest.clearAllMocks();
- });
-
- describe('Board sidebar subscription component template', () => {
- it('displays "notifications" heading', () => {
- createComponent();
-
- expect(findNotificationHeader().text()).toBe('Notifications');
- });
-
- it('renders toggle with label', () => {
- createComponent();
-
- expect(findToggle().props('label')).toBe(BoardSidebarSubscription.i18n.header.title);
- });
-
- it('renders toggle as "off" when currently not subscribed', () => {
- createComponent();
-
- expect(findToggle().exists()).toBe(true);
- expect(findToggle().props('value')).toBe(false);
- });
-
- it('renders toggle as "on" when currently subscribed', () => {
- createComponent({
- ...mockActiveIssue,
- subscribed: true,
- });
-
- expect(findToggle().exists()).toBe(true);
- expect(findToggle().props('value')).toBe(true);
- });
-
- describe('when notification emails have been disabled', () => {
- beforeEach(() => {
- createComponent({
- ...mockActiveIssue,
- emailsDisabled: true,
- });
- });
-
- it('displays a message that notification have been disabled', () => {
- expect(findNotificationHeader().text()).toBe(
- 'Notifications have been disabled by the project or group owner',
- );
- });
-
- it('does not render the toggle button', () => {
- expect(findToggle().exists()).toBe(false);
- });
- });
- });
-
- describe('Board sidebar subscription component `behavior`', () => {
- const mockSetActiveIssueSubscribed = (subscribedState) => {
- jest.spyOn(wrapper.vm, 'setActiveItemSubscribed').mockImplementation(async () => {
- store.commit(types.UPDATE_BOARD_ITEM_BY_ID, {
- itemId: mockActiveIssue.id,
- prop: 'subscribed',
- value: subscribedState,
- });
- });
- };
-
- it('subscribing to notification', async () => {
- createComponent();
- mockSetActiveIssueSubscribed(true);
-
- expect(findGlLoadingIcon().exists()).toBe(false);
-
- findToggle().vm.$emit('change');
-
- await wrapper.vm.$nextTick();
-
- expect(findGlLoadingIcon().exists()).toBe(true);
- expect(wrapper.vm.setActiveItemSubscribed).toHaveBeenCalledWith({
- subscribed: true,
- projectPath: 'gitlab-org/test-subgroup/gitlab-test',
- });
-
- await wrapper.vm.$nextTick();
-
- expect(findGlLoadingIcon().exists()).toBe(false);
- expect(findToggle().props('value')).toBe(true);
- });
-
- it('unsubscribing from notification', async () => {
- createComponent({
- ...mockActiveIssue,
- subscribed: true,
- });
- mockSetActiveIssueSubscribed(false);
-
- expect(findGlLoadingIcon().exists()).toBe(false);
-
- findToggle().vm.$emit('change');
-
- await wrapper.vm.$nextTick();
-
- expect(wrapper.vm.setActiveItemSubscribed).toHaveBeenCalledWith({
- subscribed: false,
- projectPath: 'gitlab-org/test-subgroup/gitlab-test',
- });
- expect(findGlLoadingIcon().exists()).toBe(true);
-
- await wrapper.vm.$nextTick();
-
- expect(findGlLoadingIcon().exists()).toBe(false);
- expect(findToggle().props('value')).toBe(false);
- });
-
- it('flashes an error message when setting the subscribed state fails', async () => {
- createComponent();
- jest.spyOn(wrapper.vm, 'setActiveItemSubscribed').mockImplementation(async () => {
- throw new Error();
- });
- jest.spyOn(wrapper.vm, 'setError').mockImplementation(() => {});
-
- findToggle().vm.$emit('change');
-
- await wrapper.vm.$nextTick();
- expect(wrapper.vm.setError).toHaveBeenCalled();
- expect(wrapper.vm.setError.mock.calls[0][0].message).toBe(
- wrapper.vm.$options.i18n.updateSubscribedErrorMessage,
- );
- });
- });
-});