summaryrefslogtreecommitdiff
path: root/spec/frontend/diffs/utils/diff_file_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/diffs/utils/diff_file_spec.js')
-rw-r--r--spec/frontend/diffs/utils/diff_file_spec.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/spec/frontend/diffs/utils/diff_file_spec.js b/spec/frontend/diffs/utils/diff_file_spec.js
new file mode 100644
index 00000000000..2e6247b8c07
--- /dev/null
+++ b/spec/frontend/diffs/utils/diff_file_spec.js
@@ -0,0 +1,126 @@
+import { prepareRawDiffFile } from '~/diffs/utils/diff_file';
+
+function getDiffFiles() {
+ return [
+ {
+ blob: {
+ id: 'C0473471',
+ },
+ file_hash: 'ABC', // This file is just a normal file
+ file_identifier_hash: 'ABC1',
+ },
+ {
+ blob: {
+ id: 'C0473472',
+ },
+ file_hash: 'DEF', // This file replaces a symlink
+ file_identifier_hash: 'DEF1',
+ a_mode: '0',
+ b_mode: '0755',
+ },
+ {
+ blob: {
+ id: 'C0473473',
+ },
+ file_hash: 'DEF', // This symlink is replaced by a file
+ file_identifier_hash: 'DEF2',
+ a_mode: '120000',
+ b_mode: '0',
+ },
+ {
+ blob: {
+ id: 'C0473474',
+ },
+ file_hash: 'GHI', // This symlink replaces a file
+ file_identifier_hash: 'GHI1',
+ a_mode: '0',
+ b_mode: '120000',
+ },
+ {
+ blob: {
+ id: 'C0473475',
+ },
+ file_hash: 'GHI', // This file is replaced by a symlink
+ file_identifier_hash: 'GHI2',
+ 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', () => {
+ let files;
+
+ beforeEach(() => {
+ files = getDiffFiles();
+ });
+
+ 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: files[fileIndex],
+ allFiles: files,
+ });
+
+ expect(preppedRaw.brokenSymlink).toStrictEqual(brokenSymlink);
+ },
+ );
+
+ it.each`
+ fileIndex | id
+ ${0} | ${'8dcd585e-a421-4dab-a04e-6f88c81b7b4c'}
+ ${1} | ${'3f178b78-392b-44a4-bd7d-5d6192208a97'}
+ ${2} | ${'3d9e1354-cddf-4a11-8234-f0413521b2e5'}
+ ${3} | ${'460f005b-d29d-43c1-9a08-099a7c7f08de'}
+ ${4} | ${'d8c89733-6ce1-4455-ae3d-f8aad6ee99f9'}
+ `('sets the file id properly { id: $id } on normal diff files', ({ fileIndex, id }) => {
+ const preppedFile = prepareRawDiffFile({
+ file: files[fileIndex],
+ allFiles: files,
+ });
+
+ expect(preppedFile.id).toBe(id);
+ });
+
+ it('does not set the `id` property for metadata diff files', () => {
+ const preppedFile = prepareRawDiffFile({
+ file: files[0],
+ allFiles: files,
+ meta: true,
+ });
+
+ expect(preppedFile).not.toHaveProp('id');
+ });
+
+ it('does not set the id property if the file is missing a `blob.id`', () => {
+ const fileMissingContentSha = { ...files[0] };
+
+ delete fileMissingContentSha.blob.id;
+
+ const preppedFile = prepareRawDiffFile({
+ file: fileMissingContentSha,
+ allFiles: files,
+ });
+
+ expect(preppedFile).not.toHaveProp('id');
+ });
+ });
+});