340 lines
9.9 KiB
JavaScript
340 lines
9.9 KiB
JavaScript
import MockAdapter from 'axios-mock-adapter';
|
|
import axios from '~/lib/utils/axios_utils';
|
|
import store from '~/ide/stores';
|
|
import actions, {
|
|
getMergeRequestData,
|
|
getMergeRequestChanges,
|
|
getMergeRequestVersions,
|
|
openMergeRequest,
|
|
} from '~/ide/stores/actions/merge_request';
|
|
import service from '~/ide/services';
|
|
import { activityBarViews } from '~/ide/constants';
|
|
import { resetStore } from '../../helpers';
|
|
|
|
describe('IDE store merge request actions', () => {
|
|
let mock;
|
|
|
|
beforeEach(() => {
|
|
mock = new MockAdapter(axios);
|
|
|
|
store.state.projects.abcproject = {
|
|
mergeRequests: {},
|
|
};
|
|
});
|
|
|
|
afterEach(() => {
|
|
mock.restore();
|
|
resetStore(store);
|
|
});
|
|
|
|
describe('getMergeRequestData', () => {
|
|
describe('success', () => {
|
|
beforeEach(() => {
|
|
spyOn(service, 'getProjectMergeRequestData').and.callThrough();
|
|
|
|
mock
|
|
.onGet(/api\/(.*)\/projects\/abcproject\/merge_requests\/1/)
|
|
.reply(200, { title: 'mergerequest' });
|
|
});
|
|
|
|
it('calls getProjectMergeRequestData service method', done => {
|
|
store
|
|
.dispatch('getMergeRequestData', { projectId: 'abcproject', mergeRequestId: 1 })
|
|
.then(() => {
|
|
expect(service.getProjectMergeRequestData).toHaveBeenCalledWith('abcproject', 1, {
|
|
render_html: true,
|
|
});
|
|
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('sets the Merge Request Object', done => {
|
|
store
|
|
.dispatch('getMergeRequestData', { projectId: 'abcproject', mergeRequestId: 1 })
|
|
.then(() => {
|
|
expect(store.state.projects.abcproject.mergeRequests['1'].title).toBe('mergerequest');
|
|
expect(store.state.currentMergeRequestId).toBe(1);
|
|
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
});
|
|
|
|
describe('error', () => {
|
|
beforeEach(() => {
|
|
mock.onGet(/api\/(.*)\/projects\/abcproject\/merge_requests\/1/).networkError();
|
|
});
|
|
|
|
it('dispatches error action', done => {
|
|
const dispatch = jasmine.createSpy('dispatch');
|
|
|
|
getMergeRequestData(
|
|
{
|
|
commit() {},
|
|
dispatch,
|
|
state: store.state,
|
|
},
|
|
{ projectId: 'abcproject', mergeRequestId: 1 },
|
|
)
|
|
.then(done.fail)
|
|
.catch(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('setErrorMessage', {
|
|
text: 'An error occured whilst loading the merge request.',
|
|
action: jasmine.any(Function),
|
|
actionText: 'Please try again',
|
|
actionPayload: {
|
|
projectId: 'abcproject',
|
|
mergeRequestId: 1,
|
|
force: false,
|
|
},
|
|
});
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getMergeRequestChanges', () => {
|
|
beforeEach(() => {
|
|
store.state.projects.abcproject.mergeRequests['1'] = { changes: [] };
|
|
});
|
|
|
|
describe('success', () => {
|
|
beforeEach(() => {
|
|
spyOn(service, 'getProjectMergeRequestChanges').and.callThrough();
|
|
|
|
mock
|
|
.onGet(/api\/(.*)\/projects\/abcproject\/merge_requests\/1\/changes/)
|
|
.reply(200, { title: 'mergerequest' });
|
|
});
|
|
|
|
it('calls getProjectMergeRequestChanges service method', done => {
|
|
store
|
|
.dispatch('getMergeRequestChanges', { projectId: 'abcproject', mergeRequestId: 1 })
|
|
.then(() => {
|
|
expect(service.getProjectMergeRequestChanges).toHaveBeenCalledWith('abcproject', 1);
|
|
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('sets the Merge Request Changes Object', done => {
|
|
store
|
|
.dispatch('getMergeRequestChanges', { projectId: 'abcproject', mergeRequestId: 1 })
|
|
.then(() => {
|
|
expect(store.state.projects.abcproject.mergeRequests['1'].changes.title).toBe(
|
|
'mergerequest',
|
|
);
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
});
|
|
|
|
describe('error', () => {
|
|
beforeEach(() => {
|
|
mock.onGet(/api\/(.*)\/projects\/abcproject\/merge_requests\/1\/changes/).networkError();
|
|
});
|
|
|
|
it('dispatches error action', done => {
|
|
const dispatch = jasmine.createSpy('dispatch');
|
|
|
|
getMergeRequestChanges(
|
|
{
|
|
commit() {},
|
|
dispatch,
|
|
state: store.state,
|
|
},
|
|
{ projectId: 'abcproject', mergeRequestId: 1 },
|
|
)
|
|
.then(done.fail)
|
|
.catch(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('setErrorMessage', {
|
|
text: 'An error occured whilst loading the merge request changes.',
|
|
action: jasmine.any(Function),
|
|
actionText: 'Please try again',
|
|
actionPayload: {
|
|
projectId: 'abcproject',
|
|
mergeRequestId: 1,
|
|
force: false,
|
|
},
|
|
});
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getMergeRequestVersions', () => {
|
|
beforeEach(() => {
|
|
store.state.projects.abcproject.mergeRequests['1'] = { versions: [] };
|
|
});
|
|
|
|
describe('success', () => {
|
|
beforeEach(() => {
|
|
mock
|
|
.onGet(/api\/(.*)\/projects\/abcproject\/merge_requests\/1\/versions/)
|
|
.reply(200, [{ id: 789 }]);
|
|
spyOn(service, 'getProjectMergeRequestVersions').and.callThrough();
|
|
});
|
|
|
|
it('calls getProjectMergeRequestVersions service method', done => {
|
|
store
|
|
.dispatch('getMergeRequestVersions', { projectId: 'abcproject', mergeRequestId: 1 })
|
|
.then(() => {
|
|
expect(service.getProjectMergeRequestVersions).toHaveBeenCalledWith('abcproject', 1);
|
|
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('sets the Merge Request Versions Object', done => {
|
|
store
|
|
.dispatch('getMergeRequestVersions', { projectId: 'abcproject', mergeRequestId: 1 })
|
|
.then(() => {
|
|
expect(store.state.projects.abcproject.mergeRequests['1'].versions.length).toBe(1);
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
});
|
|
|
|
describe('error', () => {
|
|
beforeEach(() => {
|
|
mock.onGet(/api\/(.*)\/projects\/abcproject\/merge_requests\/1\/versions/).networkError();
|
|
});
|
|
|
|
it('dispatches error action', done => {
|
|
const dispatch = jasmine.createSpy('dispatch');
|
|
|
|
getMergeRequestVersions(
|
|
{
|
|
commit() {},
|
|
dispatch,
|
|
state: store.state,
|
|
},
|
|
{ projectId: 'abcproject', mergeRequestId: 1 },
|
|
)
|
|
.then(done.fail)
|
|
.catch(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('setErrorMessage', {
|
|
text: 'An error occured whilst loading the merge request version data.',
|
|
action: jasmine.any(Function),
|
|
actionText: 'Please try again',
|
|
actionPayload: {
|
|
projectId: 'abcproject',
|
|
mergeRequestId: 1,
|
|
force: false,
|
|
},
|
|
});
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('openMergeRequest', () => {
|
|
const mr = {
|
|
projectId: 'abcproject',
|
|
targetProjectId: 'defproject',
|
|
mergeRequestId: 2,
|
|
};
|
|
let testMergeRequest;
|
|
let testMergeRequestChanges;
|
|
|
|
beforeEach(() => {
|
|
testMergeRequest = {
|
|
source_branch: 'abcbranch',
|
|
};
|
|
testMergeRequestChanges = {
|
|
changes: [],
|
|
};
|
|
store.state.entries = {
|
|
foo: {},
|
|
bar: {},
|
|
};
|
|
|
|
spyOn(store, 'dispatch').and.callFake((type) => {
|
|
switch (type) {
|
|
case 'getMergeRequestData':
|
|
return Promise.resolve(testMergeRequest);
|
|
case 'getMergeRequestChanges':
|
|
return Promise.resolve(testMergeRequestChanges);
|
|
default:
|
|
return Promise.resolve();
|
|
}
|
|
});
|
|
});
|
|
|
|
it('dispatch actions for merge request data', done => {
|
|
openMergeRequest(store, mr)
|
|
.then(() => {
|
|
expect(store.dispatch.calls.allArgs()).toEqual([
|
|
['getMergeRequestData', mr],
|
|
['setCurrentBranchId', testMergeRequest.source_branch],
|
|
['getBranchData', {
|
|
projectId: mr.projectId,
|
|
branchId: testMergeRequest.source_branch,
|
|
}],
|
|
['getFiles', {
|
|
projectId: mr.projectId,
|
|
branchId: testMergeRequest.source_branch,
|
|
}],
|
|
['getMergeRequestVersions', mr],
|
|
['getMergeRequestChanges', mr],
|
|
]);
|
|
})
|
|
.then(done)
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('updates activity bar view and gets file data, if changes are found', done => {
|
|
testMergeRequestChanges.changes = [
|
|
{ new_path: 'foo' },
|
|
{ new_path: 'bar' },
|
|
];
|
|
|
|
openMergeRequest(store, mr)
|
|
.then(() => {
|
|
expect(store.dispatch).toHaveBeenCalledWith('updateActivityBarView', activityBarViews.review);
|
|
|
|
testMergeRequestChanges.changes.forEach((change, i) => {
|
|
expect(store.dispatch).toHaveBeenCalledWith('setFileMrChange', {
|
|
file: store.state.entries[change.new_path],
|
|
mrChange: change,
|
|
});
|
|
expect(store.dispatch).toHaveBeenCalledWith('getFileData', {
|
|
path: change.new_path,
|
|
makeFileActive: i === 0,
|
|
});
|
|
});
|
|
})
|
|
.then(done)
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('flashes message, if error', done => {
|
|
const flashSpy = spyOnDependency(actions, 'flash');
|
|
store.dispatch.and.returnValue(Promise.reject());
|
|
|
|
openMergeRequest(store, mr)
|
|
.then(() => {
|
|
fail('Expected openMergeRequest to throw an error');
|
|
})
|
|
.catch(() => {
|
|
expect(flashSpy).toHaveBeenCalledWith(jasmine.any(String));
|
|
})
|
|
.then(done)
|
|
.catch(done.fail);
|
|
|
|
});
|
|
});
|
|
});
|