debian-mirror-gitlab/spec/javascripts/ide/components/repo_commit_section_spec.js

179 lines
4.7 KiB
JavaScript
Raw Normal View History

2018-05-09 12:01:36 +05:30
import Vue from 'vue';
import store from '~/ide/stores';
2018-10-15 14:42:47 +05:30
import router from '~/ide/ide_router';
2018-05-09 12:01:36 +05:30
import repoCommitSection from '~/ide/components/repo_commit_section.vue';
import { createComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
import { file, resetStore } from '../helpers';
describe('RepoCommitSection', () => {
let vm;
function createComponent() {
const Component = Vue.extend(repoCommitSection);
2018-10-15 14:42:47 +05:30
store.state.noChangesStateSvgPath = 'svg';
store.state.committedStateSvgPath = 'commitsvg';
vm = createComponentWithStore(Component, store);
2018-05-09 12:01:36 +05:30
vm.$store.state.currentProjectId = 'abcproject';
vm.$store.state.currentBranchId = 'master';
vm.$store.state.projects.abcproject = {
web_url: '',
branches: {
master: {
workingReference: '1',
},
},
};
2018-10-15 14:42:47 +05:30
const files = [file('file1'), file('file2')].map(f =>
Object.assign(f, {
type: 'blob',
}),
);
2018-05-09 12:01:36 +05:30
vm.$store.state.rightPanelCollapsed = false;
vm.$store.state.currentBranch = 'master';
2018-10-15 14:42:47 +05:30
vm.$store.state.changedFiles = [...files];
2018-05-09 12:01:36 +05:30
vm.$store.state.changedFiles.forEach(f =>
2018-10-15 14:42:47 +05:30
Object.assign(f, {
changed: true,
content: 'changedFile testing',
}),
);
vm.$store.state.stagedFiles = [{ ...files[0] }, { ...files[1] }];
vm.$store.state.stagedFiles.forEach(f =>
2018-05-09 12:01:36 +05:30
Object.assign(f, {
changed: true,
content: 'testing',
}),
);
2018-10-15 14:42:47 +05:30
vm.$store.state.changedFiles.forEach(f => {
vm.$store.state.entries[f.path] = f;
});
2018-11-08 19:23:39 +05:30
return vm;
2018-05-09 12:01:36 +05:30
}
beforeEach(done => {
2018-10-15 14:42:47 +05:30
spyOn(router, 'push');
2018-05-09 12:01:36 +05:30
vm = createComponent();
2018-11-08 19:23:39 +05:30
spyOn(vm, 'openPendingTab').and.callThrough();
vm.$mount();
2018-05-09 12:01:36 +05:30
Vue.nextTick(done);
});
afterEach(() => {
vm.$destroy();
resetStore(vm.$store);
});
describe('empty Stage', () => {
it('renders no changes text', () => {
resetStore(vm.$store);
const Component = Vue.extend(repoCommitSection);
2018-10-15 14:42:47 +05:30
store.state.noChangesStateSvgPath = 'nochangessvg';
store.state.committedStateSvgPath = 'svg';
2018-05-09 12:01:36 +05:30
2018-11-08 19:23:39 +05:30
vm.$destroy();
2018-10-15 14:42:47 +05:30
vm = createComponentWithStore(Component, store).$mount();
expect(vm.$el.querySelector('.js-empty-state').textContent.trim()).toContain('No changes');
expect(vm.$el.querySelector('.js-empty-state img').getAttribute('src')).toBe('nochangessvg');
2018-05-09 12:01:36 +05:30
});
});
it('renders a commit section', () => {
2018-11-08 19:23:39 +05:30
const changedFileElements = [...vm.$el.querySelectorAll('.multi-file-commit-list > li')];
2018-10-15 14:42:47 +05:30
const allFiles = vm.$store.state.changedFiles.concat(vm.$store.state.stagedFiles);
2018-05-09 12:01:36 +05:30
2018-10-15 14:42:47 +05:30
expect(changedFileElements.length).toEqual(4);
2018-05-09 12:01:36 +05:30
changedFileElements.forEach((changedFile, i) => {
2018-10-15 14:42:47 +05:30
expect(changedFile.textContent.trim()).toContain(allFiles[i].path);
2018-05-09 12:01:36 +05:30
});
});
2018-10-15 14:42:47 +05:30
it('adds changed files into staged files', done => {
vm.$el.querySelector('.multi-file-discard-btn .btn').click();
vm
.$nextTick()
.then(() => vm.$el.querySelector('.multi-file-discard-btn .btn').click())
.then(vm.$nextTick)
2018-05-09 12:01:36 +05:30
.then(() => {
2018-10-15 14:42:47 +05:30
expect(vm.$el.querySelector('.ide-commit-list-container').textContent).toContain(
'No changes',
2018-05-09 12:01:36 +05:30
);
})
.then(done)
.catch(done.fail);
});
2018-10-15 14:42:47 +05:30
it('stages a single file', done => {
vm.$el.querySelector('.multi-file-discard-btn .btn').click();
Vue.nextTick(() => {
2018-11-08 19:23:39 +05:30
expect(
vm.$el
.querySelector('.ide-commit-list-container')
.querySelectorAll('.multi-file-commit-list > li').length,
).toBe(1);
2018-10-15 14:42:47 +05:30
done();
2018-05-09 12:01:36 +05:30
});
2018-10-15 14:42:47 +05:30
});
it('discards a single file', done => {
2018-11-08 19:23:39 +05:30
vm.$el.querySelector('.multi-file-discard-btn .dropdown-menu button').click();
2018-10-15 14:42:47 +05:30
Vue.nextTick(() => {
expect(vm.$el.querySelector('.ide-commit-list-container').textContent).not.toContain('file1');
2018-11-08 19:23:39 +05:30
expect(
vm.$el
.querySelector('.ide-commit-list-container')
.querySelectorAll('.multi-file-commit-list > li').length,
).toBe(1);
2018-05-09 12:01:36 +05:30
2018-10-15 14:42:47 +05:30
done();
2018-05-09 12:01:36 +05:30
});
});
2018-10-15 14:42:47 +05:30
it('unstages a single file', done => {
vm.$el
.querySelectorAll('.multi-file-discard-btn')[2]
.querySelector('.btn')
.click();
Vue.nextTick(() => {
expect(
vm.$el.querySelectorAll('.ide-commit-list-container')[1].querySelectorAll('li').length,
).toBe(1);
done();
2018-05-09 12:01:36 +05:30
});
2018-10-15 14:42:47 +05:30
});
2018-05-09 12:01:36 +05:30
2018-10-15 14:42:47 +05:30
describe('mounted', () => {
it('opens last opened file', () => {
expect(store.state.openFiles.length).toBe(1);
expect(store.state.openFiles[0].pending).toBe(true);
2018-05-09 12:01:36 +05:30
});
2018-11-08 19:23:39 +05:30
it('calls openPendingTab', () => {
expect(vm.openPendingTab).toHaveBeenCalledWith({
file: vm.lastOpenedFile,
keyPrefix: 'unstaged',
});
});
2018-05-09 12:01:36 +05:30
});
});