Commit a5e3969d authored by Paul Slaughter's avatar Paul Slaughter

Migrate mr_widget_options_spec to Jest

- Also migrates mock_data
parent be120757
import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
export default {
id: 132,
iid: 22,
assignee_id: null,
author_id: 1,
description: '',
lock_version: null,
milestone_id: null,
position: 0,
state: 'merged',
title: 'Update README.md',
updated_by_id: null,
created_at: '2017-04-07T12:27:26.718Z',
updated_at: '2017-04-07T15:39:25.852Z',
time_estimate: 0,
total_time_spent: 0,
human_access: 'Maintainer',
human_time_estimate: null,
human_total_time_spent: null,
in_progress_merge_commit_sha: null,
merge_commit_sha: '53027d060246c8f47e4a9310fb332aa52f221775',
short_merge_commit_sha: '53027d06',
merge_error: null,
merge_params: {
force_remove_source_branch: null,
},
merge_status: 'can_be_merged',
merge_user_id: null,
pipelines_empty_svg_path: '/path/to/svg',
source_branch: 'daaaa',
source_branch_link: 'daaaa',
source_project_id: 19,
source_project_full_path: '/group1/project1',
target_branch: 'master',
target_project_id: 19,
target_project_full_path: '/group2/project2',
merge_request_add_ci_config_path: '/group2/project2/new/pipeline',
metrics: {
merged_by: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
merged_at: '2017-04-07T15:39:25.696Z',
closed_by: null,
closed_at: null,
},
author: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url: 'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
merge_user: null,
diff_head_sha: '104096c51715e12e7ae41f9333e9fa35b73f385d',
diff_head_commit_short_id: '104096c5',
default_merge_commit_message:
"Merge branch 'daaaa' into 'master'\n\nUpdate README.md\n\nSee merge request !22",
pipeline: {
id: 172,
user: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
active: false,
coverage: '92.16',
path: '/root/acets-app/pipelines/172',
details: {
status: {
icon: 'status_success',
favicon: 'favicon_status_success',
text: 'passed',
label: 'passed',
group: 'success',
has_details: true,
details_path: '/root/acets-app/pipelines/172',
},
duration: null,
finished_at: '2017-04-07T14:00:14.256Z',
stages: [
{
name: 'build',
title: 'build: failed',
status: {
icon: 'status_failed',
favicon: 'favicon_status_failed',
text: 'failed',
label: 'failed',
group: 'failed',
has_details: true,
details_path: '/root/acets-app/pipelines/172#build',
},
path: '/root/acets-app/pipelines/172#build',
dropdown_path: '/root/acets-app/pipelines/172/stage.json?stage=build',
},
{
name: 'review',
title: 'review: skipped',
status: {
icon: 'status_skipped',
favicon: 'favicon_status_skipped',
text: 'skipped',
label: 'skipped',
group: 'skipped',
has_details: true,
details_path: '/root/acets-app/pipelines/172#review',
},
path: '/root/acets-app/pipelines/172#review',
dropdown_path: '/root/acets-app/pipelines/172/stage.json?stage=review',
},
],
artifacts: [],
manual_actions: [
{
name: 'stop_review',
path: '/root/acets-app/builds/1427/play',
playable: false,
},
],
},
flags: {
latest: false,
triggered: false,
stuck: false,
yaml_errors: false,
retryable: true,
cancelable: false,
merge_request_pipeline: false,
detached_merge_request_pipeline: true,
},
ref: {
name: 'daaaa',
path: '/root/acets-app/tree/daaaa',
tag: false,
branch: true,
},
merge_request: {
iid: 1,
path: '/root/detached-merge-request-pipelines/-/merge_requests/1',
title: 'Update README.md',
source_branch: 'feature-1',
source_branch_path: '/root/detached-merge-request-pipelines/branches/feature-1',
target_branch: 'master',
target_branch_path: '/root/detached-merge-request-pipelines/branches/master',
},
commit: {
id: '104096c51715e12e7ae41f9333e9fa35b73f385d',
short_id: '104096c5',
title: 'Update README.md',
created_at: '2017-04-07T15:27:18.000+03:00',
parent_ids: ['2396536178668d8930c29d904e53bd4d06228b32'],
message: 'Update README.md',
author_name: 'Administrator',
author_email: 'admin@example.com',
authored_date: '2017-04-07T15:27:18.000+03:00',
committer_name: 'Administrator',
committer_email: 'admin@example.com',
committed_date: '2017-04-07T15:27:18.000+03:00',
author: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
author_gravatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
commit_url:
'http://localhost:3000/root/acets-app/commit/104096c51715e12e7ae41f9333e9fa35b73f385d',
commit_path: '/root/acets-app/commit/104096c51715e12e7ae41f9333e9fa35b73f385d',
},
retry_path: '/root/acets-app/pipelines/172/retry',
created_at: '2017-04-07T12:27:19.520Z',
updated_at: '2017-04-07T15:28:44.800Z',
},
pipelineCoverageDelta: '15.25',
work_in_progress: false,
source_branch_exists: false,
mergeable_discussions_state: true,
conflicts_can_be_resolved_in_ui: false,
branch_missing: true,
commits_count: 1,
has_conflicts: false,
can_be_merged: true,
has_ci: true,
ci_status: 'success',
pipeline_status_path: '/root/acets-app/-/merge_requests/22/pipeline_status',
issues_links: {
closing: '',
mentioned_but_not_closing: '',
},
current_user: {
can_resolve_conflicts: true,
can_remove_source_branch: false,
can_revert_on_current_merge_request: true,
can_cherry_pick_on_current_merge_request: true,
},
target_branch_path: '/root/acets-app/branches/master',
source_branch_path: '/root/acets-app/branches/daaaa',
conflict_resolution_ui_path: '/root/acets-app/-/merge_requests/22/conflicts',
remove_wip_path: '/root/acets-app/-/merge_requests/22/remove_wip',
cancel_auto_merge_path: '/root/acets-app/-/merge_requests/22/cancel_auto_merge',
create_issue_to_resolve_discussions_path:
'/root/acets-app/-/issues/new?merge_request_to_resolve_discussions_of=22',
merge_path: '/root/acets-app/-/merge_requests/22/merge',
cherry_pick_in_fork_path:
'/root/acets-app/forks?continue%5Bnotice%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+has+been+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.+Try+to+revert+this+commit+again.&continue%5Bnotice_now%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+is+being+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.&continue%5Bto%5D=%2Froot%2Facets-app%2Fmerge_requests%2F22&namespace_key=1',
revert_in_fork_path:
'/root/acets-app/forks?continue%5Bnotice%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+has+been+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.+Try+to+cherry-pick+this+commit+again.&continue%5Bnotice_now%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+is+being+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.&continue%5Bto%5D=%2Froot%2Facets-app%2Fmerge_requests%2F22&namespace_key=1',
email_patches_path: '/root/acets-app/-/merge_requests/22.patch',
plain_diff_path: '/root/acets-app/-/merge_requests/22.diff',
merge_request_basic_path: '/root/acets-app/-/merge_requests/22.json?serializer=basic',
merge_request_widget_path: '/root/acets-app/-/merge_requests/22/widget.json',
merge_request_cached_widget_path: '/cached.json',
merge_check_path: '/root/acets-app/-/merge_requests/22/merge_check',
ci_environments_status_url: '/root/acets-app/-/merge_requests/22/ci_environments_status',
project_archived: false,
default_merge_commit_message_with_description:
"Merge branch 'daaaa' into 'master'\n\nUpdate README.md\n\nSee merge request !22",
default_squash_commit_message: 'Test squash commit message',
diverged_commits_count: 0,
only_allow_merge_if_pipeline_succeeds: false,
commit_change_content_path: '/root/acets-app/-/merge_requests/22/commit_change_content',
merge_commit_path:
'http://localhost:3000/root/acets-app/commit/53027d060246c8f47e4a9310fb332aa52f221775',
troubleshooting_docs_path: 'help',
merge_request_pipelines_docs_path: '/help/ci/merge_request_pipelines/index.md',
merge_train_when_pipeline_succeeds_docs_path:
'/help/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/#startadd-to-merge-train-when-pipeline-succeeds',
squash: true,
visual_review_app_available: true,
merge_trains_enabled: true,
merge_trains_count: 3,
merge_train_index: 1,
};
export const mockStore = {
pipeline: {
id: 0,
details: {
status: {
details_path: '/root/review-app-tester/pipelines/66',
favicon:
'/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2. png',
group: 'success-with-warnings',
has_details: true,
icon: 'status_warning',
illustration: null,
label: 'passed with warnings',
text: 'passed',
tooltip: 'passed',
},
},
flags: {},
ref: {},
},
mergePipeline: {
id: 1,
details: {
status: {
details_path: '/root/review-app-tester/pipelines/66',
favicon:
'/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2. png',
group: 'success-with-warnings',
has_details: true,
icon: 'status_warning',
illustration: null,
label: 'passed with warnings',
text: 'passed',
tooltip: 'passed',
},
},
flags: {},
ref: {},
},
targetBranch: 'target-branch',
sourceBranch: 'source-branch',
sourceBranchLink: 'source-branch-link',
deployments: [
{
id: 0,
name: 'bogus',
external_url: 'https://fake.com',
external_url_formatted: 'https://fake.com',
status: SUCCESS,
},
{
id: 1,
name: 'bogus-docs',
external_url: 'https://fake.com',
external_url_formatted: 'https://fake.com',
status: SUCCESS,
},
],
postMergeDeployments: [
{ id: 0, name: 'prod', status: SUCCESS },
{ id: 1, name: 'prod-docs', status: SUCCESS },
],
troubleshootingDocsPath: 'troubleshooting-docs-path',
ciStatus: 'ci-status',
hasCI: true,
exposedArtifactsPath: 'exposed_artifacts.json',
};
import Vue from 'vue';
import MockAdapter from 'axios-mock-adapter';
import mountComponent from 'spec/helpers/vue_mount_component_helper';
import waitForPromises from 'spec/helpers/wait_for_promises';
import mountComponent from 'helpers/vue_mount_component_helper';
import axios from '~/lib/utils/axios_utils';
import mrWidgetOptions from '~/vue_merge_request_widget/mr_widget_options.vue';
import eventHub from '~/vue_merge_request_widget/event_hub';
import notify from '~/lib/utils/notify';
import SmartInterval from '~/smart_interval';
import { stateKey } from '~/vue_merge_request_widget/stores/state_maps';
import mockData from './mock_data';
import { faviconDataUrl, overlayDataUrl } from '../lib/utils/mock_data';
import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
jest.mock('~/smart_interval');
const returnPromise = data =>
new Promise(resolve => {
resolve({
......@@ -26,7 +28,6 @@ describe('mrWidgetOptions', () => {
const COLLABORATION_MESSAGE = 'Allows commits from members who can merge to the target branch';
beforeEach(() => {
jasmine.clock().install();
// Prevent component mounting
delete mrWidgetOptions.el;
......@@ -41,9 +42,7 @@ describe('mrWidgetOptions', () => {
});
afterEach(() => {
jasmine.clock().uninstall();
mock.restore();
vm.$destroy();
vm = null;
......@@ -59,11 +58,13 @@ describe('mrWidgetOptions', () => {
vm = mountComponent(MrWidgetOptions, {
mrData: { ...mockData },
});
return axios.waitForAll();
};
describe('default', () => {
beforeEach(() => {
createComponent();
return createComponent();
});
describe('data', () => {
......@@ -259,9 +260,9 @@ describe('mrWidgetOptions', () => {
describe('methods', () => {
describe('checkStatus', () => {
it('should tell service to check status', () => {
spyOn(vm.service, 'checkStatus').and.returnValue(returnPromise(mockData));
spyOn(vm.mr, 'setData');
spyOn(vm, 'handleNotification');
jest.spyOn(vm.service, 'checkStatus').mockReturnValue(returnPromise(mockData));
jest.spyOn(vm.mr, 'setData').mockImplementation(() => {});
jest.spyOn(vm, 'handleNotification').mockImplementation(() => {});
let isCbExecuted = false;
const cb = () => {
......@@ -281,33 +282,33 @@ describe('mrWidgetOptions', () => {
describe('initPolling', () => {
it('should call SmartInterval', () => {
spyOn(vm, 'checkStatus').and.returnValue(Promise.resolve());
vm.initPolling();
expect(vm.checkStatus).not.toHaveBeenCalled();
jasmine.clock().tick(10000);
expect(vm.pollingInterval).toBeDefined();
expect(vm.checkStatus).toHaveBeenCalled();
expect(SmartInterval).toHaveBeenCalledWith(
expect.objectContaining({
callback: vm.checkStatus,
}),
);
});
});
describe('initDeploymentsPolling', () => {
it('should call SmartInterval', () => {
spyOn(vm, 'fetchDeployments').and.returnValue(Promise.resolve());
vm.initDeploymentsPolling();
expect(vm.deploymentsInterval).toBeDefined();
expect(vm.fetchDeployments).toHaveBeenCalled();
expect(SmartInterval).toHaveBeenCalledWith(
expect.objectContaining({
callback: vm.fetchPreMergeDeployments,
}),
);
});
});
describe('fetchDeployments', () => {
it('should fetch deployments', () => {
spyOn(vm.service, 'fetchDeployments').and.returnValue(
returnPromise([{ id: 1, status: SUCCESS }]),
);
jest
.spyOn(vm.service, 'fetchDeployments')
.mockReturnValue(returnPromise([{ id: 1, status: SUCCESS }]));
vm.fetchPreMergeDeployments();
......@@ -321,9 +322,9 @@ describe('mrWidgetOptions', () => {
describe('fetchActionsContent', () => {
it('should fetch content of Cherry Pick and Revert modals', () => {
spyOn(vm.service, 'fetchMergeActionsContent').and.returnValue(
returnPromise('hello world'),
);
jest
.spyOn(vm.service, 'fetchMergeActionsContent')
.mockReturnValue(returnPromise('hello world'));
vm.fetchActionsContent();
......@@ -335,59 +336,48 @@ describe('mrWidgetOptions', () => {
});
describe('bindEventHubListeners', () => {
it('should bind eventHub listeners', () => {
spyOn(vm, 'checkStatus').and.returnValue(() => {});
spyOn(vm.service, 'checkStatus').and.returnValue(returnPromise(mockData));
spyOn(vm, 'fetchActionsContent');
spyOn(vm.mr, 'setData');
spyOn(vm, 'resumePolling');
spyOn(vm, 'stopPolling');
spyOn(eventHub, '$on').and.callThrough();
return waitForPromises().then(() => {
eventHub.$emit('SetBranchRemoveFlag', ['flag']);
expect(vm.mr.isRemovingSourceBranch).toEqual('flag');
eventHub.$emit('FailedToMerge');
it.each`
event | method | methodArgs
${'MRWidgetUpdateRequested'} | ${'checkStatus'} | ${x => [x]}
${'MRWidgetRebaseSuccess'} | ${'checkStatus'} | ${x => [x, true]}
${'FetchActionsContent'} | ${'fetchActionsContent'} | ${() => []}
${'EnablePolling'} | ${'resumePolling'} | ${() => []}
${'DisablePolling'} | ${'stopPolling'} | ${() => []}
`('should bind to $event', ({ event, method, methodArgs }) => {
jest.spyOn(vm, method).mockImplementation();
expect(vm.mr.state).toEqual('failedToMerge');
const eventArg = {};
eventHub.$emit(event, eventArg);
eventHub.$emit('UpdateWidgetData', mockData);
expect(vm.mr.setData).toHaveBeenCalledWith(mockData);
eventHub.$emit('EnablePolling');
expect(vm[method]).toHaveBeenCalledWith(...methodArgs(eventArg));
});
expect(vm.resumePolling).toHaveBeenCalled();
it('should bind to SetBranchRemoveFlag', () => {
expect(vm.mr.isRemovingSourceBranch).toBe(false);
eventHub.$emit('DisablePolling');
eventHub.$emit('SetBranchRemoveFlag', [true]);
expect(vm.stopPolling).toHaveBeenCalled();
expect(vm.mr.isRemovingSourceBranch).toBe(true);
});
const listenersWithServiceRequest = {
MRWidgetUpdateRequested: true,
FetchActionsContent: true,
};
it('should bind to FailedToMerge', () => {
vm.mr.state = '';
vm.mr.mergeError = '';
const allArgs = eventHub.$on.calls.allArgs();
allArgs.forEach(params => {
const eventName = params[0];
const callback = params[1];
const mergeError = 'Something bad happened!';
eventHub.$emit('FailedToMerge', mergeError);
if (listenersWithServiceRequest[eventName]) {
listenersWithServiceRequest[eventName] = callback;
}
expect(vm.mr.state).toBe('failedToMerge');
expect(vm.mr.mergeError).toBe(mergeError);
});
listenersWithServiceRequest.MRWidgetUpdateRequested();
it('should bind to UpdateWidgetData', () => {
jest.spyOn(vm.mr, 'setData').mockImplementation();
expect(vm.checkStatus).toHaveBeenCalled();
const data = { ...mockData };
eventHub.$emit('UpdateWidgetData', data);
listenersWithServiceRequest.FetchActionsContent();
expect(vm.fetchActionsContent).toHaveBeenCalled();
});
expect(vm.mr.setData).toHaveBeenCalledWith(data);
});
});
......@@ -419,8 +409,8 @@ describe('mrWidgetOptions', () => {
expect(faviconElement.getAttribute('href')).not.toEqual(null);
expect(faviconElement.getAttribute('href')).not.toEqual(overlayDataUrl);
expect(faviconElement.getAttribute('href')).not.toEqual(faviconDataUrl);
done();
})
.then(done)
.catch(done.fail);
});
......@@ -443,7 +433,7 @@ describe('mrWidgetOptions', () => {
};
beforeEach(() => {
spyOn(notify, 'notifyMe');
jest.spyOn(notify, 'notifyMe').mockImplementation(() => {});
vm.mr.ciStatus = 'failed';
vm.mr.gitlabLogo = 'logo.png';
......@@ -478,25 +468,23 @@ describe('mrWidgetOptions', () => {
});
describe('resumePolling', () => {
it('should call stopTimer on pollingInterval', () =>
waitForPromises().then(() => {
spyOn(vm.pollingInterval, 'resume');
it('should call stopTimer on pollingInterval', () => {
jest.spyOn(vm.pollingInterval, 'resume').mockImplementation(() => {});
vm.resumePolling();
expect(vm.pollingInterval.resume).toHaveBeenCalled();
}));
});
});
describe('stopPolling', () => {
it('should call stopTimer on pollingInterval', () =>
waitForPromises().then(() => {
spyOn(vm.pollingInterval, 'stopTimer');
it('should call stopTimer on pollingInterval', () => {
jest.spyOn(vm.pollingInterval, 'stopTimer').mockImplementation(() => {});
vm.stopPolling();
expect(vm.pollingInterval.stopTimer).toHaveBeenCalled();
}));
});
});
});
......@@ -814,8 +802,12 @@ describe('mrWidgetOptions', () => {
describe('given suggestPipeline feature flag is enabled', () => {
beforeEach(() => {
// This is needed because some grandchildren Bootstrap components throw warnings
// https://gitlab.com/gitlab-org/gitlab/issues/208458
jest.spyOn(console, 'warn').mockImplementation();
gon.features = { suggestPipeline: true };
createComponent();
return createComponent();
});
it('should suggest pipelines when none exist', () => {
......
import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
export default {
id: 132,
iid: 22,
assignee_id: null,
author_id: 1,
description: '',
lock_version: null,
milestone_id: null,
position: 0,
state: 'merged',
title: 'Update README.md',
updated_by_id: null,
created_at: '2017-04-07T12:27:26.718Z',
updated_at: '2017-04-07T15:39:25.852Z',
time_estimate: 0,
total_time_spent: 0,
human_access: 'Maintainer',
human_time_estimate: null,
human_total_time_spent: null,
in_progress_merge_commit_sha: null,
merge_commit_sha: '53027d060246c8f47e4a9310fb332aa52f221775',
short_merge_commit_sha: '53027d06',
merge_error: null,
merge_params: {
force_remove_source_branch: null,
},
merge_status: 'can_be_merged',
merge_user_id: null,
pipelines_empty_svg_path: '/path/to/svg',
source_branch: 'daaaa',
source_branch_link: 'daaaa',
source_project_id: 19,
source_project_full_path: '/group1/project1',
target_branch: 'master',
target_project_id: 19,
target_project_full_path: '/group2/project2',
merge_request_add_ci_config_path: '/group2/project2/new/pipeline',
metrics: {
merged_by: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
merged_at: '2017-04-07T15:39:25.696Z',
closed_by: null,
closed_at: null,
},
author: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url: 'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
merge_user: null,
diff_head_sha: '104096c51715e12e7ae41f9333e9fa35b73f385d',
diff_head_commit_short_id: '104096c5',
default_merge_commit_message:
"Merge branch 'daaaa' into 'master'\n\nUpdate README.md\n\nSee merge request !22",
pipeline: {
id: 172,
user: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
active: false,
coverage: '92.16',
path: '/root/acets-app/pipelines/172',
details: {
status: {
icon: 'status_success',
favicon: 'favicon_status_success',
text: 'passed',
label: 'passed',
group: 'success',
has_details: true,
details_path: '/root/acets-app/pipelines/172',
},
duration: null,
finished_at: '2017-04-07T14:00:14.256Z',
stages: [
{
name: 'build',
title: 'build: failed',
status: {
icon: 'status_failed',
favicon: 'favicon_status_failed',
text: 'failed',
label: 'failed',
group: 'failed',
has_details: true,
details_path: '/root/acets-app/pipelines/172#build',
},
path: '/root/acets-app/pipelines/172#build',
dropdown_path: '/root/acets-app/pipelines/172/stage.json?stage=build',
},
{
name: 'review',
title: 'review: skipped',
status: {
icon: 'status_skipped',
favicon: 'favicon_status_skipped',
text: 'skipped',
label: 'skipped',
group: 'skipped',
has_details: true,
details_path: '/root/acets-app/pipelines/172#review',
},
path: '/root/acets-app/pipelines/172#review',
dropdown_path: '/root/acets-app/pipelines/172/stage.json?stage=review',
},
],
artifacts: [],
manual_actions: [
{
name: 'stop_review',
path: '/root/acets-app/builds/1427/play',
playable: false,
},
],
},
flags: {
latest: false,
triggered: false,
stuck: false,
yaml_errors: false,
retryable: true,
cancelable: false,
merge_request_pipeline: false,
detached_merge_request_pipeline: true,
},
ref: {
name: 'daaaa',
path: '/root/acets-app/tree/daaaa',
tag: false,
branch: true,
},
merge_request: {
iid: 1,
path: '/root/detached-merge-request-pipelines/-/merge_requests/1',
title: 'Update README.md',
source_branch: 'feature-1',
source_branch_path: '/root/detached-merge-request-pipelines/branches/feature-1',
target_branch: 'master',
target_branch_path: '/root/detached-merge-request-pipelines/branches/master',
},
commit: {
id: '104096c51715e12e7ae41f9333e9fa35b73f385d',
short_id: '104096c5',
title: 'Update README.md',
created_at: '2017-04-07T15:27:18.000+03:00',
parent_ids: ['2396536178668d8930c29d904e53bd4d06228b32'],
message: 'Update README.md',
author_name: 'Administrator',
author_email: 'admin@example.com',
authored_date: '2017-04-07T15:27:18.000+03:00',
committer_name: 'Administrator',
committer_email: 'admin@example.com',
committed_date: '2017-04-07T15:27:18.000+03:00',
author: {
name: 'Administrator',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
web_url: 'http://localhost:3000/root',
},
author_gravatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon',
commit_url:
'http://localhost:3000/root/acets-app/commit/104096c51715e12e7ae41f9333e9fa35b73f385d',
commit_path: '/root/acets-app/commit/104096c51715e12e7ae41f9333e9fa35b73f385d',
},
retry_path: '/root/acets-app/pipelines/172/retry',
created_at: '2017-04-07T12:27:19.520Z',
updated_at: '2017-04-07T15:28:44.800Z',
},
pipelineCoverageDelta: '15.25',
work_in_progress: false,
source_branch_exists: false,
mergeable_discussions_state: true,
conflicts_can_be_resolved_in_ui: false,
branch_missing: true,
commits_count: 1,
has_conflicts: false,
can_be_merged: true,
has_ci: true,
ci_status: 'success',
pipeline_status_path: '/root/acets-app/-/merge_requests/22/pipeline_status',
issues_links: {
closing: '',
mentioned_but_not_closing: '',
},
current_user: {
can_resolve_conflicts: true,
can_remove_source_branch: false,
can_revert_on_current_merge_request: true,
can_cherry_pick_on_current_merge_request: true,
},
target_branch_path: '/root/acets-app/branches/master',
source_branch_path: '/root/acets-app/branches/daaaa',
conflict_resolution_ui_path: '/root/acets-app/-/merge_requests/22/conflicts',
remove_wip_path: '/root/acets-app/-/merge_requests/22/remove_wip',
cancel_auto_merge_path: '/root/acets-app/-/merge_requests/22/cancel_auto_merge',
create_issue_to_resolve_discussions_path:
'/root/acets-app/-/issues/new?merge_request_to_resolve_discussions_of=22',
merge_path: '/root/acets-app/-/merge_requests/22/merge',
cherry_pick_in_fork_path:
'/root/acets-app/forks?continue%5Bnotice%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+has+been+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.+Try+to+revert+this+commit+again.&continue%5Bnotice_now%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+is+being+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.&continue%5Bto%5D=%2Froot%2Facets-app%2Fmerge_requests%2F22&namespace_key=1',
revert_in_fork_path:
'/root/acets-app/forks?continue%5Bnotice%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+has+been+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.+Try+to+cherry-pick+this+commit+again.&continue%5Bnotice_now%5D=You%27re+not+allowed+to+make+changes+to+this+project+directly.+A+fork+of+this+project+is+being+created+that+you+can+make+changes+in%2C+so+you+can+submit+a+merge+request.&continue%5Bto%5D=%2Froot%2Facets-app%2Fmerge_requests%2F22&namespace_key=1',
email_patches_path: '/root/acets-app/-/merge_requests/22.patch',
plain_diff_path: '/root/acets-app/-/merge_requests/22.diff',
merge_request_basic_path: '/root/acets-app/-/merge_requests/22.json?serializer=basic',
merge_request_widget_path: '/root/acets-app/-/merge_requests/22/widget.json',
merge_request_cached_widget_path: '/cached.json',
merge_check_path: '/root/acets-app/-/merge_requests/22/merge_check',
ci_environments_status_url: '/root/acets-app/-/merge_requests/22/ci_environments_status',
project_archived: false,
default_merge_commit_message_with_description:
"Merge branch 'daaaa' into 'master'\n\nUpdate README.md\n\nSee merge request !22",
default_squash_commit_message: 'Test squash commit message',
diverged_commits_count: 0,
only_allow_merge_if_pipeline_succeeds: false,
commit_change_content_path: '/root/acets-app/-/merge_requests/22/commit_change_content',
merge_commit_path:
'http://localhost:3000/root/acets-app/commit/53027d060246c8f47e4a9310fb332aa52f221775',
troubleshooting_docs_path: 'help',
merge_request_pipelines_docs_path: '/help/ci/merge_request_pipelines/index.md',
merge_train_when_pipeline_succeeds_docs_path:
'/help/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/#startadd-to-merge-train-when-pipeline-succeeds',
squash: true,
visual_review_app_available: true,
merge_trains_enabled: true,
merge_trains_count: 3,
merge_train_index: 1,
};
export const mockStore = {
pipeline: {
id: 0,
details: {
status: {
details_path: '/root/review-app-tester/pipelines/66',
favicon:
'/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2. png',
group: 'success-with-warnings',
has_details: true,
icon: 'status_warning',
illustration: null,
label: 'passed with warnings',
text: 'passed',
tooltip: 'passed',
},
},
flags: {},
ref: {},
},
mergePipeline: {
id: 1,
details: {
status: {
details_path: '/root/review-app-tester/pipelines/66',
favicon:
'/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2. png',
group: 'success-with-warnings',
has_details: true,
icon: 'status_warning',
illustration: null,
label: 'passed with warnings',
text: 'passed',
tooltip: 'passed',
},
},
flags: {},
ref: {},
},
targetBranch: 'target-branch',
sourceBranch: 'source-branch',
sourceBranchLink: 'source-branch-link',
deployments: [
{
id: 0,
name: 'bogus',
external_url: 'https://fake.com',
external_url_formatted: 'https://fake.com',
status: SUCCESS,
},
{
id: 1,
name: 'bogus-docs',
external_url: 'https://fake.com',
external_url_formatted: 'https://fake.com',
status: SUCCESS,
},
],
postMergeDeployments: [
{ id: 0, name: 'prod', status: SUCCESS },
{ id: 1, name: 'prod-docs', status: SUCCESS },
],
troubleshootingDocsPath: 'troubleshooting-docs-path',
ciStatus: 'ci-status',
hasCI: true,
exposedArtifactsPath: 'exposed_artifacts.json',
};
export { default } from '../../frontend/vue_mr_widget/mock_data';
export * from '../../frontend/vue_mr_widget/mock_data';
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment