351 lines
9.3 KiB
JavaScript
351 lines
9.3 KiB
JavaScript
|
import Vue from 'vue';
|
||
|
import store from '~/ide/stores';
|
||
|
import service from '~/ide/services';
|
||
|
import { file, resetStore } from '../../helpers';
|
||
|
|
||
|
describe('Multi-file store tree actions', () => {
|
||
|
let projectTree;
|
||
|
|
||
|
const basicCallParameters = {
|
||
|
endpoint: 'rootEndpoint',
|
||
|
projectId: 'abcproject',
|
||
|
branch: 'master',
|
||
|
};
|
||
|
|
||
|
beforeEach(() => {
|
||
|
store.state.currentProjectId = 'abcproject';
|
||
|
store.state.currentBranchId = 'master';
|
||
|
store.state.projects.abcproject = {
|
||
|
web_url: '',
|
||
|
branches: {
|
||
|
master: {
|
||
|
workingReference: '1',
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
});
|
||
|
|
||
|
afterEach(() => {
|
||
|
resetStore(store);
|
||
|
});
|
||
|
|
||
|
describe('getTreeData', () => {
|
||
|
beforeEach(() => {
|
||
|
spyOn(service, 'getTreeData').and.returnValue(Promise.resolve({
|
||
|
headers: {
|
||
|
'page-title': 'test',
|
||
|
},
|
||
|
json: () => Promise.resolve({
|
||
|
last_commit_path: 'last_commit_path',
|
||
|
parent_tree_url: 'parent_tree_url',
|
||
|
path: '/',
|
||
|
trees: [{ name: 'tree' }],
|
||
|
blobs: [{ name: 'blob' }],
|
||
|
submodules: [{ name: 'submodule' }],
|
||
|
}),
|
||
|
}));
|
||
|
});
|
||
|
|
||
|
it('calls service getTreeData', (done) => {
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
expect(service.getTreeData).toHaveBeenCalledWith('rootEndpoint');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('adds data into tree', (done) => {
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
projectTree = store.state.trees['abcproject/master'];
|
||
|
expect(projectTree.tree.length).toBe(3);
|
||
|
expect(projectTree.tree[0].type).toBe('tree');
|
||
|
expect(projectTree.tree[1].type).toBe('submodule');
|
||
|
expect(projectTree.tree[2].type).toBe('blob');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('sets parent tree URL', (done) => {
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
expect(store.state.parentTreeUrl).toBe('parent_tree_url');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('sets last commit path', (done) => {
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
expect(store.state.trees['abcproject/master'].lastCommitPath).toBe('last_commit_path');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('sets root if not currently at root', (done) => {
|
||
|
store.state.isInitialRoot = false;
|
||
|
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
expect(store.state.isInitialRoot).toBeTruthy();
|
||
|
expect(store.state.isRoot).toBeTruthy();
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('sets page title', (done) => {
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
expect(document.title).toBe('test');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('calls getLastCommitData if prevLastCommitPath is not null', (done) => {
|
||
|
const getLastCommitDataSpy = jasmine.createSpy('getLastCommitData');
|
||
|
const oldGetLastCommitData = store._actions.getLastCommitData; // eslint-disable-line
|
||
|
store._actions.getLastCommitData = [getLastCommitDataSpy]; // eslint-disable-line
|
||
|
store.state.prevLastCommitPath = 'test';
|
||
|
|
||
|
store.dispatch('getTreeData', basicCallParameters)
|
||
|
.then(() => {
|
||
|
expect(getLastCommitDataSpy).toHaveBeenCalledWith(projectTree);
|
||
|
|
||
|
store._actions.getLastCommitData = oldGetLastCommitData; // eslint-disable-line
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('toggleTreeOpen', () => {
|
||
|
let oldGetTreeData;
|
||
|
let getTreeDataSpy;
|
||
|
let tree;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
getTreeDataSpy = jasmine.createSpy('getTreeData');
|
||
|
|
||
|
oldGetTreeData = store._actions.getTreeData; // eslint-disable-line
|
||
|
store._actions.getTreeData = [getTreeDataSpy]; // eslint-disable-line
|
||
|
|
||
|
tree = {
|
||
|
projectId: 'abcproject',
|
||
|
branchId: 'master',
|
||
|
opened: false,
|
||
|
tree: [],
|
||
|
};
|
||
|
});
|
||
|
|
||
|
afterEach(() => {
|
||
|
store._actions.getTreeData = oldGetTreeData; // eslint-disable-line
|
||
|
});
|
||
|
|
||
|
it('toggles the tree open', (done) => {
|
||
|
store.dispatch('toggleTreeOpen', {
|
||
|
endpoint: 'test',
|
||
|
tree,
|
||
|
}).then(() => {
|
||
|
expect(tree.opened).toBeTruthy();
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('calls getTreeData if tree is closed', (done) => {
|
||
|
store.dispatch('toggleTreeOpen', {
|
||
|
endpoint: 'test',
|
||
|
tree,
|
||
|
}).then(() => {
|
||
|
expect(getTreeDataSpy).toHaveBeenCalledWith({
|
||
|
projectId: 'abcproject',
|
||
|
branch: 'master',
|
||
|
endpoint: 'test',
|
||
|
tree,
|
||
|
});
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('resets entries tree', (done) => {
|
||
|
Object.assign(tree, {
|
||
|
opened: true,
|
||
|
tree: ['a'],
|
||
|
});
|
||
|
|
||
|
store.dispatch('toggleTreeOpen', {
|
||
|
endpoint: 'test',
|
||
|
tree,
|
||
|
}).then(() => {
|
||
|
expect(tree.tree.length).toBe(0);
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('createTempTree', () => {
|
||
|
beforeEach(() => {
|
||
|
store.state.trees['abcproject/mybranch'] = {
|
||
|
tree: [],
|
||
|
};
|
||
|
projectTree = store.state.trees['abcproject/mybranch'];
|
||
|
});
|
||
|
|
||
|
it('creates temp tree', (done) => {
|
||
|
store.dispatch('createTempTree', {
|
||
|
projectId: store.state.currentProjectId,
|
||
|
branchId: store.state.currentBranchId,
|
||
|
name: 'test',
|
||
|
parent: projectTree,
|
||
|
})
|
||
|
.then(() => {
|
||
|
expect(projectTree.tree[0].name).toBe('test');
|
||
|
expect(projectTree.tree[0].type).toBe('tree');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('creates new folder inside another tree', (done) => {
|
||
|
const tree = {
|
||
|
type: 'tree',
|
||
|
name: 'testing',
|
||
|
tree: [],
|
||
|
};
|
||
|
|
||
|
projectTree.tree.push(tree);
|
||
|
|
||
|
store.dispatch('createTempTree', {
|
||
|
projectId: store.state.currentProjectId,
|
||
|
branchId: store.state.currentBranchId,
|
||
|
name: 'testing/test',
|
||
|
parent: projectTree,
|
||
|
})
|
||
|
.then(() => {
|
||
|
expect(projectTree.tree[0].name).toBe('testing');
|
||
|
expect(projectTree.tree[0].tree[0].tempFile).toBeTruthy();
|
||
|
expect(projectTree.tree[0].tree[0].name).toBe('test');
|
||
|
expect(projectTree.tree[0].tree[0].type).toBe('tree');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('does not create new tree if already exists', (done) => {
|
||
|
const tree = {
|
||
|
type: 'tree',
|
||
|
name: 'testing',
|
||
|
endpoint: 'test',
|
||
|
tree: [],
|
||
|
};
|
||
|
|
||
|
projectTree.tree.push(tree);
|
||
|
|
||
|
store.dispatch('createTempTree', {
|
||
|
projectId: store.state.currentProjectId,
|
||
|
branchId: store.state.currentBranchId,
|
||
|
name: 'testing/test',
|
||
|
parent: projectTree,
|
||
|
})
|
||
|
.then(() => {
|
||
|
expect(projectTree.tree[0].name).toBe('testing');
|
||
|
expect(projectTree.tree[0].tempFile).toBeUndefined();
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('getLastCommitData', () => {
|
||
|
beforeEach(() => {
|
||
|
spyOn(service, 'getTreeLastCommit').and.returnValue(Promise.resolve({
|
||
|
headers: {
|
||
|
'more-logs-url': null,
|
||
|
},
|
||
|
json: () => Promise.resolve([{
|
||
|
type: 'tree',
|
||
|
file_name: 'testing',
|
||
|
commit: {
|
||
|
message: 'commit message',
|
||
|
authored_date: '123',
|
||
|
},
|
||
|
}]),
|
||
|
}));
|
||
|
|
||
|
store.state.trees['abcproject/mybranch'] = {
|
||
|
tree: [],
|
||
|
};
|
||
|
|
||
|
projectTree = store.state.trees['abcproject/mybranch'];
|
||
|
projectTree.tree.push(file('testing', '1', 'tree'));
|
||
|
projectTree.lastCommitPath = 'lastcommitpath';
|
||
|
});
|
||
|
|
||
|
it('calls service with lastCommitPath', (done) => {
|
||
|
store.dispatch('getLastCommitData', projectTree)
|
||
|
.then(() => {
|
||
|
expect(service.getTreeLastCommit).toHaveBeenCalledWith('lastcommitpath');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('updates trees last commit data', (done) => {
|
||
|
store.dispatch('getLastCommitData', projectTree)
|
||
|
.then(Vue.nextTick)
|
||
|
.then(() => {
|
||
|
expect(projectTree.tree[0].lastCommit.message).toBe('commit message');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
|
||
|
it('does not update entry if not found', (done) => {
|
||
|
projectTree.tree[0].name = 'a';
|
||
|
|
||
|
store.dispatch('getLastCommitData', projectTree)
|
||
|
.then(Vue.nextTick)
|
||
|
.then(() => {
|
||
|
expect(projectTree.tree[0].lastCommit.message).not.toBe('commit message');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('updateDirectoryData', () => {
|
||
|
it('adds data into tree', (done) => {
|
||
|
const tree = {
|
||
|
tree: [],
|
||
|
};
|
||
|
const data = {
|
||
|
trees: [{ name: 'tree' }],
|
||
|
submodules: [{ name: 'submodule' }],
|
||
|
blobs: [{ name: 'blob' }],
|
||
|
};
|
||
|
|
||
|
store.dispatch('updateDirectoryData', {
|
||
|
data,
|
||
|
tree,
|
||
|
}).then(() => {
|
||
|
expect(tree.tree[0].name).toBe('tree');
|
||
|
expect(tree.tree[0].type).toBe('tree');
|
||
|
expect(tree.tree[1].name).toBe('submodule');
|
||
|
expect(tree.tree[1].type).toBe('submodule');
|
||
|
expect(tree.tree[2].name).toBe('blob');
|
||
|
expect(tree.tree[2].type).toBe('blob');
|
||
|
|
||
|
done();
|
||
|
}).catch(done.fail);
|
||
|
});
|
||
|
});
|
||
|
});
|