diff options
Diffstat (limited to 'spec/frontend/diffs')
13 files changed, 248 insertions, 52 deletions
diff --git a/spec/frontend/diffs/components/app_spec.js b/spec/frontend/diffs/components/app_spec.js index 57e3a93c6f4..b7f03f35dfb 100644 --- a/spec/frontend/diffs/components/app_spec.js +++ b/spec/frontend/diffs/components/app_spec.js @@ -56,6 +56,7 @@ describe('diffs/components/app', () => { changesEmptyStateIllustration: '', dismissEndpoint: '', showSuggestPopover: true, + viewDiffsFileByFile: false, ...props, }, provide, @@ -829,4 +830,58 @@ describe('diffs/components/app', () => { expect(toggleShowTreeList).not.toHaveBeenCalled(); }); }); + + describe('file-by-file', () => { + it('renders a single diff', () => { + createComponent({ viewDiffsFileByFile: true }, ({ state }) => { + state.diffs.diffFiles.push({ file_hash: '123' }); + state.diffs.diffFiles.push({ file_hash: '312' }); + }); + + expect(wrapper.findAll(DiffFile).length).toBe(1); + }); + + describe('pagination', () => { + it('sets previous button as disabled', () => { + createComponent({ viewDiffsFileByFile: true }, ({ state }) => { + state.diffs.diffFiles.push({ file_hash: '123' }, { file_hash: '312' }); + }); + + expect(wrapper.find('[data-testid="singleFilePrevious"]').props('disabled')).toBe(true); + expect(wrapper.find('[data-testid="singleFileNext"]').props('disabled')).toBe(false); + }); + + it('sets next button as disabled', () => { + createComponent({ viewDiffsFileByFile: true }, ({ state }) => { + state.diffs.diffFiles.push({ file_hash: '123' }, { file_hash: '312' }); + state.diffs.currentDiffFileId = '312'; + }); + + expect(wrapper.find('[data-testid="singleFilePrevious"]').props('disabled')).toBe(false); + expect(wrapper.find('[data-testid="singleFileNext"]').props('disabled')).toBe(true); + }); + + it.each` + currentDiffFileId | button | index + ${'123'} | ${'singleFileNext'} | ${1} + ${'312'} | ${'singleFilePrevious'} | ${0} + `( + 'it calls navigateToDiffFileIndex with $index when $button is clicked', + ({ currentDiffFileId, button, index }) => { + createComponent({ viewDiffsFileByFile: true }, ({ state }) => { + state.diffs.diffFiles.push({ file_hash: '123' }, { file_hash: '312' }); + state.diffs.currentDiffFileId = currentDiffFileId; + }); + + jest.spyOn(wrapper.vm, 'navigateToDiffFileIndex'); + + wrapper.find(`[data-testid="${button}"]`).vm.$emit('click'); + + return wrapper.vm.$nextTick().then(() => { + expect(wrapper.vm.navigateToDiffFileIndex).toHaveBeenCalledWith(index); + }); + }, + ); + }); + }); }); diff --git a/spec/frontend/diffs/components/diff_expansion_cell_spec.js b/spec/frontend/diffs/components/diff_expansion_cell_spec.js index 0504f3933e0..ef2e0dfe59b 100644 --- a/spec/frontend/diffs/components/diff_expansion_cell_spec.js +++ b/spec/frontend/diffs/components/diff_expansion_cell_spec.js @@ -6,10 +6,10 @@ import DiffExpansionCell from '~/diffs/components/diff_expansion_cell.vue'; import { getPreviousLineIndex } from '~/diffs/store/utils'; import { INLINE_DIFF_VIEW_TYPE, PARALLEL_DIFF_VIEW_TYPE } from '~/diffs/constants'; import diffFileMockData from '../mock_data/diff_file'; +import { getByText } from '@testing-library/dom'; const EXPAND_UP_CLASS = '.js-unfold'; const EXPAND_DOWN_CLASS = '.js-unfold-down'; -const EXPAND_ALL_CLASS = '.js-unfold-all'; const LINE_TO_USE = 5; const lineSources = { [INLINE_DIFF_VIEW_TYPE]: 'highlighted_diff_lines', @@ -88,7 +88,7 @@ describe('DiffExpansionCell', () => { const findExpandUp = () => vm.$el.querySelector(EXPAND_UP_CLASS); const findExpandDown = () => vm.$el.querySelector(EXPAND_DOWN_CLASS); - const findExpandAll = () => vm.$el.querySelector(EXPAND_ALL_CLASS); + const findExpandAll = () => getByText(vm.$el, 'Show unchanged lines'); describe('top row', () => { it('should have "expand up" and "show all" option', () => { diff --git a/spec/frontend/diffs/components/diff_file_header_spec.js b/spec/frontend/diffs/components/diff_file_header_spec.js index e0b7e0bc0f3..671dced080c 100644 --- a/spec/frontend/diffs/components/diff_file_header_spec.js +++ b/spec/frontend/diffs/components/diff_file_header_spec.js @@ -87,6 +87,7 @@ describe('DiffFileHeader component', () => { propsData: { diffFile, canCurrentUserFork: false, + viewDiffsFileByFile: false, ...props, }, localVue, diff --git a/spec/frontend/diffs/components/diff_file_row_spec.js b/spec/frontend/diffs/components/diff_file_row_spec.js index 856622b89cb..afdd4bfb335 100644 --- a/spec/frontend/diffs/components/diff_file_row_spec.js +++ b/spec/frontend/diffs/components/diff_file_row_spec.js @@ -73,4 +73,15 @@ describe('Diff File Row component', () => { expect(wrapper.find(FileRowStats).exists()).toEqual(value); }); }); + + it('adds is-active class when currentDiffFileId matches file_hash', () => { + createComponent({ + level: 0, + currentDiffFileId: '123', + file: { fileHash: '123' }, + hideFileStats: false, + }); + + expect(wrapper.classes('is-active')).toBe(true); + }); }); diff --git a/spec/frontend/diffs/components/diff_file_spec.js b/spec/frontend/diffs/components/diff_file_spec.js index 71e975f2409..7e154d76f45 100644 --- a/spec/frontend/diffs/components/diff_file_spec.js +++ b/spec/frontend/diffs/components/diff_file_spec.js @@ -15,6 +15,7 @@ describe('DiffFile', () => { vm = createComponentWithStore(Vue.extend(DiffFileComponent), createStore(), { file: JSON.parse(JSON.stringify(diffFileMockDataReadable)), canCurrentUserFork: false, + viewDiffsFileByFile: false, }).$mount(); trackingSpy = mockTracking('_category_', vm.$el, jest.spyOn); }); @@ -113,6 +114,7 @@ describe('DiffFile', () => { vm = createComponentWithStore(Vue.extend(DiffFileComponent), createStore(), { file: JSON.parse(JSON.stringify(diffFileMockDataUnreadable)), canCurrentUserFork: false, + viewDiffsFileByFile: false, }).$mount(); vm.renderIt = false; @@ -235,6 +237,7 @@ describe('DiffFile', () => { vm = createComponentWithStore(Vue.extend(DiffFileComponent), createStore(), { file: JSON.parse(JSON.stringify(diffFileMockDataUnreadable)), canCurrentUserFork: false, + viewDiffsFileByFile: false, }).$mount(); jest.spyOn(vm, 'handleLoadCollapsedDiff').mockImplementation(() => {}); diff --git a/spec/frontend/diffs/components/diff_gutter_avatars_spec.js b/spec/frontend/diffs/components/diff_gutter_avatars_spec.js index da18d8e7894..61e110b345a 100644 --- a/spec/frontend/diffs/components/diff_gutter_avatars_spec.js +++ b/spec/frontend/diffs/components/diff_gutter_avatars_spec.js @@ -110,7 +110,7 @@ describe('DiffGutterAvatars', () => { it('returns truncated version of comment if it is longer than max length', () => { const note = wrapper.vm.discussions[0].notes[1]; - expect(wrapper.vm.getTooltipText(note)).toEqual('Fatih Acet: comment 2 is r...'); + expect(wrapper.vm.getTooltipText(note)).toEqual('Fatih Acet: comment 2 is rea…'); }); }); }); diff --git a/spec/frontend/diffs/components/diff_line_note_form_spec.js b/spec/frontend/diffs/components/diff_line_note_form_spec.js index 623df8bd55e..75ec5c202af 100644 --- a/spec/frontend/diffs/components/diff_line_note_form_spec.js +++ b/spec/frontend/diffs/components/diff_line_note_form_spec.js @@ -78,10 +78,18 @@ describe('DiffLineNoteForm', () => { .mockReturnValue(Promise.resolve()); const lineRange = { - start_line_code: wrapper.vm.commentLineStart.lineCode, - start_line_type: wrapper.vm.commentLineStart.type, - end_line_code: wrapper.vm.line.line_code, - end_line_type: wrapper.vm.line.type, + start: { + line_code: wrapper.vm.commentLineStart.line_code, + type: wrapper.vm.commentLineStart.type, + new_line: 1, + old_line: null, + }, + end: { + line_code: wrapper.vm.line.line_code, + type: wrapper.vm.line.type, + new_line: 1, + old_line: null, + }, }; const formData = { diff --git a/spec/frontend/diffs/components/diff_table_cell_spec.js b/spec/frontend/diffs/components/diff_table_cell_spec.js index e871d86d901..9693fe68b57 100644 --- a/spec/frontend/diffs/components/diff_table_cell_spec.js +++ b/spec/frontend/diffs/components/diff_table_cell_spec.js @@ -100,7 +100,11 @@ describe('DiffTableCell', () => { setWindowLocation({ href: `${TEST_HOST}?${query}` }); createComponent({ showCommentButton }); - expect(findNoteButton().exists()).toBe(expectation); + wrapper.setData({ isCommentButtonRendered: showCommentButton }); + + return wrapper.vm.$nextTick().then(() => { + expect(findNoteButton().exists()).toBe(expectation); + }); }, ); @@ -108,7 +112,6 @@ describe('DiffTableCell', () => { isHover | otherProps | discussions | expectation ${true} | ${{}} | ${[]} | ${true} ${false} | ${{}} | ${[]} | ${false} - ${true} | ${{ line: { ...line, type: 'match' } }} | ${[]} | ${false} ${true} | ${{ line: { ...line, type: 'context' } }} | ${[]} | ${false} ${true} | ${{ line: { ...line, type: 'old-nonewline' } }} | ${[]} | ${false} ${true} | ${{}} | ${[{}]} | ${false} @@ -122,7 +125,13 @@ describe('DiffTableCell', () => { ...otherProps, }); - expect(findNoteButton().isVisible()).toBe(expectation); + wrapper.setData({ + isCommentButtonRendered: true, + }); + + return wrapper.vm.$nextTick().then(() => { + expect(findNoteButton().isVisible()).toBe(expectation); + }); }, ); }); 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 66349727b11..f929f97b598 100644 --- a/spec/frontend/diffs/components/inline_diff_table_row_spec.js +++ b/spec/frontend/diffs/components/inline_diff_table_row_spec.js @@ -1,27 +1,31 @@ -import Vue from 'vue'; -import { createComponentWithStore } from 'helpers/vue_mount_component_helper'; +import { shallowMount } from '@vue/test-utils'; import { createStore } from '~/mr_notes/stores'; import InlineDiffTableRow from '~/diffs/components/inline_diff_table_row.vue'; import diffFileMockData from '../mock_data/diff_file'; describe('InlineDiffTableRow', () => { + let wrapper; let vm; const thisLine = diffFileMockData.highlighted_diff_lines[0]; beforeEach(() => { - vm = createComponentWithStore(Vue.extend(InlineDiffTableRow), createStore(), { - line: thisLine, - fileHash: diffFileMockData.file_hash, - filePath: diffFileMockData.file_path, - contextLinesPath: 'contextLinesPath', - isHighlighted: false, - }).$mount(); + wrapper = shallowMount(InlineDiffTableRow, { + store: createStore(), + propsData: { + line: thisLine, + fileHash: diffFileMockData.file_hash, + filePath: diffFileMockData.file_path, + contextLinesPath: 'contextLinesPath', + isHighlighted: false, + }, + }); + vm = wrapper.vm; }); it('does not add hll class to line content when line does not match highlighted row', done => { vm.$nextTick() .then(() => { - expect(vm.$el.querySelector('.line_content').classList).not.toContain('hll'); + expect(wrapper.find('.line_content').classes('hll')).toBe(false); }) .then(done) .catch(done.fail); @@ -35,12 +39,19 @@ describe('InlineDiffTableRow', () => { return vm.$nextTick(); }) .then(() => { - expect(vm.$el.querySelector('.line_content').classList).toContain('hll'); + expect(wrapper.find('.line_content').classes('hll')).toBe(true); }) .then(done) .catch(done.fail); }); + it('adds hll class to lineContent when line is part of a multiline comment', () => { + wrapper.setProps({ isCommented: true }); + return vm.$nextTick().then(() => { + expect(wrapper.find('.line_content').classes('hll')).toBe(true); + }); + }); + describe('sets coverage title and class', () => { it('for lines with coverage', done => { vm.$nextTick() @@ -53,10 +64,10 @@ describe('InlineDiffTableRow', () => { return vm.$nextTick(); }) .then(() => { - const coverage = vm.$el.querySelector('.line-coverage'); + const coverage = wrapper.find('.line-coverage'); - expect(coverage.title).toContain('Test coverage: 5 hits'); - expect(coverage.classList).toContain('coverage'); + expect(coverage.attributes('title')).toContain('Test coverage: 5 hits'); + expect(coverage.classes('coverage')).toBe(true); }) .then(done) .catch(done.fail); @@ -73,10 +84,10 @@ describe('InlineDiffTableRow', () => { return vm.$nextTick(); }) .then(() => { - const coverage = vm.$el.querySelector('.line-coverage'); + const coverage = wrapper.find('.line-coverage'); - expect(coverage.title).toContain('No test coverage'); - expect(coverage.classList).toContain('no-coverage'); + expect(coverage.attributes('title')).toContain('No test coverage'); + expect(coverage.classes('no-coverage')).toBe(true); }) .then(done) .catch(done.fail); @@ -90,11 +101,11 @@ describe('InlineDiffTableRow', () => { return vm.$nextTick(); }) .then(() => { - const coverage = vm.$el.querySelector('.line-coverage'); + const coverage = wrapper.find('.line-coverage'); - expect(coverage.title).not.toContain('Coverage'); - expect(coverage.classList).not.toContain('coverage'); - expect(coverage.classList).not.toContain('no-coverage'); + expect(coverage.attributes('title')).toBeUndefined(); + expect(coverage.classes('coverage')).toBe(false); + expect(coverage.classes('no-coverage')).toBe(false); }) .then(done) .catch(done.fail); diff --git a/spec/frontend/diffs/components/no_changes_spec.js b/spec/frontend/diffs/components/no_changes_spec.js index 245651af61c..2eca97a47fd 100644 --- a/spec/frontend/diffs/components/no_changes_spec.js +++ b/spec/frontend/diffs/components/no_changes_spec.js @@ -2,6 +2,7 @@ import { createLocalVue, shallowMount } from '@vue/test-utils'; import Vuex from 'vuex'; import { createStore } from '~/mr_notes/stores'; import NoChanges from '~/diffs/components/no_changes.vue'; +import { GlButton } from '@gitlab/ui'; describe('Diff no changes empty state', () => { let vm; @@ -37,4 +38,11 @@ describe('Diff no changes empty state', () => { expect(vm.contains('script')).toBe(false); }); + + describe('Renders', () => { + it('Show create commit button', () => { + createComponent(); + expect(vm.find(GlButton).exists()).toBe(true); + }); + }); }); diff --git a/spec/frontend/diffs/components/parallel_diff_table_row_spec.js b/spec/frontend/diffs/components/parallel_diff_table_row_spec.js index 6b92d448cf5..339352943a9 100644 --- a/spec/frontend/diffs/components/parallel_diff_table_row_spec.js +++ b/spec/frontend/diffs/components/parallel_diff_table_row_spec.js @@ -1,4 +1,5 @@ import Vue from 'vue'; +import { shallowMount } from '@vue/test-utils'; import { createComponentWithStore } from 'helpers/vue_mount_component_helper'; import { createStore } from '~/mr_notes/stores'; import ParallelDiffTableRow from '~/diffs/components/parallel_diff_table_row.vue'; @@ -6,18 +7,24 @@ import diffFileMockData from '../mock_data/diff_file'; describe('ParallelDiffTableRow', () => { describe('when one side is empty', () => { + let wrapper; let vm; const thisLine = diffFileMockData.parallel_diff_lines[0]; const rightLine = diffFileMockData.parallel_diff_lines[0].right; beforeEach(() => { - vm = createComponentWithStore(Vue.extend(ParallelDiffTableRow), createStore(), { - line: thisLine, - fileHash: diffFileMockData.file_hash, - filePath: diffFileMockData.file_path, - contextLinesPath: 'contextLinesPath', - isHighlighted: false, - }).$mount(); + wrapper = shallowMount(ParallelDiffTableRow, { + store: createStore(), + propsData: { + line: thisLine, + fileHash: diffFileMockData.file_hash, + filePath: diffFileMockData.file_path, + contextLinesPath: 'contextLinesPath', + isHighlighted: false, + }, + }); + + vm = wrapper.vm; }); it('does not highlight non empty line content when line does not match highlighted row', done => { @@ -42,6 +49,13 @@ describe('ParallelDiffTableRow', () => { .then(done) .catch(done.fail); }); + + it('highlights nonempty line content when line is part of a multiline comment', () => { + wrapper.setProps({ isCommented: true }); + return vm.$nextTick().then(() => { + expect(vm.$el.querySelector('.line_content.right-side').classList).toContain('hll'); + }); + }); }); describe('when both sides have content', () => { diff --git a/spec/frontend/diffs/store/actions_spec.js b/spec/frontend/diffs/store/actions_spec.js index 7d79dcfbfe3..ec6ad031813 100644 --- a/spec/frontend/diffs/store/actions_spec.js +++ b/spec/frontend/diffs/store/actions_spec.js @@ -6,6 +6,8 @@ import { INLINE_DIFF_VIEW_TYPE, PARALLEL_DIFF_VIEW_TYPE, DIFFS_PER_PAGE, + DIFF_WHITESPACE_COOKIE_NAME, + SHOW_WHITESPACE, } from '~/diffs/constants'; import { setBaseConfig, @@ -44,6 +46,8 @@ import { setSuggestPopoverDismissed, changeCurrentCommit, moveToNeighboringCommit, + setCurrentDiffFileIdFromNote, + navigateToDiffFileIndex, } from '~/diffs/store/actions'; import eventHub from '~/notes/event_hub'; import * as types from '~/diffs/store/mutation_types'; @@ -55,6 +59,7 @@ import { mergeUrlParams } from '~/lib/utils/url_utility'; import { useLocalStorageSpy } from 'helpers/local_storage_helper'; import { diffMetadata } from '../mock_data/diff_metadata'; import createFlash from '~/flash'; +import { TEST_HOST } from 'jest/helpers/test_constants'; jest.mock('~/flash', () => jest.fn()); @@ -187,8 +192,8 @@ describe('DiffsStoreActions', () => { it('should fetch batch diff files', done => { const endpointBatch = '/fetch/diffs_batch'; - const res1 = { diff_files: [], pagination: { next_page: 2 } }; - const res2 = { diff_files: [], pagination: {} }; + const res1 = { diff_files: [{ file_hash: 'test' }], pagination: { next_page: 2 } }; + const res2 = { diff_files: [{ file_hash: 'test2' }], pagination: {} }; mock .onGet( mergeUrlParams( @@ -224,8 +229,10 @@ describe('DiffsStoreActions', () => { { type: types.SET_RETRIEVING_BATCHES, payload: true }, { type: types.SET_DIFF_DATA_BATCH, payload: { diff_files: res1.diff_files } }, { type: types.SET_BATCH_LOADING, payload: false }, - { type: types.SET_DIFF_DATA_BATCH, payload: { diff_files: [] } }, + { type: types.UPDATE_CURRENT_DIFF_FILE_ID, payload: 'test' }, + { type: types.SET_DIFF_DATA_BATCH, payload: { diff_files: res2.diff_files } }, { type: types.SET_BATCH_LOADING, payload: false }, + { type: types.UPDATE_CURRENT_DIFF_FILE_ID, payload: 'test2' }, { type: types.SET_RETRIEVING_BATCHES, payload: false }, ], [], @@ -309,6 +316,7 @@ describe('DiffsStoreActions', () => { showWhitespace: false, diffViewType: 'inline', useSingleDiffStyle: false, + currentDiffFileId: null, }, [ { type: types.SET_LOADING, payload: true }, @@ -345,8 +353,8 @@ describe('DiffsStoreActions', () => { it('should fetch batch diff files', done => { const endpointBatch = '/fetch/diffs_batch'; - const res1 = { diff_files: [], pagination: { next_page: 2 } }; - const res2 = { diff_files: [], pagination: {} }; + const res1 = { diff_files: [{ file_hash: 'test' }], pagination: { next_page: 2 } }; + const res2 = { diff_files: [{ file_hash: 'test2' }], pagination: {} }; mock .onGet(mergeUrlParams({ per_page: DIFFS_PER_PAGE, w: '1', page: 1 }, endpointBatch)) .reply(200, res1) @@ -356,14 +364,16 @@ describe('DiffsStoreActions', () => { testAction( fetchDiffFilesBatch, {}, - { endpointBatch, useSingleDiffStyle: false }, + { endpointBatch, useSingleDiffStyle: false, currentDiffFileId: null }, [ { type: types.SET_BATCH_LOADING, payload: true }, { type: types.SET_RETRIEVING_BATCHES, payload: true }, { type: types.SET_DIFF_DATA_BATCH, payload: { diff_files: res1.diff_files } }, { type: types.SET_BATCH_LOADING, payload: false }, - { type: types.SET_DIFF_DATA_BATCH, payload: { diff_files: [] } }, + { type: types.UPDATE_CURRENT_DIFF_FILE_ID, payload: 'test' }, + { type: types.SET_DIFF_DATA_BATCH, payload: { diff_files: res2.diff_files } }, { type: types.SET_BATCH_LOADING, payload: false }, + { type: types.UPDATE_CURRENT_DIFF_FILE_ID, payload: 'test2' }, { type: types.SET_RETRIEVING_BATCHES, payload: false }, ], [], @@ -475,6 +485,10 @@ describe('DiffsStoreActions', () => { }); describe('assignDiscussionsToDiff', () => { + afterEach(() => { + window.location.hash = ''; + }); + it('should merge discussions into diffs', done => { window.location.hash = 'ABC_123'; @@ -568,6 +582,19 @@ describe('DiffsStoreActions', () => { done, ); }); + + it('dispatches setCurrentDiffFileIdFromNote with note ID', done => { + window.location.hash = 'note_123'; + + testAction( + assignDiscussionsToDiff, + [], + { diffFiles: [], useSingleDiffStyle: true }, + [], + [{ type: 'setCurrentDiffFileIdFromNote', payload: '123' }], + done, + ); + }); }); describe('removeDiscussionsFromDiff', () => { @@ -1187,10 +1214,10 @@ describe('DiffsStoreActions', () => { ); }); - it('sets localStorage', () => { + it('sets cookie', () => { setShowWhitespace({ commit() {} }, { showWhitespace: true }); - expect(localStorage.setItem).toHaveBeenCalledWith('mr_show_whitespace', true); + expect(Cookies.get(DIFF_WHITESPACE_COOKIE_NAME)).toEqual(SHOW_WHITESPACE); }); it('calls history pushState', () => { @@ -1250,12 +1277,12 @@ describe('DiffsStoreActions', () => { describe('success', () => { beforeEach(() => { - mock.onGet(`${gl.TEST_HOST}/context`).replyOnce(200, ['test']); + mock.onGet(`${TEST_HOST}/context`).replyOnce(200, ['test']); }); it('commits the success and dispatches an action to expand the new lines', done => { const file = { - context_lines_path: `${gl.TEST_HOST}/context`, + context_lines_path: `${TEST_HOST}/context`, file_path: 'test', file_hash: 'test', }; @@ -1272,13 +1299,13 @@ describe('DiffsStoreActions', () => { describe('error', () => { beforeEach(() => { - mock.onGet(`${gl.TEST_HOST}/context`).replyOnce(500); + mock.onGet(`${TEST_HOST}/context`).replyOnce(500); }); it('dispatches receiveFullDiffError', done => { testAction( fetchFullDiff, - { context_lines_path: `${gl.TEST_HOST}/context`, file_path: 'test', file_hash: 'test' }, + { context_lines_path: `${TEST_HOST}/context`, file_path: 'test', file_hash: 'test' }, null, [], [{ type: 'receiveFullDiffError', payload: 'test' }], @@ -1442,7 +1469,7 @@ describe('DiffsStoreActions', () => { describe('setSuggestPopoverDismissed', () => { it('commits SET_SHOW_SUGGEST_POPOVER', done => { - const state = { dismissEndpoint: `${gl.TEST_HOST}/-/user_callouts` }; + const state = { dismissEndpoint: `${TEST_HOST}/-/user_callouts` }; const mock = new MockAdapter(axios); mock.onPost(state.dismissEndpoint).reply(200, {}); @@ -1563,4 +1590,31 @@ describe('DiffsStoreActions', () => { }, ); }); + + describe('setCurrentDiffFileIdFromNote', () => { + it('commits UPDATE_CURRENT_DIFF_FILE_ID', () => { + const commit = jest.fn(); + const rootGetters = { + getDiscussion: () => ({ diff_file: { file_hash: '123' } }), + notesById: { '1': { discussion_id: '2' } }, + }; + + setCurrentDiffFileIdFromNote({ commit, rootGetters }, '1'); + + expect(commit).toHaveBeenCalledWith(types.UPDATE_CURRENT_DIFF_FILE_ID, '123'); + }); + }); + + describe('navigateToDiffFileIndex', () => { + it('commits UPDATE_CURRENT_DIFF_FILE_ID', done => { + testAction( + navigateToDiffFileIndex, + 0, + { diffFiles: [{ file_hash: '123' }] }, + [{ type: types.UPDATE_CURRENT_DIFF_FILE_ID, payload: '123' }], + [], + done, + ); + }); + }); }); diff --git a/spec/frontend/diffs/store/utils_spec.js b/spec/frontend/diffs/store/utils_spec.js index 891de45e268..d87619e1e3c 100644 --- a/spec/frontend/diffs/store/utils_spec.js +++ b/spec/frontend/diffs/store/utils_spec.js @@ -1090,4 +1090,26 @@ describe('DiffsStoreUtils', () => { ]); }); }); + + describe('getDefaultWhitespace', () => { + it('defaults to true if querystring and cookie are undefined', () => { + expect(utils.getDefaultWhitespace()).toBe(true); + }); + + it('returns false if querystring is `1`', () => { + expect(utils.getDefaultWhitespace('1', '0')).toBe(false); + }); + + it('returns true if querystring is `0`', () => { + expect(utils.getDefaultWhitespace('0', undefined)).toBe(true); + }); + + it('returns false if cookie is `1`', () => { + expect(utils.getDefaultWhitespace(undefined, '1')).toBe(false); + }); + + it('returns true if cookie is `0`', () => { + expect(utils.getDefaultWhitespace(undefined, '0')).toBe(true); + }); + }); }); |