2018-07-06 08:13:33 -04:00
|
|
|
import * as getters from '~/diffs/store/getters';
|
|
|
|
import state from '~/diffs/store/modules/diff_state';
|
2018-06-21 08:22:40 -04:00
|
|
|
import { PARALLEL_DIFF_VIEW_TYPE, INLINE_DIFF_VIEW_TYPE } from '~/diffs/constants';
|
2018-07-10 07:05:06 -04:00
|
|
|
import discussion from '../mock_data/diff_discussions';
|
2018-06-21 08:22:40 -04:00
|
|
|
|
2018-07-10 07:05:06 -04:00
|
|
|
describe('Diffs Module Getters', () => {
|
2018-07-06 08:13:33 -04:00
|
|
|
let localState;
|
2018-07-11 07:43:51 -04:00
|
|
|
let discussionMock;
|
|
|
|
let discussionMock1;
|
|
|
|
|
|
|
|
const diffFileMock = {
|
|
|
|
fileHash: '9732849daca6ae818696d9575f5d1207d1a7f8bb',
|
|
|
|
};
|
2018-07-06 08:13:33 -04:00
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
localState = state();
|
2020-05-07 17:09:26 -04:00
|
|
|
discussionMock = { ...discussion };
|
2018-07-11 07:43:51 -04:00
|
|
|
discussionMock.diff_file.file_hash = diffFileMock.fileHash;
|
|
|
|
|
2020-05-07 17:09:26 -04:00
|
|
|
discussionMock1 = { ...discussion };
|
2018-07-11 07:43:51 -04:00
|
|
|
discussionMock1.diff_file.file_hash = diffFileMock.fileHash;
|
2018-07-06 08:13:33 -04:00
|
|
|
});
|
|
|
|
|
2018-06-21 08:22:40 -04:00
|
|
|
describe('isParallelView', () => {
|
|
|
|
it('should return true if view set to parallel view', () => {
|
2018-07-06 08:13:33 -04:00
|
|
|
localState.diffViewType = PARALLEL_DIFF_VIEW_TYPE;
|
|
|
|
|
|
|
|
expect(getters.isParallelView(localState)).toEqual(true);
|
2018-06-21 08:22:40 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should return false if view not to parallel view', () => {
|
2018-07-06 08:13:33 -04:00
|
|
|
localState.diffViewType = INLINE_DIFF_VIEW_TYPE;
|
|
|
|
|
|
|
|
expect(getters.isParallelView(localState)).toEqual(false);
|
2018-06-21 08:22:40 -04:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('isInlineView', () => {
|
|
|
|
it('should return true if view set to inline view', () => {
|
2018-07-06 08:13:33 -04:00
|
|
|
localState.diffViewType = INLINE_DIFF_VIEW_TYPE;
|
|
|
|
|
|
|
|
expect(getters.isInlineView(localState)).toEqual(true);
|
2018-06-21 08:22:40 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should return false if view not to inline view', () => {
|
2018-07-06 08:13:33 -04:00
|
|
|
localState.diffViewType = PARALLEL_DIFF_VIEW_TYPE;
|
|
|
|
|
|
|
|
expect(getters.isInlineView(localState)).toEqual(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-11-07 08:03:13 -05:00
|
|
|
describe('hasCollapsedFile', () => {
|
2018-07-06 08:13:33 -04:00
|
|
|
it('returns true when all files are collapsed', () => {
|
2019-02-15 12:56:50 -05:00
|
|
|
localState.diffFiles = [{ viewer: { collapsed: true } }, { viewer: { collapsed: true } }];
|
2018-10-09 14:03:09 -04:00
|
|
|
|
2018-11-07 08:03:13 -05:00
|
|
|
expect(getters.hasCollapsedFile(localState)).toEqual(true);
|
2018-07-06 08:13:33 -04:00
|
|
|
});
|
|
|
|
|
2018-11-07 08:03:13 -05:00
|
|
|
it('returns true when at least one file is collapsed', () => {
|
2019-02-15 12:56:50 -05:00
|
|
|
localState.diffFiles = [{ viewer: { collapsed: false } }, { viewer: { collapsed: true } }];
|
2018-10-09 14:03:09 -04:00
|
|
|
|
2018-11-07 08:03:13 -05:00
|
|
|
expect(getters.hasCollapsedFile(localState)).toEqual(true);
|
2018-07-06 08:13:33 -04:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('commitId', () => {
|
|
|
|
it('returns commit id when is set', () => {
|
|
|
|
const commitID = '800f7a91';
|
|
|
|
localState.commit = {
|
|
|
|
id: commitID,
|
|
|
|
};
|
|
|
|
|
|
|
|
expect(getters.commitId(localState)).toEqual(commitID);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns null when no commit is set', () => {
|
|
|
|
expect(getters.commitId(localState)).toEqual(null);
|
2018-06-21 08:22:40 -04:00
|
|
|
});
|
|
|
|
});
|
2018-07-10 07:05:06 -04:00
|
|
|
|
|
|
|
describe('diffHasAllExpandedDiscussions', () => {
|
|
|
|
it('returns true when all discussions are expanded', () => {
|
|
|
|
expect(
|
|
|
|
getters.diffHasAllExpandedDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [discussionMock, discussionMock],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when there are no discussions', () => {
|
|
|
|
expect(
|
|
|
|
getters.diffHasAllExpandedDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when one discussions is collapsed', () => {
|
|
|
|
discussionMock1.expanded = false;
|
|
|
|
|
|
|
|
expect(
|
|
|
|
getters.diffHasAllExpandedDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [discussionMock, discussionMock1],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-11-15 11:14:16 -05:00
|
|
|
describe('diffHasAllCollapsedDiscussions', () => {
|
2018-07-10 07:05:06 -04:00
|
|
|
it('returns true when all discussions are collapsed', () => {
|
|
|
|
discussionMock.diff_file.file_hash = diffFileMock.fileHash;
|
|
|
|
discussionMock.expanded = false;
|
|
|
|
|
|
|
|
expect(
|
2018-11-15 11:14:16 -05:00
|
|
|
getters.diffHasAllCollapsedDiscussions(localState, {
|
2018-07-10 07:05:06 -04:00
|
|
|
getDiffFileDiscussions: () => [discussionMock],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when there are no discussions', () => {
|
|
|
|
expect(
|
2018-11-15 11:14:16 -05:00
|
|
|
getters.diffHasAllCollapsedDiscussions(localState, {
|
2018-07-10 07:05:06 -04:00
|
|
|
getDiffFileDiscussions: () => [],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when one discussions is expanded', () => {
|
|
|
|
discussionMock1.expanded = false;
|
|
|
|
|
|
|
|
expect(
|
2018-11-15 11:14:16 -05:00
|
|
|
getters.diffHasAllCollapsedDiscussions(localState, {
|
2018-07-10 07:05:06 -04:00
|
|
|
getDiffFileDiscussions: () => [discussionMock, discussionMock1],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('diffHasExpandedDiscussions', () => {
|
|
|
|
it('returns true when one of the discussions is expanded', () => {
|
|
|
|
discussionMock1.expanded = false;
|
|
|
|
|
|
|
|
expect(
|
|
|
|
getters.diffHasExpandedDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [discussionMock, discussionMock],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when there are no discussions', () => {
|
|
|
|
expect(
|
|
|
|
getters.diffHasExpandedDiscussions(localState, { getDiffFileDiscussions: () => [] })(
|
|
|
|
diffFileMock,
|
|
|
|
),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when no discussion is expanded', () => {
|
|
|
|
discussionMock.expanded = false;
|
|
|
|
discussionMock1.expanded = false;
|
|
|
|
|
|
|
|
expect(
|
|
|
|
getters.diffHasExpandedDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [discussionMock, discussionMock1],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-07-17 07:54:33 -04:00
|
|
|
describe('diffHasDiscussions', () => {
|
|
|
|
it('returns true when getDiffFileDiscussions returns discussions', () => {
|
|
|
|
expect(
|
|
|
|
getters.diffHasDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [discussionMock],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns false when getDiffFileDiscussions returns no discussions', () => {
|
|
|
|
expect(
|
|
|
|
getters.diffHasDiscussions(localState, {
|
|
|
|
getDiffFileDiscussions: () => [],
|
|
|
|
})(diffFileMock),
|
|
|
|
).toEqual(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-07-11 07:43:51 -04:00
|
|
|
describe('getDiffFileDiscussions', () => {
|
|
|
|
it('returns an array with discussions when fileHash matches and the discussion belongs to a diff', () => {
|
2018-11-09 14:48:41 -05:00
|
|
|
discussionMock.diff_file.file_hash = diffFileMock.file_hash;
|
2018-07-11 07:43:51 -04:00
|
|
|
|
|
|
|
expect(
|
|
|
|
getters.getDiffFileDiscussions(localState, {}, {}, { discussions: [discussionMock] })(
|
|
|
|
diffFileMock,
|
|
|
|
).length,
|
|
|
|
).toEqual(1);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns an empty array when no discussions are found in the given diff', () => {
|
|
|
|
expect(
|
|
|
|
getters.getDiffFileDiscussions(localState, {}, {}, { discussions: [] })(diffFileMock)
|
|
|
|
.length,
|
|
|
|
).toEqual(0);
|
|
|
|
});
|
|
|
|
});
|
2018-07-17 11:47:02 -04:00
|
|
|
|
|
|
|
describe('getDiffFileByHash', () => {
|
|
|
|
it('returns file by hash', () => {
|
|
|
|
const fileA = {
|
2018-11-09 14:48:41 -05:00
|
|
|
file_hash: '123',
|
2018-07-17 11:47:02 -04:00
|
|
|
};
|
|
|
|
const fileB = {
|
2018-11-09 14:48:41 -05:00
|
|
|
file_hash: '456',
|
2018-07-17 11:47:02 -04:00
|
|
|
};
|
|
|
|
localState.diffFiles = [fileA, fileB];
|
|
|
|
|
|
|
|
expect(getters.getDiffFileByHash(localState)('456')).toEqual(fileB);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns null if no matching file is found', () => {
|
|
|
|
localState.diffFiles = [];
|
2018-10-09 14:03:09 -04:00
|
|
|
|
2018-07-17 11:47:02 -04:00
|
|
|
expect(getters.getDiffFileByHash(localState)('123')).toBeUndefined();
|
|
|
|
});
|
|
|
|
});
|
2018-10-03 05:05:43 -04:00
|
|
|
|
|
|
|
describe('allBlobs', () => {
|
|
|
|
it('returns an array of blobs', () => {
|
|
|
|
localState.treeEntries = {
|
|
|
|
file: {
|
|
|
|
type: 'blob',
|
2019-01-08 04:31:23 -05:00
|
|
|
path: 'file',
|
|
|
|
parentPath: '/',
|
|
|
|
tree: [],
|
2018-10-03 05:05:43 -04:00
|
|
|
},
|
|
|
|
tree: {
|
|
|
|
type: 'tree',
|
2019-01-08 04:31:23 -05:00
|
|
|
path: 'tree',
|
|
|
|
parentPath: '/',
|
|
|
|
tree: [],
|
2018-10-03 05:05:43 -04:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2019-01-16 10:17:10 -05:00
|
|
|
expect(
|
|
|
|
getters.allBlobs(localState, {
|
|
|
|
flatBlobsList: getters.flatBlobsList(localState),
|
|
|
|
}),
|
|
|
|
).toEqual([
|
2018-10-03 05:05:43 -04:00
|
|
|
{
|
2019-01-08 04:31:23 -05:00
|
|
|
isHeader: true,
|
|
|
|
path: '/',
|
|
|
|
tree: [
|
|
|
|
{
|
|
|
|
parentPath: '/',
|
|
|
|
path: 'file',
|
|
|
|
tree: [],
|
|
|
|
type: 'blob',
|
|
|
|
},
|
|
|
|
],
|
2018-10-03 05:05:43 -04:00
|
|
|
},
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2019-02-27 04:12:13 -05:00
|
|
|
describe('currentDiffIndex', () => {
|
|
|
|
it('returns index of currently selected diff in diffList', () => {
|
|
|
|
localState.diffFiles = [{ file_hash: '111' }, { file_hash: '222' }, { file_hash: '333' }];
|
|
|
|
localState.currentDiffFileId = '222';
|
|
|
|
|
|
|
|
expect(getters.currentDiffIndex(localState)).toEqual(1);
|
|
|
|
|
|
|
|
localState.currentDiffFileId = '333';
|
|
|
|
|
|
|
|
expect(getters.currentDiffIndex(localState)).toEqual(2);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns 0 if no diff is selected yet or diff is not found', () => {
|
|
|
|
localState.diffFiles = [{ file_hash: '111' }, { file_hash: '222' }, { file_hash: '333' }];
|
|
|
|
localState.currentDiffFileId = '';
|
|
|
|
|
|
|
|
expect(getters.currentDiffIndex(localState)).toEqual(0);
|
|
|
|
});
|
|
|
|
});
|
2020-03-17 14:09:44 -04:00
|
|
|
|
|
|
|
describe('fileLineCoverage', () => {
|
|
|
|
beforeEach(() => {
|
|
|
|
Object.assign(localState.coverageFiles, { files: { 'app.js': { '1': 0, '2': 5 } } });
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns empty object when no coverage data is available', () => {
|
|
|
|
Object.assign(localState.coverageFiles, {});
|
|
|
|
|
|
|
|
expect(getters.fileLineCoverage(localState)('test.js', 2)).toEqual({});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns empty object when unknown filename is passed', () => {
|
|
|
|
expect(getters.fileLineCoverage(localState)('test.js', 2)).toEqual({});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns no-coverage info when correct filename and line is passed', () => {
|
|
|
|
expect(getters.fileLineCoverage(localState)('app.js', 1)).toEqual({
|
|
|
|
text: 'No test coverage',
|
|
|
|
class: 'no-coverage',
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns coverage info when correct filename and line is passed', () => {
|
|
|
|
expect(getters.fileLineCoverage(localState)('app.js', 2)).toEqual({
|
|
|
|
text: 'Test coverage: 5 hits',
|
|
|
|
class: 'coverage',
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2018-06-21 08:22:40 -04:00
|
|
|
});
|