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')
-rw-r--r--spec/frontend/vue_merge_request_widget/components/checks/draft_spec.js2
-rw-r--r--spec/frontend/vue_merge_request_widget/components/merge_checks_spec.js37
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/base_token_spec.js25
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js118
4 files changed, 58 insertions, 124 deletions
diff --git a/spec/frontend/vue_merge_request_widget/components/checks/draft_spec.js b/spec/frontend/vue_merge_request_widget/components/checks/draft_spec.js
index cc605c8c83d..a7695431a02 100644
--- a/spec/frontend/vue_merge_request_widget/components/checks/draft_spec.js
+++ b/spec/frontend/vue_merge_request_widget/components/checks/draft_spec.js
@@ -16,7 +16,7 @@ import {
DRAFT_CHECK_READY,
DRAFT_CHECK_ERROR,
} from '~/vue_merge_request_widget/components/checks/i18n';
-import { FAILURE_REASONS } from '~/vue_merge_request_widget/components/checks/message.vue';
+import { FAILURE_REASONS } from '~/vue_merge_request_widget/components/checks/constants';
import draftQuery from '~/vue_merge_request_widget/queries/states/draft.query.graphql';
import getStateQuery from '~/vue_merge_request_widget/queries/get_state.query.graphql';
diff --git a/spec/frontend/vue_merge_request_widget/components/merge_checks_spec.js b/spec/frontend/vue_merge_request_widget/components/merge_checks_spec.js
index 48c01e3efad..054e90640c5 100644
--- a/spec/frontend/vue_merge_request_widget/components/merge_checks_spec.js
+++ b/spec/frontend/vue_merge_request_widget/components/merge_checks_spec.js
@@ -136,19 +136,19 @@ describe('Merge request merge checks component', () => {
});
it.each`
- identifier
- ${'conflict'}
- ${'discussions_not_resolved'}
- ${'need_rebase'}
- ${'default'}
- `('renders $identifier merge check', async ({ identifier }) => {
+ identifier | componentName
+ ${'conflict'} | ${'conflict'}
+ ${'discussions_not_resolved'} | ${'discussions_not_resolved'}
+ ${'need_rebase'} | ${'need_rebase'}
+ ${'policies_denied'} | ${'default'}
+ `('renders $identifier merge check', async ({ identifier, componentName }) => {
shallowMountComponent({ mergeabilityChecks: [{ status: 'failed', identifier }] });
wrapper.findComponent(StateContainer).vm.$emit('toggle');
await waitForPromises();
- const { default: component } = await COMPONENTS[identifier]();
+ const { default: component } = await COMPONENTS[componentName]();
expect(wrapper.findComponent(component).exists()).toBe(true);
});
@@ -166,9 +166,9 @@ describe('Merge request merge checks component', () => {
it('sorts merge checks', async () => {
mountComponent({
mergeabilityChecks: [
- { identifier: 'discussions', status: 'SUCCESS' },
- { identifier: 'discussions', status: 'INACTIVE' },
- { identifier: 'rebase', status: 'FAILED' },
+ { identifier: 'discussions_not_resolved', status: 'SUCCESS' },
+ { identifier: 'status_checks_must_pass', status: 'INACTIVE' },
+ { identifier: 'need_rebase', status: 'FAILED' },
],
});
@@ -184,4 +184,21 @@ describe('Merge request merge checks component', () => {
expect.objectContaining({ status: 'SUCCESS' }),
);
});
+
+ it('does not render check component if no message exists', async () => {
+ mountComponent({
+ mergeabilityChecks: [
+ { identifier: 'discussions_not_resolved', status: 'SUCCESS' },
+ { identifier: 'fakemessage', status: 'FAILED' },
+ ],
+ });
+
+ await waitForPromises();
+
+ await wrapper.findByTestId('widget-toggle').trigger('click');
+
+ const mergeChecks = wrapper.findAllByTestId('merge-check');
+
+ expect(mergeChecks.length).toBe(1);
+ });
});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/base_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/base_token_spec.js
index 1d6834a5604..3c621b1ad4a 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/base_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/base_token_spec.js
@@ -122,6 +122,7 @@ describe('BaseToken', () => {
const findGlFilteredSearchToken = () => wrapper.findComponent(GlFilteredSearchToken);
const findMockSuggestionList = () => wrapper.findByTestId(mockSuggestionListTestId);
+
const getMockSuggestionListSuggestions = () =>
JSON.parse(findMockSuggestionList().attributes('data-suggestions'));
@@ -410,30 +411,6 @@ describe('BaseToken', () => {
expect(setTokenValueToRecentlyUsed).not.toHaveBeenCalled();
});
-
- it('emits token-selected event when groupMultiSelectTokens: true', () => {
- const config = { ...mockConfig, multiSelect: true };
- wrapper = createComponent({
- props: { suggestions: mockLabels, config, value: { operator: '||' } },
- groupMultiSelectTokens: true,
- });
-
- findGlFilteredSearchToken().vm.$emit('select', mockTokenValue.title);
-
- expect(wrapper.emitted('token-selected')).toEqual([[mockTokenValue.title]]);
- });
-
- it('does not emit token-selected event when groupMultiSelectTokens: false', () => {
- const config = { ...mockConfig, multiSelect: true };
- wrapper = createComponent({
- props: { suggestions: mockLabels, config, value: { operator: '||' } },
- groupMultiSelectTokens: false,
- });
-
- findGlFilteredSearchToken().vm.$emit('select', mockTokenValue.title);
-
- expect(wrapper.emitted('token-selected')).toBeUndefined();
- });
});
});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js
index decf843091e..581adef7e32 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js
@@ -1,4 +1,5 @@
import {
+ GlFilteredSearchToken,
GlFilteredSearchTokenSegment,
GlFilteredSearchSuggestion,
GlDropdownDivider,
@@ -310,6 +311,34 @@ describe('UserToken', () => {
expect(mockInput).toHaveBeenLastCalledWith([{ data: 'mockData', operator: '=' }]);
});
+ describe('when loading', () => {
+ beforeEach(() => {
+ wrapper = createComponent({
+ active: true,
+ config: {
+ ...mockAuthorToken,
+ preloadedUsers: mockPreloadedUsers,
+ defaultUsers: [],
+ },
+ stubs: { Portal: true },
+ });
+ });
+
+ it('shows current user', () => {
+ const firstSuggestion = wrapper.findComponent(GlFilteredSearchSuggestion).text();
+ expect(firstSuggestion).toContain('Administrator');
+ expect(firstSuggestion).toContain('@root');
+ });
+
+ it('does not show non-matching user while searching', async () => {
+ wrapper.findComponent(GlFilteredSearchToken).vm.$emit('input', { data: 'foo' });
+
+ await nextTick();
+
+ expect(wrapper.findComponent(GlFilteredSearchSuggestion).exists()).toBe(false);
+ });
+ });
+
describe('multiSelect', () => {
it('renders check icons in suggestions when multiSelect is true', async () => {
wrapper = createComponent({
@@ -322,15 +351,11 @@ describe('UserToken', () => {
stubs: { Portal: true },
groupMultiSelectTokens: true,
});
-
await activateSuggestionsList();
-
const suggestions = wrapper.findAllComponents(GlFilteredSearchSuggestion);
-
expect(findIconAtSuggestion(0).props('name')).toBe('check');
expect(findIconAtSuggestion(1).props('name')).toBe('check');
expect(findIconAtSuggestion(2).exists()).toBe(false);
-
// test for left padding on unchecked items (so alignment is correct)
expect(suggestions.at(2).find('.gl-pl-6').exists()).toBe(true);
});
@@ -344,101 +369,16 @@ describe('UserToken', () => {
config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers },
groupMultiSelectTokens: true,
});
-
await nextTick();
const tokenSegments = wrapper.findAllComponents(GlFilteredSearchTokenSegment);
-
expect(tokenSegments).toHaveLength(3); // Author, =, "Administrator"
-
const tokenValue = tokenSegments.at(2);
-
const [user1, user2] = mockUsers;
-
expect(tokenValue.findAllComponents(GlAvatar).at(1).props('src')).toBe(
mockUsers[1].avatar_url,
);
expect(tokenValue.text()).toBe(`${user1.name},${user2.name}`);
});
-
- it('adds new user to multi-select-values', () => {
- wrapper = createComponent({
- value: { data: [mockUsers[0].username], operator: '||' },
- data: {
- users: mockUsers,
- },
- config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers },
- active: true,
- groupMultiSelectTokens: true,
- });
-
- findBaseToken().vm.$emit('token-selected', mockUsers[1].username);
-
- expect(findBaseToken().props().multiSelectValues).toEqual([
- mockUsers[0].username,
- mockUsers[1].username,
- ]);
- });
-
- it('removes existing user from array', () => {
- const initialUsers = [mockUsers[0].username, mockUsers[1].username];
- wrapper = createComponent({
- value: { data: initialUsers, operator: '||' },
- data: {
- users: mockUsers,
- },
- config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers },
- active: true,
- groupMultiSelectTokens: true,
- });
-
- findBaseToken().vm.$emit('token-selected', mockUsers[0].username);
-
- expect(findBaseToken().props().multiSelectValues).toEqual([mockUsers[1].username]);
- });
-
- it('clears input field after token selected', () => {
- wrapper = createComponent({
- value: { data: [mockUsers[0].username, mockUsers[1].username], operator: '||' },
- data: {
- users: mockUsers,
- },
- config: { ...mockAuthorToken, multiSelect: true, initialUsers: mockUsers },
- active: true,
- groupMultiSelectTokens: true,
- });
-
- findBaseToken().vm.$emit('token-selected', 'test');
-
- expect(wrapper.emitted('input')).toEqual([[{ operator: '||', data: '' }]]);
- });
- });
-
- describe('when loading', () => {
- beforeEach(() => {
- wrapper = createComponent({
- active: true,
- config: {
- ...mockAuthorToken,
- preloadedUsers: mockPreloadedUsers,
- defaultUsers: [],
- },
- stubs: { Portal: true },
- });
- });
-
- it('shows current user', () => {
- const firstSuggestion = wrapper.findComponent(GlFilteredSearchSuggestion).text();
- expect(firstSuggestion).toContain('Administrator');
- expect(firstSuggestion).toContain('@root');
- });
-
- it('does not show current user while searching', async () => {
- wrapper.findComponent(BaseToken).vm.handleInput({ data: 'foo' });
-
- await nextTick();
-
- expect(wrapper.findComponent(GlFilteredSearchSuggestion).exists()).toBe(false);
- });
});
});
});