diff options
Diffstat (limited to 'spec/javascripts/diffs/store/mutations_spec.js')
-rw-r--r-- | spec/javascripts/diffs/store/mutations_spec.js | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/spec/javascripts/diffs/store/mutations_spec.js b/spec/javascripts/diffs/store/mutations_spec.js new file mode 100644 index 00000000000..5f1a6e9def7 --- /dev/null +++ b/spec/javascripts/diffs/store/mutations_spec.js @@ -0,0 +1,147 @@ +import mutations from '~/diffs/store/mutations'; +import * as types from '~/diffs/store/mutation_types'; +import { INLINE_DIFF_VIEW_TYPE } from '~/diffs/constants'; + +describe('DiffsStoreMutations', () => { + describe('SET_ENDPOINT', () => { + it('should set endpoint', () => { + const state = {}; + const endpoint = '/diffs/endpoint'; + + mutations[types.SET_ENDPOINT](state, endpoint); + expect(state.endpoint).toEqual(endpoint); + }); + }); + + describe('SET_LOADING', () => { + it('should set loading state', () => { + const state = {}; + + mutations[types.SET_LOADING](state, false); + expect(state.isLoading).toEqual(false); + }); + }); + + describe('SET_DIFF_FILES', () => { + it('should set diff files to state', () => { + const filePath = '/first-diff-file-path'; + const state = {}; + const diffFiles = { + a_mode: 1, + highlighted_diff_lines: [{ file_path: filePath }], + }; + + mutations[types.SET_DIFF_FILES](state, diffFiles); + expect(state.diffFiles.aMode).toEqual(1); + expect(state.diffFiles.highlightedDiffLines[0].filePath).toEqual(filePath); + }); + }); + + describe('SET_DIFF_VIEW_TYPE', () => { + it('should set diff view type properly', () => { + const state = {}; + + mutations[types.SET_DIFF_VIEW_TYPE](state, INLINE_DIFF_VIEW_TYPE); + expect(state.diffViewType).toEqual(INLINE_DIFF_VIEW_TYPE); + }); + }); + + describe('ADD_COMMENT_FORM_LINE', () => { + it('should set a truthy reference for the given line code in diffLineCommentForms', () => { + const state = { diffLineCommentForms: {} }; + const lineCode = 'FDE'; + + mutations[types.ADD_COMMENT_FORM_LINE](state, { lineCode }); + expect(state.diffLineCommentForms[lineCode]).toBeTruthy(); + }); + }); + + describe('REMOVE_COMMENT_FORM_LINE', () => { + it('should remove given reference from diffLineCommentForms', () => { + const state = { diffLineCommentForms: {} }; + const lineCode = 'FDE'; + + mutations[types.ADD_COMMENT_FORM_LINE](state, { lineCode }); + expect(state.diffLineCommentForms[lineCode]).toBeTruthy(); + + mutations[types.REMOVE_COMMENT_FORM_LINE](state, { lineCode }); + expect(state.diffLineCommentForms[lineCode]).toBeUndefined(); + }); + }); + + describe('EXPAND_ALL_FILES', () => { + it('should change the collapsed prop from diffFiles', () => { + const diffFile = { + collapsed: true, + }; + const state = { expandAllFiles: true, diffFiles: [diffFile] }; + + mutations[types.EXPAND_ALL_FILES](state); + expect(state.diffFiles[0].collapsed).toEqual(false); + }); + }); + + describe('ADD_CONTEXT_LINES', () => { + it('should call utils.addContextLines with proper params', () => { + const options = { + lineNumbers: { oldLineNumber: 1, newLineNumber: 2 }, + contextLines: [{ oldLine: 1 }], + fileHash: 'ff9200', + params: { + bottom: true, + }, + }; + const diffFile = { + fileHash: options.fileHash, + highlightedDiffLines: [], + parallelDiffLines: [], + }; + const state = { diffFiles: [diffFile] }; + const lines = [{ oldLine: 1 }]; + + const findDiffFileSpy = spyOnDependency(mutations, 'findDiffFile').and.returnValue(diffFile); + const removeMatchLineSpy = spyOnDependency(mutations, 'removeMatchLine'); + const lineRefSpy = spyOnDependency(mutations, 'addLineReferences').and.returnValue(lines); + const addContextLinesSpy = spyOnDependency(mutations, 'addContextLines'); + + mutations[types.ADD_CONTEXT_LINES](state, options); + + expect(findDiffFileSpy).toHaveBeenCalledWith(state.diffFiles, options.fileHash); + expect(removeMatchLineSpy).toHaveBeenCalledWith( + diffFile, + options.lineNumbers, + options.params.bottom, + ); + expect(lineRefSpy).toHaveBeenCalledWith( + options.contextLines, + options.lineNumbers, + options.params.bottom, + ); + expect(addContextLinesSpy).toHaveBeenCalledWith({ + inlineLines: diffFile.highlightedDiffLines, + parallelLines: diffFile.parallelDiffLines, + contextLines: options.contextLines, + bottom: options.params.bottom, + lineNumbers: options.lineNumbers, + }); + }); + }); + + describe('ADD_COLLAPSED_DIFFS', () => { + it('should update the state with the given data for the given file hash', () => { + const spy = spyOnDependency(mutations, 'convertObjectPropsToCamelCase').and.callThrough(); + + const fileHash = 123; + const state = { diffFiles: [{}, { fileHash, existingField: 0 }] }; + const file = { fileHash }; + const data = { diff_files: [{ file_hash: fileHash, extra_field: 1, existingField: 1 }] }; + + mutations[types.ADD_COLLAPSED_DIFFS](state, { file, data }); + expect(spy).toHaveBeenCalledWith(data, { deep: true }); + + expect(state.diffFiles[1].fileHash).toEqual(fileHash); + expect(state.diffFiles[1].existingField).toEqual(1); + expect(state.diffFiles[1].extraField).toEqual(1); + }); + }); +}); |