132 lines
3.3 KiB
JavaScript
132 lines
3.3 KiB
JavaScript
import Vue from 'vue';
|
|
import { createComponentWithStore } from 'helpers/vue_mount_component_helper';
|
|
import { createStore } from '~/ide/stores';
|
|
import ide from '~/ide/components/ide.vue';
|
|
import { file, resetStore } from '../helpers';
|
|
import { projectData } from '../mock_data';
|
|
import extendStore from '~/ide/stores/extend';
|
|
|
|
let store;
|
|
|
|
function bootstrap(projData) {
|
|
store = createStore();
|
|
|
|
extendStore(store, document.createElement('div'));
|
|
|
|
const Component = Vue.extend(ide);
|
|
|
|
store.state.currentProjectId = 'abcproject';
|
|
store.state.currentBranchId = 'master';
|
|
store.state.projects.abcproject = { ...projData };
|
|
Vue.set(store.state.trees, 'abcproject/master', {
|
|
tree: [],
|
|
loading: false,
|
|
});
|
|
|
|
return createComponentWithStore(Component, store, {
|
|
emptyStateSvgPath: 'svg',
|
|
noChangesStateSvgPath: 'svg',
|
|
committedStateSvgPath: 'svg',
|
|
});
|
|
}
|
|
|
|
describe('ide component, empty repo', () => {
|
|
let vm;
|
|
|
|
beforeEach(() => {
|
|
const emptyProjData = { ...projectData, empty_repo: true, branches: {} };
|
|
vm = bootstrap(emptyProjData);
|
|
vm.$mount();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vm.$destroy();
|
|
|
|
resetStore(vm.$store);
|
|
});
|
|
|
|
it('renders "New file" button in empty repo', done => {
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelector('.ide-empty-state button[title="New file"]')).not.toBeNull();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('ide component, non-empty repo', () => {
|
|
let vm;
|
|
|
|
beforeEach(() => {
|
|
vm = bootstrap(projectData);
|
|
vm.$mount();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vm.$destroy();
|
|
|
|
resetStore(vm.$store);
|
|
});
|
|
|
|
it('shows error message when set', done => {
|
|
expect(vm.$el.querySelector('.gl-alert')).toBe(null);
|
|
|
|
vm.$store.state.errorMessage = {
|
|
text: 'error',
|
|
};
|
|
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelector('.gl-alert')).not.toBe(null);
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('onBeforeUnload', () => {
|
|
it('returns undefined when no staged files or changed files', () => {
|
|
expect(vm.onBeforeUnload()).toBe(undefined);
|
|
});
|
|
|
|
it('returns warning text when their are changed files', () => {
|
|
vm.$store.state.changedFiles.push(file());
|
|
|
|
expect(vm.onBeforeUnload()).toBe('Are you sure you want to lose unsaved changes?');
|
|
});
|
|
|
|
it('returns warning text when their are staged files', () => {
|
|
vm.$store.state.stagedFiles.push(file());
|
|
|
|
expect(vm.onBeforeUnload()).toBe('Are you sure you want to lose unsaved changes?');
|
|
});
|
|
|
|
it('updates event object', () => {
|
|
const event = {};
|
|
vm.$store.state.stagedFiles.push(file());
|
|
|
|
vm.onBeforeUnload(event);
|
|
|
|
expect(event.returnValue).toBe('Are you sure you want to lose unsaved changes?');
|
|
});
|
|
});
|
|
|
|
describe('non-existent branch', () => {
|
|
it('does not render "New file" button for non-existent branch when repo is not empty', done => {
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelector('.ide-empty-state button[title="New file"]')).toBeNull();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('branch with files', () => {
|
|
beforeEach(() => {
|
|
store.state.trees['abcproject/master'].tree = [file()];
|
|
});
|
|
|
|
it('does not render "New file" button', done => {
|
|
vm.$nextTick(() => {
|
|
expect(vm.$el.querySelector('.ide-empty-state button[title="New file"]')).toBeNull();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|