debian-mirror-gitlab/spec/frontend/ide/components/commit_sidebar/form_spec.js

294 lines
8.4 KiB
JavaScript
Raw Normal View History

2018-10-15 14:42:47 +05:30
import Vue from 'vue';
2020-04-22 19:07:51 +05:30
import { createComponentWithStore } from 'helpers/vue_mount_component_helper';
import { projectData } from 'jest/ide/mock_data';
2020-01-01 13:55:28 +05:30
import store from '~/ide/stores';
import CommitForm from '~/ide/components/commit_sidebar/form.vue';
2020-03-13 15:44:24 +05:30
import { leftSidebarViews } from '~/ide/constants';
2018-10-15 14:42:47 +05:30
import { resetStore } from '../../helpers';
2020-06-23 00:09:42 +05:30
import waitForPromises from 'helpers/wait_for_promises';
2018-10-15 14:42:47 +05:30
describe('IDE commit form', () => {
const Component = Vue.extend(CommitForm);
let vm;
2020-06-23 00:09:42 +05:30
const beginCommitButton = () => vm.$el.querySelector('[data-testid="begin-commit-button"]');
2018-10-15 14:42:47 +05:30
beforeEach(() => {
store.state.changedFiles.push('test');
2018-11-08 19:23:39 +05:30
store.state.currentProjectId = 'abcproject';
store.state.currentBranchId = 'master';
Vue.set(store.state.projects, 'abcproject', { ...projectData });
2018-10-15 14:42:47 +05:30
vm = createComponentWithStore(Component, store).$mount();
});
afterEach(() => {
vm.$destroy();
resetStore(vm.$store);
});
2020-06-23 00:09:42 +05:30
it('enables begin commit button when there are changes', () => {
expect(beginCommitButton()).not.toHaveAttr('disabled');
});
it('disables begin commit button when there are no changes', async () => {
store.state.changedFiles = [];
await vm.$nextTick();
expect(beginCommitButton()).toHaveAttr('disabled');
2018-10-15 14:42:47 +05:30
});
describe('compact', () => {
2020-05-24 23:13:21 +05:30
beforeEach(() => {
2020-03-13 15:44:24 +05:30
vm.isCompact = true;
2020-05-24 23:13:21 +05:30
return vm.$nextTick();
2020-03-13 15:44:24 +05:30
});
2018-10-15 14:42:47 +05:30
it('renders commit button in compact mode', () => {
2020-06-23 00:09:42 +05:30
expect(beginCommitButton()).not.toBeNull();
expect(beginCommitButton().textContent).toContain('Commit');
2018-10-15 14:42:47 +05:30
});
it('does not render form', () => {
expect(vm.$el.querySelector('form')).toBeNull();
});
2020-05-24 23:13:21 +05:30
it('renders overview text', () => {
2018-10-15 14:42:47 +05:30
vm.$store.state.stagedFiles.push('test');
2020-05-24 23:13:21 +05:30
return vm.$nextTick(() => {
2020-04-08 14:13:33 +05:30
expect(vm.$el.querySelector('p').textContent).toContain('1 changed file');
2018-10-15 14:42:47 +05:30
});
});
2020-05-24 23:13:21 +05:30
it('shows form when clicking commit button', () => {
2020-06-23 00:09:42 +05:30
beginCommitButton().click();
2018-10-15 14:42:47 +05:30
2020-05-24 23:13:21 +05:30
return vm.$nextTick(() => {
2018-10-15 14:42:47 +05:30
expect(vm.$el.querySelector('form')).not.toBeNull();
});
});
2020-05-24 23:13:21 +05:30
it('toggles activity bar view when clicking commit button', () => {
2020-06-23 00:09:42 +05:30
beginCommitButton().click();
2018-10-15 14:42:47 +05:30
2020-05-24 23:13:21 +05:30
return vm.$nextTick(() => {
2020-03-13 15:44:24 +05:30
expect(store.state.currentActivityView).toBe(leftSidebarViews.commit.name);
2018-10-15 14:42:47 +05:30
});
});
2020-03-13 15:44:24 +05:30
2020-06-23 00:09:42 +05:30
it('collapses if lastCommitMsg is set to empty and current view is not commit view', async () => {
2020-03-13 15:44:24 +05:30
store.state.lastCommitMsg = 'abc';
store.state.currentActivityView = leftSidebarViews.edit.name;
2020-06-23 00:09:42 +05:30
await vm.$nextTick();
// if commit message is set, form is uncollapsed
expect(vm.isCompact).toBe(false);
store.state.lastCommitMsg = '';
await vm.$nextTick();
// collapsed when set to empty
expect(vm.isCompact).toBe(true);
});
it('collapses if in commit view but there are no changes and vice versa', async () => {
store.state.currentActivityView = leftSidebarViews.commit.name;
await vm.$nextTick();
// expanded by default if there are changes
expect(vm.isCompact).toBe(false);
store.state.changedFiles = [];
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
store.state.changedFiles.push('test');
await vm.$nextTick();
// uncollapsed once again
expect(vm.isCompact).toBe(false);
});
it('collapses if switched from commit view to edit view and vice versa', async () => {
store.state.currentActivityView = leftSidebarViews.edit.name;
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
store.state.currentActivityView = leftSidebarViews.commit.name;
await vm.$nextTick();
expect(vm.isCompact).toBe(false);
store.state.currentActivityView = leftSidebarViews.edit.name;
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
});
describe('when window height is less than MAX_WINDOW_HEIGHT', () => {
let oldHeight;
2020-03-13 15:44:24 +05:30
2020-06-23 00:09:42 +05:30
beforeEach(() => {
oldHeight = window.innerHeight;
window.innerHeight = 700;
});
afterEach(() => {
window.innerHeight = oldHeight;
});
it('stays collapsed when switching from edit view to commit view and back', async () => {
store.state.currentActivityView = leftSidebarViews.edit.name;
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
store.state.currentActivityView = leftSidebarViews.commit.name;
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
store.state.currentActivityView = leftSidebarViews.edit.name;
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
});
2020-03-13 15:44:24 +05:30
2020-06-23 00:09:42 +05:30
it('stays uncollapsed if changes are added or removed', async () => {
store.state.currentActivityView = leftSidebarViews.commit.name;
await vm.$nextTick();
2020-03-13 15:44:24 +05:30
2020-06-23 00:09:42 +05:30
expect(vm.isCompact).toBe(true);
store.state.changedFiles = [];
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
store.state.changedFiles.push('test');
await vm.$nextTick();
expect(vm.isCompact).toBe(true);
});
it('uncollapses when clicked on Commit button in the edit view', async () => {
store.state.currentActivityView = leftSidebarViews.edit.name;
beginCommitButton().click();
await waitForPromises();
expect(vm.isCompact).toBe(false);
});
2020-03-13 15:44:24 +05:30
});
2018-10-15 14:42:47 +05:30
});
describe('full', () => {
2020-05-24 23:13:21 +05:30
beforeEach(() => {
2018-10-15 14:42:47 +05:30
vm.isCompact = false;
2020-05-24 23:13:21 +05:30
return vm.$nextTick();
2018-10-15 14:42:47 +05:30
});
2020-05-24 23:13:21 +05:30
it('updates commitMessage in store on input', () => {
2018-10-15 14:42:47 +05:30
const textarea = vm.$el.querySelector('textarea');
textarea.value = 'testing commit message';
textarea.dispatchEvent(new Event('input'));
2020-05-24 23:13:21 +05:30
return vm.$nextTick().then(() => {
expect(vm.$store.state.commit.commitMessage).toBe('testing commit message');
});
2018-10-15 14:42:47 +05:30
});
2020-05-24 23:13:21 +05:30
it('updating currentActivityView not to commit view sets compact mode', () => {
2018-10-15 14:42:47 +05:30
store.state.currentActivityView = 'a';
2020-05-24 23:13:21 +05:30
return vm.$nextTick(() => {
2018-10-15 14:42:47 +05:30
expect(vm.isCompact).toBe(true);
});
});
2020-05-24 23:13:21 +05:30
it('always opens itself in full view current activity view is not commit view when clicking commit button', () => {
2020-06-23 00:09:42 +05:30
beginCommitButton().click();
2020-03-13 15:44:24 +05:30
2020-05-24 23:13:21 +05:30
return vm.$nextTick(() => {
2020-03-13 15:44:24 +05:30
expect(store.state.currentActivityView).toBe(leftSidebarViews.commit.name);
expect(vm.isCompact).toBe(false);
});
});
2018-10-15 14:42:47 +05:30
describe('discard draft button', () => {
it('hidden when commitMessage is empty', () => {
expect(vm.$el.querySelector('.btn-default').textContent).toContain('Collapse');
});
2020-05-24 23:13:21 +05:30
it('resets commitMessage when clicking discard button', () => {
2018-10-15 14:42:47 +05:30
vm.$store.state.commit.commitMessage = 'testing commit message';
2020-05-24 23:13:21 +05:30
return vm
.$nextTick()
2018-10-15 14:42:47 +05:30
.then(() => {
vm.$el.querySelector('.btn-default').click();
})
2020-05-24 23:13:21 +05:30
.then(() => vm.$nextTick())
2018-10-15 14:42:47 +05:30
.then(() => {
expect(vm.$store.state.commit.commitMessage).not.toBe('testing commit message');
2020-05-24 23:13:21 +05:30
});
2018-10-15 14:42:47 +05:30
});
});
describe('when submitting', () => {
beforeEach(() => {
2020-05-24 23:13:21 +05:30
jest.spyOn(vm, 'commitChanges');
2018-10-15 14:42:47 +05:30
vm.$store.state.stagedFiles.push('test');
2020-05-24 23:13:21 +05:30
vm.$store.state.commit.commitMessage = 'testing commit message';
2018-10-15 14:42:47 +05:30
});
2020-05-24 23:13:21 +05:30
it('calls commitChanges', () => {
vm.commitChanges.mockResolvedValue({ success: true });
return vm.$nextTick().then(() => {
vm.$el.querySelector('.btn-success').click();
expect(vm.commitChanges).toHaveBeenCalled();
});
});
it('opens new branch modal if commitChanges throws an error', () => {
vm.commitChanges.mockRejectedValue({ success: false });
2018-10-15 14:42:47 +05:30
2020-05-24 23:13:21 +05:30
jest.spyOn(vm.$refs.createBranchModal, 'show').mockImplementation();
return vm
.$nextTick()
2018-10-15 14:42:47 +05:30
.then(() => {
vm.$el.querySelector('.btn-success').click();
2020-05-24 23:13:21 +05:30
return vm.$nextTick();
2018-10-15 14:42:47 +05:30
})
.then(() => {
2020-05-24 23:13:21 +05:30
expect(vm.$refs.createBranchModal.show).toHaveBeenCalled();
});
2018-10-15 14:42:47 +05:30
});
});
});
2018-11-08 19:23:39 +05:30
describe('commitButtonText', () => {
it('returns commit text when staged files exist', () => {
vm.$store.state.stagedFiles.push('testing');
expect(vm.commitButtonText).toBe('Commit');
});
it('returns stage & commit text when staged files do not exist', () => {
expect(vm.commitButtonText).toBe('Stage & Commit');
});
});
2018-10-15 14:42:47 +05:30
});