diff options
Diffstat (limited to 'spec/frontend/diffs/diff_file_spec.js')
-rw-r--r-- | spec/frontend/diffs/diff_file_spec.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/spec/frontend/diffs/diff_file_spec.js b/spec/frontend/diffs/diff_file_spec.js new file mode 100644 index 00000000000..5d74760ef66 --- /dev/null +++ b/spec/frontend/diffs/diff_file_spec.js @@ -0,0 +1,60 @@ +import { prepareRawDiffFile } from '~/diffs/diff_file'; + +const DIFF_FILES = [ + { + file_hash: 'ABC', // This file is just a normal file + }, + { + file_hash: 'DEF', // This file replaces a symlink + a_mode: '0', + b_mode: '0755', + }, + { + file_hash: 'DEF', // This symlink is replaced by a file + a_mode: '120000', + b_mode: '0', + }, + { + file_hash: 'GHI', // This symlink replaces a file + a_mode: '0', + b_mode: '120000', + }, + { + file_hash: 'GHI', // This file is replaced by a symlink + a_mode: '0755', + b_mode: '0', + }, +]; + +function makeBrokenSymlinkObject(replaced, wasSymbolic, isSymbolic, wasReal, isReal) { + return { + replaced, + wasSymbolic, + isSymbolic, + wasReal, + isReal, + }; +} + +describe('diff_file utilities', () => { + describe('prepareRawDiffFile', () => { + it.each` + fileIndex | description | brokenSymlink + ${0} | ${'a file that is not symlink-adjacent'} | ${false} + ${1} | ${'a file that replaces a symlink'} | ${makeBrokenSymlinkObject(false, false, false, false, true)} + ${2} | ${'a symlink that is replaced by a file'} | ${makeBrokenSymlinkObject(true, true, false, false, false)} + ${3} | ${'a symlink that replaces a file'} | ${makeBrokenSymlinkObject(false, false, true, false, false)} + ${4} | ${'a file that is replaced by a symlink'} | ${makeBrokenSymlinkObject(true, false, false, true, false)} + `( + 'properly marks $description with the correct .brokenSymlink value', + ({ fileIndex, brokenSymlink }) => { + const preppedRaw = prepareRawDiffFile({ + file: DIFF_FILES[fileIndex], + allFiles: DIFF_FILES, + }); + + expect(preppedRaw.brokenSymlink).toStrictEqual(brokenSymlink); + }, + ); + }); +}); |