import * as urlUtils from '~/lib/utils/url_utility'; import store from '~/ide/stores'; import router from '~/ide/ide_router'; import { resetStore, file } from '../helpers'; describe('Multi-file store actions', () => { beforeEach(() => { spyOn(router, 'push'); }); afterEach(() => { resetStore(store); }); describe('redirectToUrl', () => { it('calls visitUrl', done => { spyOn(urlUtils, 'visitUrl'); store .dispatch('redirectToUrl', 'test') .then(() => { expect(urlUtils.visitUrl).toHaveBeenCalledWith('test'); done(); }) .catch(done.fail); }); }); describe('setInitialData', () => { it('commits initial data', done => { store .dispatch('setInitialData', { canCommit: true }) .then(() => { expect(store.state.canCommit).toBeTruthy(); done(); }) .catch(done.fail); }); }); describe('discardAllChanges', () => { beforeEach(() => { const f = file('discardAll'); f.changed = true; store.state.openFiles.push(f); store.state.changedFiles.push(f); store.state.entries[f.path] = f; }); it('discards changes in file', done => { store .dispatch('discardAllChanges') .then(() => { expect(store.state.openFiles.changed).toBeFalsy(); }) .then(done) .catch(done.fail); }); it('removes all files from changedFiles state', done => { store .dispatch('discardAllChanges') .then(() => { expect(store.state.changedFiles.length).toBe(0); expect(store.state.openFiles.length).toBe(1); }) .then(done) .catch(done.fail); }); }); describe('closeAllFiles', () => { beforeEach(() => { const f = file('closeAll'); store.state.openFiles.push(f); store.state.openFiles[0].opened = true; store.state.entries[f.path] = f; }); it('closes all open files', done => { store .dispatch('closeAllFiles') .then(() => { expect(store.state.openFiles.length).toBe(0); done(); }) .catch(done.fail); }); }); describe('createTempEntry', () => { beforeEach(() => { document.body.innerHTML += '
'; store.state.currentProjectId = 'abcproject'; store.state.currentBranchId = 'mybranch'; store.state.trees['abcproject/mybranch'] = { tree: [], }; store.state.projects.abcproject = { web_url: '', }; }); afterEach(() => { document.querySelector('.flash-container').remove(); }); describe('tree', () => { it('creates temp tree', done => { store .dispatch('createTempEntry', { branchId: store.state.currentBranchId, name: 'test', type: 'tree', }) .then(() => { const entry = store.state.entries.test; expect(entry).not.toBeNull(); expect(entry.type).toBe('tree'); done(); }) .catch(done.fail); }); it('creates new folder inside another tree', done => { const tree = { type: 'tree', name: 'testing', path: 'testing', tree: [], }; store.state.entries[tree.path] = tree; store .dispatch('createTempEntry', { branchId: store.state.currentBranchId, name: 'testing/test', type: 'tree', }) .then(() => { expect(tree.tree[0].tempFile).toBeTruthy(); expect(tree.tree[0].name).toBe('test'); expect(tree.tree[0].type).toBe('tree'); done(); }) .catch(done.fail); }); it('does not create new tree if already exists', done => { const tree = { type: 'tree', path: 'testing', tempFile: false, tree: [], }; store.state.entries[tree.path] = tree; store .dispatch('createTempEntry', { branchId: store.state.currentBranchId, name: 'testing', type: 'tree', }) .then(() => { expect(store.state.entries[tree.path].tempFile).toEqual(false); expect(document.querySelector('.flash-alert')).not.toBeNull(); done(); }) .catch(done.fail); }); }); describe('blob', () => { it('creates temp file', done => { store .dispatch('createTempEntry', { name: 'test', branchId: 'mybranch', type: 'blob', }) .then(f => { expect(f.tempFile).toBeTruthy(); expect(store.state.trees['abcproject/mybranch'].tree.length).toBe( 1, ); done(); }) .catch(done.fail); }); it('adds tmp file to open files', done => { store .dispatch('createTempEntry', { name: 'test', branchId: 'mybranch', type: 'blob', }) .then(f => { expect(store.state.openFiles.length).toBe(1); expect(store.state.openFiles[0].name).toBe(f.name); done(); }) .catch(done.fail); }); it('adds tmp file to changed files', done => { store .dispatch('createTempEntry', { name: 'test', branchId: 'mybranch', type: 'blob', }) .then(f => { expect(store.state.changedFiles.length).toBe(1); expect(store.state.changedFiles[0].name).toBe(f.name); done(); }) .catch(done.fail); }); it('sets tmp file as active', done => { store .dispatch('createTempEntry', { name: 'test', branchId: 'mybranch', type: 'blob', }) .then(f => { expect(f.active).toBeTruthy(); done(); }) .catch(done.fail); }); it('creates flash message if file already exists', done => { const f = file('test', '1', 'blob'); store.state.trees['abcproject/mybranch'].tree = [f]; store.state.entries[f.path] = f; store .dispatch('createTempEntry', { name: 'test', branchId: 'mybranch', type: 'blob', }) .then(() => { expect(document.querySelector('.flash-alert')).not.toBeNull(); done(); }) .catch(done.fail); }); }); }); describe('popHistoryState', () => {}); describe('scrollToTab', () => { it('focuses the current active element', done => { document.body.innerHTML += '
'; const el = document.querySelector('.repo-tab'); spyOn(el, 'focus'); store .dispatch('scrollToTab') .then(() => { setTimeout(() => { expect(el.focus).toHaveBeenCalled(); document.getElementById('tabs').remove(); done(); }); }) .catch(done.fail); }); }); describe('updateViewer', () => { it('updates viewer state', done => { store .dispatch('updateViewer', 'diff') .then(() => { expect(store.state.viewer).toBe('diff'); }) .then(done) .catch(done.fail); }); }); });