diff options
Diffstat (limited to 'spec/frontend/diffs')
-rw-r--r-- | spec/frontend/diffs/components/diff_expansion_cell_spec.js | 21 | ||||
-rw-r--r-- | spec/frontend/diffs/store/actions_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/diffs/store/mutations_spec.js | 9 | ||||
-rw-r--r-- | spec/frontend/diffs/store/utils_spec.js | 24 | ||||
-rw-r--r-- | spec/frontend/diffs/utils/diff_file_spec.js | 71 | ||||
-rw-r--r-- | spec/frontend/diffs/utils/queue_events_spec.js | 37 |
6 files changed, 136 insertions, 28 deletions
diff --git a/spec/frontend/diffs/components/diff_expansion_cell_spec.js b/spec/frontend/diffs/components/diff_expansion_cell_spec.js index cd472920bb9..bd538996349 100644 --- a/spec/frontend/diffs/components/diff_expansion_cell_spec.js +++ b/spec/frontend/diffs/components/diff_expansion_cell_spec.js @@ -20,7 +20,6 @@ function makeLoadMoreLinesPayload({ sinceLine, toLine, oldLineNumber, - diffViewType, fileHash, nextLineNumbers = {}, unfold = false, @@ -28,12 +27,11 @@ function makeLoadMoreLinesPayload({ isExpandDown = false, }) { return { - endpoint: 'contextLinesPath', + endpoint: diffFileMockData.context_lines_path, params: { since: sinceLine, to: toLine, offset: toLine + 1 - oldLineNumber, - view: diffViewType, unfold, bottom, }, @@ -70,10 +68,11 @@ describe('DiffExpansionCell', () => { const createComponent = (options = {}) => { const defaults = { fileHash: mockFile.file_hash, - contextLinesPath: 'contextLinesPath', line: mockLine, isTop: false, isBottom: false, + file: mockFile, + inline: true, }; const propsData = { ...defaults, ...options }; @@ -124,7 +123,7 @@ describe('DiffExpansionCell', () => { describe('any row', () => { [ - { diffViewType: INLINE_DIFF_VIEW_TYPE, lineIndex: 8, file: { parallel_diff_lines: [] } }, + { diffViewType: INLINE_DIFF_VIEW_TYPE, lineIndex: 8, file: cloneDeep(diffFileMockData) }, ].forEach(({ diffViewType, file, lineIndex }) => { describe(`with diffViewType (${diffViewType})`, () => { beforeEach(() => { @@ -140,12 +139,12 @@ describe('DiffExpansionCell', () => { it('on expand all clicked, dispatch loadMoreLines', () => { const oldLineNumber = mockLine.meta_data.old_pos; const newLineNumber = mockLine.meta_data.new_pos; - const previousIndex = getPreviousLineIndex(diffViewType, mockFile, { + const previousIndex = getPreviousLineIndex(mockFile, { oldLineNumber, newLineNumber, }); - const wrapper = createComponent(); + const wrapper = createComponent({ file }); findExpandAll(wrapper).click(); @@ -156,7 +155,6 @@ describe('DiffExpansionCell', () => { toLine: newLineNumber - 1, sinceLine: previousIndex, oldLineNumber, - diffViewType, }), ); }); @@ -168,7 +166,7 @@ describe('DiffExpansionCell', () => { const oldLineNumber = mockLine.meta_data.old_pos; const newLineNumber = mockLine.meta_data.new_pos; - const wrapper = createComponent(); + const wrapper = createComponent({ file }); findExpandUp(wrapper).trigger('click'); @@ -196,17 +194,16 @@ describe('DiffExpansionCell', () => { mockLine.meta_data.old_pos = 200; mockLine.meta_data.new_pos = 200; - const wrapper = createComponent(); + const wrapper = createComponent({ file }); findExpandDown(wrapper).trigger('click'); expect(store.dispatch).toHaveBeenCalledWith('diffs/loadMoreLines', { - endpoint: 'contextLinesPath', + endpoint: diffFileMockData.context_lines_path, params: { since: 1, to: 21, // the load amount, plus 1 line offset: 0, - view: diffViewType, unfold: true, bottom: true, }, diff --git a/spec/frontend/diffs/store/actions_spec.js b/spec/frontend/diffs/store/actions_spec.js index 3b567fbc704..cc595e58dda 100644 --- a/spec/frontend/diffs/store/actions_spec.js +++ b/spec/frontend/diffs/store/actions_spec.js @@ -1,5 +1,5 @@ import MockAdapter from 'axios-mock-adapter'; -import Cookies from 'js-cookie'; +import Cookies from '~/lib/utils/cookies'; import { useLocalStorageSpy } from 'helpers/local_storage_helper'; import { TEST_HOST } from 'helpers/test_constants'; import testAction from 'helpers/vuex_action_helper'; diff --git a/spec/frontend/diffs/store/mutations_spec.js b/spec/frontend/diffs/store/mutations_spec.js index d8611b1ce1b..57e623b843d 100644 --- a/spec/frontend/diffs/store/mutations_spec.js +++ b/spec/frontend/diffs/store/mutations_spec.js @@ -131,7 +131,14 @@ describe('DiffsStoreMutations', () => { const options = { lineNumbers: { oldLineNumber: 1, newLineNumber: 2 }, contextLines: [ - { old_line: 1, new_line: 1, line_code: 'ff9200_1_1', discussions: [], hasForm: false }, + { + old_line: 1, + new_line: 1, + line_code: 'ff9200_1_1', + discussions: [], + hasForm: false, + type: 'expanded', + }, ], fileHash: 'ff9200', params: { diff --git a/spec/frontend/diffs/store/utils_spec.js b/spec/frontend/diffs/store/utils_spec.js index 03bcaab0d2b..8ae51a58819 100644 --- a/spec/frontend/diffs/store/utils_spec.js +++ b/spec/frontend/diffs/store/utils_spec.js @@ -51,21 +51,19 @@ describe('DiffsStoreUtils', () => { }); describe('getPreviousLineIndex', () => { - describe(`with diffViewType (inline) in split diffs`, () => { - let diffFile; + let diffFile; - beforeEach(() => { - diffFile = { ...clone(diffFileMockData) }; - }); + beforeEach(() => { + diffFile = { ...clone(diffFileMockData) }; + }); - it('should return the correct previous line number', () => { - expect( - utils.getPreviousLineIndex(INLINE_DIFF_VIEW_TYPE, diffFile, { - oldLineNumber: 3, - newLineNumber: 5, - }), - ).toBe(4); - }); + it('should return the correct previous line number', () => { + expect( + utils.getPreviousLineIndex(diffFile, { + oldLineNumber: 3, + newLineNumber: 5, + }), + ).toBe(4); }); }); diff --git a/spec/frontend/diffs/utils/diff_file_spec.js b/spec/frontend/diffs/utils/diff_file_spec.js index 3223b6c2dab..778897be3ba 100644 --- a/spec/frontend/diffs/utils/diff_file_spec.js +++ b/spec/frontend/diffs/utils/diff_file_spec.js @@ -3,6 +3,7 @@ import { getShortShaFromFile, stats, isNotDiffable, + match, } from '~/diffs/utils/diff_file'; import { diffViewerModes } from '~/ide/constants'; import mockDiffFile from '../mock_data/diff_file'; @@ -149,6 +150,38 @@ describe('diff_file utilities', () => { expect(preppedFile).not.toHaveProp('id'); }); + + it.each` + index + ${null} + ${undefined} + ${-1} + ${false} + ${true} + ${'idx'} + ${'42'} + `('does not set the order property if an invalid index ($index) is provided', ({ index }) => { + const preppedFile = prepareRawDiffFile({ + file: files[0], + allFiles: files, + index, + }); + + /* expect.anything() doesn't match null or undefined */ + expect(preppedFile).toEqual(expect.not.objectContaining({ order: null })); + expect(preppedFile).toEqual(expect.not.objectContaining({ order: undefined })); + expect(preppedFile).toEqual(expect.not.objectContaining({ order: expect.anything() })); + }); + + it('sets the provided valid index to the order property', () => { + const preppedFile = prepareRawDiffFile({ + file: files[0], + allFiles: files, + index: 42, + }); + + expect(preppedFile).toEqual(expect.objectContaining({ order: 42 })); + }); }); describe('getShortShaFromFile', () => { @@ -230,4 +263,42 @@ describe('diff_file utilities', () => { expect(isNotDiffable(file)).toBe(false); }); }); + + describe('match', () => { + const authorityFileId = '68296a4f-f1c7-445a-bd0e-6e3b02c4eec0'; + const fih = 'file_identifier_hash'; + const fihs = 'file identifier hashes'; + let authorityFile; + + beforeAll(() => { + const files = getDiffFiles(); + + authorityFile = prepareRawDiffFile({ + file: files[0], + allFiles: files, + }); + + Object.freeze(authorityFile); + }); + + describe.each` + mode | comparisonFiles | keyName + ${'universal'} | ${[{ [fih]: 'ABC1' }, { id: 'foo' }, { id: authorityFileId }]} | ${'ids'} + ${'mr'} | ${[{ id: authorityFileId }, { [fih]: 'ABC2' }, { [fih]: 'ABC1' }]} | ${fihs} + `('$mode mode', ({ mode, comparisonFiles, keyName }) => { + it(`fails to match if files or ${keyName} aren't present`, () => { + expect(match({ fileA: authorityFile, fileB: undefined, mode })).toBe(false); + expect(match({ fileA: authorityFile, fileB: null, mode })).toBe(false); + expect(match({ fileA: authorityFile, fileB: comparisonFiles[0], mode })).toBe(false); + }); + + it(`fails to match if the ${keyName} aren't the same`, () => { + expect(match({ fileA: authorityFile, fileB: comparisonFiles[1], mode })).toBe(false); + }); + + it(`matches if the ${keyName} are the same`, () => { + expect(match({ fileA: authorityFile, fileB: comparisonFiles[2], mode })).toBe(true); + }); + }); + }); }); diff --git a/spec/frontend/diffs/utils/queue_events_spec.js b/spec/frontend/diffs/utils/queue_events_spec.js index 007748d8b2c..ad2745f5188 100644 --- a/spec/frontend/diffs/utils/queue_events_spec.js +++ b/spec/frontend/diffs/utils/queue_events_spec.js @@ -1,11 +1,15 @@ import api from '~/api'; -import { DEFER_DURATION } from '~/diffs/constants'; +import { DEFER_DURATION, TRACKING_CAP_KEY, TRACKING_CAP_LENGTH } from '~/diffs/constants'; import { queueRedisHllEvents } from '~/diffs/utils/queue_events'; jest.mock('~/api', () => ({ trackRedisHllUserEvent: jest.fn(), })); +beforeAll(() => { + localStorage.clear(); +}); + describe('diffs events queue', () => { describe('queueRedisHllEvents', () => { it('does not dispatch the event immediately', () => { @@ -17,6 +21,7 @@ describe('diffs events queue', () => { queueRedisHllEvents(['know_event']); jest.advanceTimersByTime(DEFER_DURATION + 1); expect(api.trackRedisHllUserEvent).toHaveBeenCalled(); + expect(localStorage.getItem(TRACKING_CAP_KEY)).toBe(null); }); it('increase defer duration based on the provided events count', () => { @@ -32,5 +37,35 @@ describe('diffs events queue', () => { deferDuration *= index + 1; }); }); + + describe('with tracking cap verification', () => { + const currentTimestamp = Date.now(); + + beforeEach(() => { + localStorage.clear(); + }); + + it('dispatches the event if cap value is not found', () => { + queueRedisHllEvents(['know_event'], { verifyCap: true }); + jest.advanceTimersByTime(DEFER_DURATION + 1); + expect(api.trackRedisHllUserEvent).toHaveBeenCalled(); + expect(localStorage.getItem(TRACKING_CAP_KEY)).toBe(currentTimestamp.toString()); + }); + + it('dispatches the event if cap value is less than limit', () => { + localStorage.setItem(TRACKING_CAP_KEY, 1); + queueRedisHllEvents(['know_event'], { verifyCap: true }); + jest.advanceTimersByTime(DEFER_DURATION + 1); + expect(api.trackRedisHllUserEvent).toHaveBeenCalled(); + expect(localStorage.getItem(TRACKING_CAP_KEY)).toBe(currentTimestamp.toString()); + }); + + it('does not dispatch the event if cap value is greater than limit', () => { + localStorage.setItem(TRACKING_CAP_KEY, currentTimestamp - (TRACKING_CAP_LENGTH + 1)); + queueRedisHllEvents(['know_event'], { verifyCap: true }); + jest.advanceTimersByTime(DEFER_DURATION + 1); + expect(api.trackRedisHllUserEvent).toHaveBeenCalled(); + }); + }); }); }); |