gitlab-org--gitlab-foss/spec/frontend/merge_conflicts/store/getters_spec.js

188 lines
5.7 KiB
JavaScript

import {
CONFLICT_TYPES,
EDIT_RESOLVE_MODE,
INTERACTIVE_RESOLVE_MODE,
} from '~/merge_conflicts/constants';
import * as getters from '~/merge_conflicts/store/getters';
import realState from '~/merge_conflicts/store/state';
describe('Merge Conflicts getters', () => {
let state;
beforeEach(() => {
state = realState();
});
describe('getConflictsCount', () => {
it('returns zero when there are no files', () => {
state.conflictsData.files = [];
expect(getters.getConflictsCount(state)).toBe(0);
});
it(`counts the number of sections in files of type ${CONFLICT_TYPES.TEXT}`, () => {
state.conflictsData.files = [
{ sections: [{ conflict: true }], type: CONFLICT_TYPES.TEXT },
{ sections: [{ conflict: true }, { conflict: true }], type: CONFLICT_TYPES.TEXT },
];
expect(getters.getConflictsCount(state)).toBe(3);
});
it(`counts the number of file in files not of type ${CONFLICT_TYPES.TEXT}`, () => {
state.conflictsData.files = [
{ sections: [{ conflict: true }], type: '' },
{ sections: [{ conflict: true }, { conflict: true }], type: '' },
];
expect(getters.getConflictsCount(state)).toBe(2);
});
});
describe('getConflictsCountText', () => {
it('with one conflicts', () => {
const getConflictsCount = 1;
expect(getters.getConflictsCountText(state, { getConflictsCount })).toBe('1 conflict');
});
it('with more than one conflicts', () => {
const getConflictsCount = 3;
expect(getters.getConflictsCountText(state, { getConflictsCount })).toBe('3 conflicts');
});
});
describe('isReadyToCommit', () => {
it('return false when isSubmitting is true', () => {
state.conflictsData.files = [];
state.isSubmitting = true;
state.conflictsData.commitMessage = 'foo';
expect(getters.isReadyToCommit(state)).toBe(false);
});
it('returns false when has no commit message', () => {
state.conflictsData.files = [];
state.isSubmitting = false;
state.conflictsData.commitMessage = '';
expect(getters.isReadyToCommit(state)).toBe(false);
});
it('returns true when all conflicts are resolved and is not submitting and we have a commitMessage', () => {
state.conflictsData.files = [
{
resolveMode: INTERACTIVE_RESOLVE_MODE,
type: CONFLICT_TYPES.TEXT,
sections: [{ conflict: true }],
resolutionData: { foo: 'bar' },
},
];
state.isSubmitting = false;
state.conflictsData.commitMessage = 'foo';
expect(getters.isReadyToCommit(state)).toBe(true);
});
describe('unresolved', () => {
it(`files with resolvedMode set to ${EDIT_RESOLVE_MODE} and empty count as unresolved`, () => {
state.conflictsData.files = [
{ content: '', resolveMode: EDIT_RESOLVE_MODE },
{ content: 'foo' },
];
state.isSubmitting = false;
state.conflictsData.commitMessage = 'foo';
expect(getters.isReadyToCommit(state)).toBe(false);
});
it(`in files with resolvedMode = ${INTERACTIVE_RESOLVE_MODE} we count resolvedConflicts vs unresolved ones`, () => {
state.conflictsData.files = [
{
resolveMode: INTERACTIVE_RESOLVE_MODE,
type: CONFLICT_TYPES.TEXT,
sections: [{ conflict: true }],
resolutionData: {},
},
];
state.isSubmitting = false;
state.conflictsData.commitMessage = 'foo';
expect(getters.isReadyToCommit(state)).toBe(false);
});
});
});
describe('getCommitButtonText', () => {
it('when is submitting', () => {
state.isSubmitting = true;
expect(getters.getCommitButtonText(state)).toBe('Committing...');
});
it('when is not submitting', () => {
expect(getters.getCommitButtonText(state)).toBe('Commit to source branch');
});
});
describe('getCommitData', () => {
it('returns commit data', () => {
const baseFile = {
new_path: 'new_path',
old_path: 'new_path',
};
state.conflictsData.commitMessage = 'foo';
state.conflictsData.files = [
{
...baseFile,
resolveMode: INTERACTIVE_RESOLVE_MODE,
type: CONFLICT_TYPES.TEXT,
sections: [{ conflict: true }],
resolutionData: { bar: 'baz' },
},
{
...baseFile,
resolveMode: EDIT_RESOLVE_MODE,
type: CONFLICT_TYPES.TEXT,
content: 'resolve_mode_content',
},
{
...baseFile,
type: CONFLICT_TYPES.TEXT_EDITOR,
content: 'text_editor_content',
},
];
expect(getters.getCommitData(state)).toStrictEqual({
commit_message: 'foo',
files: [
{ ...baseFile, sections: { bar: 'baz' } },
{ ...baseFile, content: 'resolve_mode_content' },
{ ...baseFile, content: 'text_editor_content' },
],
});
});
});
describe('fileTextTypePresent', () => {
it(`returns true if there is a file with type ${CONFLICT_TYPES.TEXT}`, () => {
state.conflictsData.files = [{ type: CONFLICT_TYPES.TEXT }];
expect(getters.fileTextTypePresent(state)).toBe(true);
});
it(`returns false if there is no file with type ${CONFLICT_TYPES.TEXT}`, () => {
state.conflictsData.files = [{ type: CONFLICT_TYPES.TEXT_EDITOR }];
expect(getters.fileTextTypePresent(state)).toBe(false);
});
});
describe('getFileIndex', () => {
it(`returns the index of a file from it's blob path`, () => {
const blobPath = 'blobPath/foo';
state.conflictsData.files = [{ foo: 'bar' }, { baz: 'foo', blobPath }];
expect(getters.getFileIndex(state)({ blobPath })).toBe(1);
});
});
});