Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/sidebar/components/labels')
-rw-r--r--spec/frontend/sidebar/components/labels/labels_select_vue/dropdown_contents_create_view_spec.js23
-rw-r--r--spec/frontend/sidebar/components/labels/labels_select_vue/store/actions_spec.js2
-rw-r--r--spec/frontend/sidebar/components/labels/labels_select_widget/dropdown_value_spec.js25
-rw-r--r--spec/frontend/sidebar/components/labels/labels_select_widget/embedded_labels_list_spec.js16
-rw-r--r--spec/frontend/sidebar/components/labels/labels_select_widget/mock_data.js10
5 files changed, 53 insertions, 23 deletions
diff --git a/spec/frontend/sidebar/components/labels/labels_select_vue/dropdown_contents_create_view_spec.js b/spec/frontend/sidebar/components/labels/labels_select_vue/dropdown_contents_create_view_spec.js
index cd391765dde..bcef99afc46 100644
--- a/spec/frontend/sidebar/components/labels/labels_select_vue/dropdown_contents_create_view_spec.js
+++ b/spec/frontend/sidebar/components/labels/labels_select_vue/dropdown_contents_create_view_spec.js
@@ -14,13 +14,14 @@ Vue.use(Vuex);
describe('DropdownContentsCreateView', () => {
let wrapper;
+ let store;
+
const colors = Object.keys(mockSuggestedColors).map((color) => ({
[color]: mockSuggestedColors[color],
}));
const createComponent = (initialState = mockConfig) => {
- const store = new Vuex.Store(labelSelectModule());
-
+ store = new Vuex.Store(labelSelectModule());
store.dispatch('setInitialState', initialState);
wrapper = shallowMountExtended(DropdownContentsCreateView, {
@@ -47,7 +48,7 @@ describe('DropdownContentsCreateView', () => {
it('returns `true` when `labelCreateInProgress` is true', async () => {
await findColorSelectorInput().vm.$emit('input', '#ff0000');
await findLabelTitleInput().vm.$emit('input', 'Foo');
- wrapper.vm.$store.dispatch('requestCreateLabel');
+ store.dispatch('requestCreateLabel');
await nextTick();
@@ -81,7 +82,6 @@ describe('DropdownContentsCreateView', () => {
describe('getColorName', () => {
it('returns color name from color object', () => {
expect(findAllLinks().at(0).attributes('title')).toBe(Object.values(colors[0]).pop());
- expect(wrapper.vm.getColorName(colors[0])).toBe(Object.values(colors[0]).pop());
});
});
@@ -97,20 +97,17 @@ describe('DropdownContentsCreateView', () => {
describe('handleCreateClick', () => {
it('calls action `createLabel` with object containing `labelTitle` & `selectedColor`', async () => {
- jest.spyOn(wrapper.vm, 'createLabel').mockImplementation();
-
+ jest.spyOn(store, 'dispatch').mockImplementation();
await findColorSelectorInput().vm.$emit('input', '#ff0000');
await findLabelTitleInput().vm.$emit('input', 'Foo');
findCreateClickButton().vm.$emit('click');
await nextTick();
- expect(wrapper.vm.createLabel).toHaveBeenCalledWith(
- expect.objectContaining({
- title: 'Foo',
- color: '#ff0000',
- }),
- );
+ expect(store.dispatch).toHaveBeenCalledWith('createLabel', {
+ title: 'Foo',
+ color: '#ff0000',
+ });
});
});
});
@@ -186,7 +183,7 @@ describe('DropdownContentsCreateView', () => {
});
it('shows gl-loading-icon within create button element when `labelCreateInProgress` is `true`', async () => {
- wrapper.vm.$store.dispatch('requestCreateLabel');
+ store.dispatch('requestCreateLabel');
await nextTick();
const loadingIconEl = wrapper.find('.dropdown-actions').findComponent(GlLoadingIcon);
diff --git a/spec/frontend/sidebar/components/labels/labels_select_vue/store/actions_spec.js b/spec/frontend/sidebar/components/labels/labels_select_vue/store/actions_spec.js
index c27afb75375..663bfbb48cc 100644
--- a/spec/frontend/sidebar/components/labels/labels_select_vue/store/actions_spec.js
+++ b/spec/frontend/sidebar/components/labels/labels_select_vue/store/actions_spec.js
@@ -254,7 +254,7 @@ describe('LabelsSelect Actions', () => {
describe('updateLabelsSetState', () => {
it('updates labels `set` state to match `selectedLabels`', () => {
- testAction(
+ return testAction(
actions.updateLabelsSetState,
{},
state,
diff --git a/spec/frontend/sidebar/components/labels/labels_select_widget/dropdown_value_spec.js b/spec/frontend/sidebar/components/labels/labels_select_widget/dropdown_value_spec.js
index d70b989b493..21068c2858d 100644
--- a/spec/frontend/sidebar/components/labels/labels_select_widget/dropdown_value_spec.js
+++ b/spec/frontend/sidebar/components/labels/labels_select_widget/dropdown_value_spec.js
@@ -3,14 +3,15 @@ import { shallowMount } from '@vue/test-utils';
import DropdownValue from '~/sidebar/components/labels/labels_select_widget/dropdown_value.vue';
-import { mockRegularLabel, mockScopedLabel } from './mock_data';
+import { mockRegularLabel, mockScopedLabel, mockLockedLabel } from './mock_data';
describe('DropdownValue', () => {
let wrapper;
const findAllLabels = () => wrapper.findAllComponents(GlLabel);
- const findRegularLabel = () => findAllLabels().at(1);
+ const findRegularLabel = () => findAllLabels().at(2);
const findScopedLabel = () => findAllLabels().at(0);
+ const findLockedLabel = () => findAllLabels().at(1);
const findWrapper = () => wrapper.find('[data-testid="value-wrapper"]');
const findEmptyPlaceholder = () => wrapper.find('[data-testid="empty-placeholder"]');
@@ -18,7 +19,7 @@ describe('DropdownValue', () => {
wrapper = shallowMount(DropdownValue, {
slots,
propsData: {
- selectedLabels: [mockRegularLabel, mockScopedLabel],
+ selectedLabels: [mockLockedLabel, mockRegularLabel, mockScopedLabel],
allowLabelRemove: true,
labelsFilterBasePath: '/gitlab-org/my-project/issues',
labelsFilterParam: 'label_name',
@@ -69,8 +70,8 @@ describe('DropdownValue', () => {
expect(findEmptyPlaceholder().exists()).toBe(false);
});
- it('renders a list of two labels', () => {
- expect(findAllLabels().length).toBe(2);
+ it('renders a list of three labels', () => {
+ expect(findAllLabels().length).toBe(3);
});
it('passes correct props to the regular label', () => {
@@ -96,5 +97,19 @@ describe('DropdownValue', () => {
wrapper.find('.sidebar-collapsed-icon').trigger('click');
expect(wrapper.emitted('onCollapsedValueClick')).toEqual([[]]);
});
+
+ it('does not show close button if label is locked', () => {
+ createComponent({
+ supportsLockOnMerge: true,
+ });
+ expect(findLockedLabel().props('showCloseButton')).toBe(false);
+ });
+
+ it('shows close button if label is not locked', () => {
+ createComponent({
+ supportsLockOnMerge: true,
+ });
+ expect(findRegularLabel().props('showCloseButton')).toBe(true);
+ });
});
});
diff --git a/spec/frontend/sidebar/components/labels/labels_select_widget/embedded_labels_list_spec.js b/spec/frontend/sidebar/components/labels/labels_select_widget/embedded_labels_list_spec.js
index 715dd4e034e..c516dddf0ce 100644
--- a/spec/frontend/sidebar/components/labels/labels_select_widget/embedded_labels_list_spec.js
+++ b/spec/frontend/sidebar/components/labels/labels_select_widget/embedded_labels_list_spec.js
@@ -1,7 +1,7 @@
import { GlLabel } from '@gitlab/ui';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import EmbeddedLabelsList from '~/sidebar/components/labels/labels_select_widget/embedded_labels_list.vue';
-import { mockRegularLabel, mockScopedLabel } from './mock_data';
+import { mockRegularLabel, mockScopedLabel, mockLockedLabel } from './mock_data';
describe('EmbeddedLabelsList', () => {
let wrapper;
@@ -13,12 +13,13 @@ describe('EmbeddedLabelsList', () => {
.at(0);
const findRegularLabel = () => findLabelByTitle(mockRegularLabel.title);
const findScopedLabel = () => findLabelByTitle(mockScopedLabel.title);
+ const findLockedLabel = () => findLabelByTitle(mockLockedLabel.title);
const createComponent = (props = {}, slots = {}) => {
wrapper = shallowMountExtended(EmbeddedLabelsList, {
slots,
propsData: {
- selectedLabels: [mockRegularLabel, mockScopedLabel],
+ selectedLabels: [mockRegularLabel, mockScopedLabel, mockLockedLabel],
allowLabelRemove: true,
labelsFilterBasePath: '/gitlab-org/my-project/issues',
labelsFilterParam: 'label_name',
@@ -47,8 +48,8 @@ describe('EmbeddedLabelsList', () => {
createComponent();
});
- it('renders a list of two labels', () => {
- expect(findAllLabels()).toHaveLength(2);
+ it('renders a list of three labels', () => {
+ expect(findAllLabels()).toHaveLength(3);
});
it('passes correct props to the regular label', () => {
@@ -69,5 +70,12 @@ describe('EmbeddedLabelsList', () => {
findRegularLabel().vm.$emit('close');
expect(wrapper.emitted('onLabelRemove')).toStrictEqual([[mockRegularLabel.id]]);
});
+
+ it('does not show close button if label is locked', () => {
+ createComponent({
+ supportsLockOnMerge: true,
+ });
+ expect(findLockedLabel().props('showCloseButton')).toBe(false);
+ });
});
});
diff --git a/spec/frontend/sidebar/components/labels/labels_select_widget/mock_data.js b/spec/frontend/sidebar/components/labels/labels_select_widget/mock_data.js
index b0b473625bb..5039f00fe4b 100644
--- a/spec/frontend/sidebar/components/labels/labels_select_widget/mock_data.js
+++ b/spec/frontend/sidebar/components/labels/labels_select_widget/mock_data.js
@@ -14,6 +14,16 @@ export const mockScopedLabel = {
textColor: '#FFFFFF',
};
+export const mockLockedLabel = {
+ id: 30,
+ title: 'Bar Label',
+ description: 'Bar',
+ color: '#DADA55',
+ textColor: '#FFFFFF',
+ lockOnMerge: true,
+ lock_on_merge: true,
+};
+
export const mockLabels = [
mockRegularLabel,
mockScopedLabel,