summaryrefslogtreecommitdiff
path: root/spec/frontend/diffs
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-03-16 18:18:33 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-03-16 18:18:33 +0000
commitf64a639bcfa1fc2bc89ca7db268f594306edfd7c (patch)
treea2c3c2ebcc3b45e596949db485d6ed18ffaacfa1 /spec/frontend/diffs
parentbfbc3e0d6583ea1a91f627528bedc3d65ba4b10f (diff)
downloadgitlab-ce-f64a639bcfa1fc2bc89ca7db268f594306edfd7c.tar.gz
Add latest changes from gitlab-org/gitlab@13-10-stable-eev13.10.0-rc40
Diffstat (limited to 'spec/frontend/diffs')
-rw-r--r--spec/frontend/diffs/components/app_spec.js22
-rw-r--r--spec/frontend/diffs/components/inline_diff_table_row_spec.js13
-rw-r--r--spec/frontend/diffs/components/settings_dropdown_spec.js160
-rw-r--r--spec/frontend/diffs/mock_data/diff_with_commit.js2
-rw-r--r--spec/frontend/diffs/store/utils_spec.js6
-rw-r--r--spec/frontend/diffs/utils/file_reviews_spec.js10
-rw-r--r--spec/frontend/diffs/utils/preferences_spec.js35
7 files changed, 98 insertions, 150 deletions
diff --git a/spec/frontend/diffs/components/app_spec.js b/spec/frontend/diffs/components/app_spec.js
index d2b5338a0cc..34547238c23 100644
--- a/spec/frontend/diffs/components/app_spec.js
+++ b/spec/frontend/diffs/components/app_spec.js
@@ -14,9 +14,6 @@ import HiddenFilesWarning from '~/diffs/components/hidden_files_warning.vue';
import NoChanges from '~/diffs/components/no_changes.vue';
import TreeList from '~/diffs/components/tree_list.vue';
-import { EVT_VIEW_FILE_BY_FILE } from '~/diffs/constants';
-
-import eventHub from '~/diffs/event_hub';
import axios from '~/lib/utils/axios_utils';
import * as urlUtils from '~/lib/utils/url_utility';
import createDiffsStore from '../create_diffs_store';
@@ -699,24 +696,5 @@ describe('diffs/components/app', () => {
},
);
});
-
- describe('control via event stream', () => {
- it.each`
- setting
- ${true}
- ${false}
- `(
- 'triggers the action with the new fileByFile setting - $setting - when the event with that setting is received',
- async ({ setting }) => {
- createComponent();
- await nextTick();
-
- eventHub.$emit(EVT_VIEW_FILE_BY_FILE, { setting });
- await nextTick();
-
- expect(store.state.diffs.viewDiffsFileByFile).toBe(setting);
- },
- );
- });
});
});
diff --git a/spec/frontend/diffs/components/inline_diff_table_row_spec.js b/spec/frontend/diffs/components/inline_diff_table_row_spec.js
index 7e6f75ad6f8..28b3055b58c 100644
--- a/spec/frontend/diffs/components/inline_diff_table_row_spec.js
+++ b/spec/frontend/diffs/components/inline_diff_table_row_spec.js
@@ -215,14 +215,14 @@ describe('InlineDiffTableRow', () => {
const TEST_LINE_NUMBER = 1;
describe.each`
- lineProps | findLineNumber | expectedHref | expectedClickArg
- ${{ line_code: TEST_LINE_CODE, old_line: TEST_LINE_NUMBER }} | ${findLineNumberOld} | ${`#${TEST_LINE_CODE}`} | ${TEST_LINE_CODE}
- ${{ line_code: undefined, old_line: TEST_LINE_NUMBER }} | ${findLineNumberOld} | ${'#'} | ${undefined}
- ${{ line_code: undefined, left: { line_code: TEST_LINE_CODE }, old_line: TEST_LINE_NUMBER }} | ${findLineNumberOld} | ${'#'} | ${TEST_LINE_CODE}
- ${{ line_code: undefined, right: { line_code: TEST_LINE_CODE }, new_line: TEST_LINE_NUMBER }} | ${findLineNumberNew} | ${'#'} | ${TEST_LINE_CODE}
+ lineProps | findLineNumber | expectedHref | expectedClickArg | expectedQaSelector
+ ${{ line_code: TEST_LINE_CODE, old_line: TEST_LINE_NUMBER }} | ${findLineNumberOld} | ${`#${TEST_LINE_CODE}`} | ${TEST_LINE_CODE} | ${undefined}
+ ${{ line_code: undefined, old_line: TEST_LINE_NUMBER }} | ${findLineNumberOld} | ${'#'} | ${undefined} | ${undefined}
+ ${{ line_code: undefined, left: { line_code: TEST_LINE_CODE }, old_line: TEST_LINE_NUMBER }} | ${findLineNumberOld} | ${'#'} | ${TEST_LINE_CODE} | ${undefined}
+ ${{ line_code: undefined, right: { line_code: TEST_LINE_CODE }, new_line: TEST_LINE_NUMBER }} | ${findLineNumberNew} | ${'#'} | ${TEST_LINE_CODE} | ${'new_diff_line_link'}
`(
'with line ($lineProps)',
- ({ lineProps, findLineNumber, expectedHref, expectedClickArg }) => {
+ ({ lineProps, findLineNumber, expectedHref, expectedClickArg, expectedQaSelector }) => {
beforeEach(() => {
jest.spyOn(store, 'dispatch').mockImplementation();
createComponent({
@@ -235,6 +235,7 @@ describe('InlineDiffTableRow', () => {
expect(findLineNumber().attributes()).toEqual({
href: expectedHref,
'data-linenumber': TEST_LINE_NUMBER.toString(),
+ 'data-qa-selector': expectedQaSelector,
});
});
diff --git a/spec/frontend/diffs/components/settings_dropdown_spec.js b/spec/frontend/diffs/components/settings_dropdown_spec.js
index 99fa83b64f1..feac88cb802 100644
--- a/spec/frontend/diffs/components/settings_dropdown_spec.js
+++ b/spec/frontend/diffs/components/settings_dropdown_spec.js
@@ -1,82 +1,66 @@
-import { mount, createLocalVue } from '@vue/test-utils';
-import Vuex from 'vuex';
+import { mount } from '@vue/test-utils';
+
+import { extendedWrapper } from 'helpers/vue_test_utils_helper';
+
import SettingsDropdown from '~/diffs/components/settings_dropdown.vue';
-import {
- EVT_VIEW_FILE_BY_FILE,
- PARALLEL_DIFF_VIEW_TYPE,
- INLINE_DIFF_VIEW_TYPE,
-} from '~/diffs/constants';
+import { PARALLEL_DIFF_VIEW_TYPE, INLINE_DIFF_VIEW_TYPE } from '~/diffs/constants';
import eventHub from '~/diffs/event_hub';
-import diffModule from '~/diffs/store/modules';
-const localVue = createLocalVue();
-localVue.use(Vuex);
+import createDiffsStore from '../create_diffs_store';
describe('Diff settings dropdown component', () => {
let wrapper;
let vm;
- let actions;
+ let store;
function createComponent(extendStore = () => {}) {
- const store = new Vuex.Store({
- modules: {
- diffs: {
- namespaced: true,
- actions,
- state: diffModule().state,
- getters: diffModule().getters,
- },
- },
- });
+ store = createDiffsStore();
extendStore(store);
- wrapper = mount(SettingsDropdown, {
- localVue,
- store,
- });
+ wrapper = extendedWrapper(
+ mount(SettingsDropdown, {
+ store,
+ }),
+ );
vm = wrapper.vm;
}
function getFileByFileCheckbox(vueWrapper) {
- return vueWrapper.find('[data-testid="file-by-file"]');
+ return vueWrapper.findByTestId('file-by-file');
+ }
+
+ function setup({ storeUpdater } = {}) {
+ createComponent(storeUpdater);
+ jest.spyOn(store, 'dispatch').mockImplementation(() => {});
}
beforeEach(() => {
- actions = {
- setInlineDiffViewType: jest.fn(),
- setParallelDiffViewType: jest.fn(),
- setRenderTreeList: jest.fn(),
- setShowWhitespace: jest.fn(),
- };
+ setup();
});
afterEach(() => {
+ store.dispatch.mockRestore();
wrapper.destroy();
});
describe('tree view buttons', () => {
it('list view button dispatches setRenderTreeList with false', () => {
- createComponent();
-
wrapper.find('.js-list-view').trigger('click');
- expect(actions.setRenderTreeList).toHaveBeenCalledWith(expect.anything(), false);
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/setRenderTreeList', false);
});
it('tree view button dispatches setRenderTreeList with true', () => {
- createComponent();
-
wrapper.find('.js-tree-view').trigger('click');
- expect(actions.setRenderTreeList).toHaveBeenCalledWith(expect.anything(), true);
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/setRenderTreeList', true);
});
it('sets list button as selected when renderTreeList is false', () => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- renderTreeList: false,
- });
+ setup({
+ storeUpdater: (origStore) =>
+ Object.assign(origStore.state.diffs, { renderTreeList: false }),
});
expect(wrapper.find('.js-list-view').classes('selected')).toBe(true);
@@ -84,10 +68,8 @@ describe('Diff settings dropdown component', () => {
});
it('sets tree button as selected when renderTreeList is true', () => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- renderTreeList: true,
- });
+ setup({
+ storeUpdater: (origStore) => Object.assign(origStore.state.diffs, { renderTreeList: true }),
});
expect(wrapper.find('.js-list-view').classes('selected')).toBe(false);
@@ -97,10 +79,9 @@ describe('Diff settings dropdown component', () => {
describe('compare changes', () => {
it('sets inline button as selected', () => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- diffViewType: INLINE_DIFF_VIEW_TYPE,
- });
+ setup({
+ storeUpdater: (origStore) =>
+ Object.assign(origStore.state.diffs, { diffViewType: INLINE_DIFF_VIEW_TYPE }),
});
expect(wrapper.find('.js-inline-diff-button').classes('selected')).toBe(true);
@@ -108,10 +89,9 @@ describe('Diff settings dropdown component', () => {
});
it('sets parallel button as selected', () => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- diffViewType: PARALLEL_DIFF_VIEW_TYPE,
- });
+ setup({
+ storeUpdater: (origStore) =>
+ Object.assign(origStore.state.diffs, { diffViewType: PARALLEL_DIFF_VIEW_TYPE }),
});
expect(wrapper.find('.js-inline-diff-button').classes('selected')).toBe(false);
@@ -119,53 +99,49 @@ describe('Diff settings dropdown component', () => {
});
it('calls setInlineDiffViewType when clicking inline button', () => {
- createComponent();
-
wrapper.find('.js-inline-diff-button').trigger('click');
- expect(actions.setInlineDiffViewType).toHaveBeenCalled();
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/setInlineDiffViewType', expect.anything());
});
it('calls setParallelDiffViewType when clicking parallel button', () => {
- createComponent();
-
wrapper.find('.js-parallel-diff-button').trigger('click');
- expect(actions.setParallelDiffViewType).toHaveBeenCalled();
+ expect(store.dispatch).toHaveBeenCalledWith(
+ 'diffs/setParallelDiffViewType',
+ expect.anything(),
+ );
});
});
describe('whitespace toggle', () => {
it('does not set as checked when showWhitespace is false', () => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- showWhitespace: false,
- });
+ setup({
+ storeUpdater: (origStore) =>
+ Object.assign(origStore.state.diffs, { showWhitespace: false }),
});
- expect(wrapper.find('#show-whitespace').element.checked).toBe(false);
+ expect(wrapper.findByTestId('show-whitespace').element.checked).toBe(false);
});
it('sets as checked when showWhitespace is true', () => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- showWhitespace: true,
- });
+ setup({
+ storeUpdater: (origStore) => Object.assign(origStore.state.diffs, { showWhitespace: true }),
});
- expect(wrapper.find('#show-whitespace').element.checked).toBe(true);
+ expect(wrapper.findByTestId('show-whitespace').element.checked).toBe(true);
});
- it('calls setShowWhitespace on change', () => {
- createComponent();
+ it('calls setShowWhitespace on change', async () => {
+ const checkbox = wrapper.findByTestId('show-whitespace');
+ const { checked } = checkbox.element;
- const checkbox = wrapper.find('#show-whitespace');
+ checkbox.trigger('click');
- checkbox.element.checked = true;
- checkbox.trigger('change');
+ await vm.$nextTick();
- expect(actions.setShowWhitespace).toHaveBeenCalledWith(expect.anything(), {
- showWhitespace: true,
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/setShowWhitespace', {
+ showWhitespace: !checked,
pushState: true,
});
});
@@ -182,39 +158,35 @@ describe('Diff settings dropdown component', () => {
${false} | ${false}
`(
'sets the checkbox to { checked: $checked } if the fileByFile setting is $fileByFile',
- async ({ fileByFile, checked }) => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- viewDiffsFileByFile: fileByFile,
- });
+ ({ fileByFile, checked }) => {
+ setup({
+ storeUpdater: (origStore) =>
+ Object.assign(origStore.state.diffs, { viewDiffsFileByFile: fileByFile }),
});
- await vm.$nextTick();
-
expect(getFileByFileCheckbox(wrapper).element.checked).toBe(checked);
},
);
it.each`
- start | emit
+ start | setting
${true} | ${false}
${false} | ${true}
`(
- 'when the file by file setting starts as $start, toggling the checkbox should emit an event set to $emit',
- async ({ start, emit }) => {
- createComponent((store) => {
- Object.assign(store.state.diffs, {
- viewDiffsFileByFile: start,
- });
+ 'when the file by file setting starts as $start, toggling the checkbox should call setFileByFile with $setting',
+ async ({ start, setting }) => {
+ setup({
+ storeUpdater: (origStore) =>
+ Object.assign(origStore.state.diffs, { viewDiffsFileByFile: start }),
});
- await vm.$nextTick();
-
getFileByFileCheckbox(wrapper).trigger('click');
await vm.$nextTick();
- expect(eventHub.$emit).toHaveBeenCalledWith(EVT_VIEW_FILE_BY_FILE, { setting: emit });
+ expect(store.dispatch).toHaveBeenCalledWith('diffs/setFileByFile', {
+ fileByFile: setting,
+ });
},
);
});
diff --git a/spec/frontend/diffs/mock_data/diff_with_commit.js b/spec/frontend/diffs/mock_data/diff_with_commit.js
index d646294ee84..f3b39bd3577 100644
--- a/spec/frontend/diffs/mock_data/diff_with_commit.js
+++ b/spec/frontend/diffs/mock_data/diff_with_commit.js
@@ -1,7 +1,5 @@
const FIXTURE = 'merge_request_diffs/with_commit.json';
-preloadFixtures(FIXTURE);
-
export default function getDiffWithCommit() {
return getJSONFixture(FIXTURE);
}
diff --git a/spec/frontend/diffs/store/utils_spec.js b/spec/frontend/diffs/store/utils_spec.js
index dcb58f7a380..6af38590610 100644
--- a/spec/frontend/diffs/store/utils_spec.js
+++ b/spec/frontend/diffs/store/utils_spec.js
@@ -275,24 +275,28 @@ describe('DiffsStoreUtils', () => {
describe('trimFirstCharOfLineContent', () => {
it('trims the line when it starts with a space', () => {
+ // eslint-disable-next-line import/no-deprecated
expect(utils.trimFirstCharOfLineContent({ rich_text: ' diff' })).toEqual({
rich_text: 'diff',
});
});
it('trims the line when it starts with a +', () => {
+ // eslint-disable-next-line import/no-deprecated
expect(utils.trimFirstCharOfLineContent({ rich_text: '+diff' })).toEqual({
rich_text: 'diff',
});
});
it('trims the line when it starts with a -', () => {
+ // eslint-disable-next-line import/no-deprecated
expect(utils.trimFirstCharOfLineContent({ rich_text: '-diff' })).toEqual({
rich_text: 'diff',
});
});
it('does not trims the line when it starts with a letter', () => {
+ // eslint-disable-next-line import/no-deprecated
expect(utils.trimFirstCharOfLineContent({ rich_text: 'diff' })).toEqual({
rich_text: 'diff',
});
@@ -303,12 +307,14 @@ describe('DiffsStoreUtils', () => {
rich_text: ' diff',
};
+ // eslint-disable-next-line import/no-deprecated
utils.trimFirstCharOfLineContent(lineObj);
expect(lineObj).toEqual({ rich_text: ' diff' });
});
it('handles a undefined or null parameter', () => {
+ // eslint-disable-next-line import/no-deprecated
expect(utils.trimFirstCharOfLineContent()).toEqual({});
});
});
diff --git a/spec/frontend/diffs/utils/file_reviews_spec.js b/spec/frontend/diffs/utils/file_reviews_spec.js
index a58c19a7245..230ec12409c 100644
--- a/spec/frontend/diffs/utils/file_reviews_spec.js
+++ b/spec/frontend/diffs/utils/file_reviews_spec.js
@@ -49,11 +49,11 @@ describe('File Review(s) utilities', () => {
it.each`
mrReviews | files | fileReviews
- ${{}} | ${[file1, file2]} | ${[false, false]}
- ${{ abc: ['123'] }} | ${[file1, file2]} | ${[true, false]}
- ${{ abc: ['098'] }} | ${[file1, file2]} | ${[false, true]}
- ${{ def: ['123'] }} | ${[file1, file2]} | ${[false, false]}
- ${{ abc: ['123'], def: ['098'] }} | ${[]} | ${[]}
+ ${{}} | ${[file1, file2]} | ${{ 123: false, '098': false }}
+ ${{ abc: ['123'] }} | ${[file1, file2]} | ${{ 123: true, '098': false }}
+ ${{ abc: ['098'] }} | ${[file1, file2]} | ${{ 123: false, '098': true }}
+ ${{ def: ['123'] }} | ${[file1, file2]} | ${{ 123: false, '098': false }}
+ ${{ abc: ['123'], def: ['098'] }} | ${[]} | ${{}}
`(
'returns $fileReviews based on the diff files in state and the existing reviews $reviews',
({ mrReviews, files, fileReviews }) => {
diff --git a/spec/frontend/diffs/utils/preferences_spec.js b/spec/frontend/diffs/utils/preferences_spec.js
index b09db2c1003..2dcc71dc188 100644
--- a/spec/frontend/diffs/utils/preferences_spec.js
+++ b/spec/frontend/diffs/utils/preferences_spec.js
@@ -5,32 +5,25 @@ import {
DIFF_VIEW_ALL_FILES,
} from '~/diffs/constants';
import { fileByFile } from '~/diffs/utils/preferences';
-import { getParameterValues } from '~/lib/utils/url_utility';
-
-jest.mock('~/lib/utils/url_utility');
describe('diffs preferences', () => {
describe('fileByFile', () => {
+ afterEach(() => {
+ Cookies.remove(DIFF_FILE_BY_FILE_COOKIE_NAME);
+ });
+
it.each`
- result | preference | cookie | searchParam
- ${false} | ${false} | ${undefined} | ${undefined}
- ${true} | ${true} | ${undefined} | ${undefined}
- ${true} | ${false} | ${DIFF_VIEW_FILE_BY_FILE} | ${undefined}
- ${false} | ${true} | ${DIFF_VIEW_ALL_FILES} | ${undefined}
- ${true} | ${false} | ${undefined} | ${[DIFF_VIEW_FILE_BY_FILE]}
- ${false} | ${true} | ${undefined} | ${[DIFF_VIEW_ALL_FILES]}
- ${true} | ${false} | ${DIFF_VIEW_FILE_BY_FILE} | ${[DIFF_VIEW_FILE_BY_FILE]}
- ${true} | ${true} | ${DIFF_VIEW_ALL_FILES} | ${[DIFF_VIEW_FILE_BY_FILE]}
- ${false} | ${false} | ${DIFF_VIEW_ALL_FILES} | ${[DIFF_VIEW_ALL_FILES]}
- ${false} | ${true} | ${DIFF_VIEW_FILE_BY_FILE} | ${[DIFF_VIEW_ALL_FILES]}
+ result | preference | cookie
+ ${true} | ${false} | ${DIFF_VIEW_FILE_BY_FILE}
+ ${false} | ${true} | ${DIFF_VIEW_ALL_FILES}
+ ${true} | ${false} | ${DIFF_VIEW_FILE_BY_FILE}
+ ${false} | ${true} | ${DIFF_VIEW_ALL_FILES}
+ ${false} | ${false} | ${DIFF_VIEW_ALL_FILES}
+ ${true} | ${true} | ${DIFF_VIEW_FILE_BY_FILE}
`(
- 'should return $result when { preference: $preference, cookie: $cookie, search: $searchParam }',
- ({ result, preference, cookie, searchParam }) => {
- if (cookie) {
- Cookies.set(DIFF_FILE_BY_FILE_COOKIE_NAME, cookie);
- }
-
- getParameterValues.mockReturnValue(searchParam);
+ 'should return $result when { preference: $preference, cookie: $cookie }',
+ ({ result, preference, cookie }) => {
+ Cookies.set(DIFF_FILE_BY_FILE_COOKIE_NAME, cookie);
expect(fileByFile(preference)).toBe(result);
},