summaryrefslogtreecommitdiff
path: root/spec/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'spec/javascripts')
-rw-r--r--spec/javascripts/vue_mr_widget/components/deployment_spec.js313
-rw-r--r--spec/javascripts/vue_mr_widget/components/deployment_stop_button_spec.js95
-rw-r--r--spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js2
-rw-r--r--spec/javascripts/vue_mr_widget/components/review_app_link_spec.js1
-rw-r--r--spec/javascripts/vue_mr_widget/mock_data.js9
-rw-r--r--spec/javascripts/vue_mr_widget/mr_widget_options_spec.js7
6 files changed, 110 insertions, 317 deletions
diff --git a/spec/javascripts/vue_mr_widget/components/deployment_spec.js b/spec/javascripts/vue_mr_widget/components/deployment_spec.js
deleted file mode 100644
index 1949bee1406..00000000000
--- a/spec/javascripts/vue_mr_widget/components/deployment_spec.js
+++ /dev/null
@@ -1,313 +0,0 @@
-import Vue from 'vue';
-import deploymentComponent from '~/vue_merge_request_widget/components/deployment.vue';
-import MRWidgetService from '~/vue_merge_request_widget/services/mr_widget_service';
-import { getTimeago } from '~/lib/utils/datetime_utility';
-import mountComponent from '../../helpers/vue_mount_component_helper';
-
-describe('Deployment component', () => {
- const Component = Vue.extend(deploymentComponent);
- let deploymentMockData;
-
- beforeEach(() => {
- deploymentMockData = {
- id: 15,
- name: 'review/diplo',
- url: '/root/review-apps/environments/15',
- stop_url: '/root/review-apps/environments/15/stop',
- metrics_url: '/root/review-apps/environments/15/deployments/1/metrics',
- metrics_monitoring_url: '/root/review-apps/environments/15/metrics',
- external_url: 'http://gitlab.com.',
- external_url_formatted: 'gitlab',
- deployed_at: '2017-03-22T22:44:42.258Z',
- deployed_at_formatted: 'Mar 22, 2017 10:44pm',
- changes: [
- {
- path: 'index.html',
- external_url: 'http://root-master-patch-91341.volatile-watch.surge.sh/index.html',
- },
- {
- path: 'imgs/gallery.html',
- external_url: 'http://root-master-patch-91341.volatile-watch.surge.sh/imgs/gallery.html',
- },
- {
- path: 'about/',
- external_url: 'http://root-master-patch-91341.volatile-watch.surge.sh/about/',
- },
- ],
- };
- });
-
- let vm;
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('', () => {
- beforeEach(() => {
- vm = mountComponent(Component, { deployment: { ...deploymentMockData }, showMetrics: true });
- });
-
- describe('deployTimeago', () => {
- it('return formatted date', () => {
- const readable = getTimeago().format(deploymentMockData.deployed_at);
-
- expect(vm.deployTimeago).toEqual(readable);
- });
- });
-
- describe('hasExternalUrls', () => {
- it('should return true', () => {
- expect(vm.hasExternalUrls).toEqual(true);
- });
-
- it('should return false when deployment has no external_url_formatted', () => {
- vm.deployment.external_url_formatted = null;
-
- expect(vm.hasExternalUrls).toEqual(false);
- });
-
- it('should return false when deployment has no external_url', () => {
- vm.deployment.external_url = null;
-
- expect(vm.hasExternalUrls).toEqual(false);
- });
- });
-
- describe('hasDeploymentTime', () => {
- it('should return true', () => {
- expect(vm.hasDeploymentTime).toEqual(true);
- });
-
- it('should return false when deployment has no deployed_at', () => {
- vm.deployment.deployed_at = null;
-
- expect(vm.hasDeploymentTime).toEqual(false);
- });
-
- it('should return false when deployment has no deployed_at_formatted', () => {
- vm.deployment.deployed_at_formatted = null;
-
- expect(vm.hasDeploymentTime).toEqual(false);
- });
- });
-
- describe('hasDeploymentMeta', () => {
- it('should return true', () => {
- expect(vm.hasDeploymentMeta).toEqual(true);
- });
-
- it('should return false when deployment has no url', () => {
- vm.deployment.url = null;
-
- expect(vm.hasDeploymentMeta).toEqual(false);
- });
-
- it('should return false when deployment has no name', () => {
- vm.deployment.name = null;
-
- expect(vm.hasDeploymentMeta).toEqual(false);
- });
- });
-
- describe('stopEnvironment', () => {
- const url = '/foo/bar';
- const returnPromise = () =>
- new Promise(resolve => {
- resolve({
- data: {
- redirect_url: url,
- },
- });
- });
- const mockStopEnvironment = () => {
- vm.stopEnvironment(deploymentMockData);
- return vm;
- };
-
- it('should show a confirm dialog and call service.stopEnvironment when confirmed', done => {
- spyOn(window, 'confirm').and.returnValue(true);
- spyOn(MRWidgetService, 'stopEnvironment').and.returnValue(returnPromise(true));
- const visitUrl = spyOnDependency(deploymentComponent, 'visitUrl').and.returnValue(true);
- vm = mockStopEnvironment();
-
- expect(window.confirm).toHaveBeenCalled();
- expect(MRWidgetService.stopEnvironment).toHaveBeenCalledWith(deploymentMockData.stop_url);
- setTimeout(() => {
- expect(visitUrl).toHaveBeenCalledWith(url);
- done();
- }, 333);
- });
-
- it('should show a confirm dialog but should not work if the dialog is rejected', () => {
- spyOn(window, 'confirm').and.returnValue(false);
- spyOn(MRWidgetService, 'stopEnvironment').and.returnValue(returnPromise(false));
- vm = mockStopEnvironment();
-
- expect(window.confirm).toHaveBeenCalled();
- expect(MRWidgetService.stopEnvironment).not.toHaveBeenCalled();
- });
- });
-
- it('renders deployment name', () => {
- expect(vm.$el.querySelector('.js-deploy-meta').getAttribute('href')).toEqual(
- deploymentMockData.url,
- );
-
- expect(vm.$el.querySelector('.js-deploy-meta').innerText).toContain(deploymentMockData.name);
- });
-
- it('renders external URL', () => {
- expect(vm.$el.querySelector('.js-deploy-url').getAttribute('href')).toEqual(
- deploymentMockData.external_url,
- );
-
- expect(vm.$el.querySelector('.js-deploy-url').innerText).toContain('View app');
- });
-
- it('renders stop button', () => {
- expect(vm.$el.querySelector('.btn')).not.toBeNull();
- });
-
- it('renders deployment time', () => {
- expect(vm.$el.querySelector('.js-deploy-time').innerText).toContain(vm.deployTimeago);
- });
-
- it('renders metrics component', () => {
- expect(vm.$el.querySelector('.js-mr-memory-usage')).not.toBeNull();
- });
- });
-
- describe('with showMetrics enabled', () => {
- beforeEach(() => {
- vm = mountComponent(Component, { deployment: { ...deploymentMockData }, showMetrics: true });
- });
-
- it('shows metrics', () => {
- expect(vm.$el).toContainElement('.js-mr-memory-usage');
- });
- });
-
- describe('with showMetrics disabled', () => {
- beforeEach(() => {
- vm = mountComponent(Component, { deployment: { ...deploymentMockData }, showMetrics: false });
- });
-
- it('hides metrics', () => {
- expect(vm.$el).not.toContainElement('.js-mr-memory-usage');
- });
- });
-
- describe('without changes', () => {
- beforeEach(() => {
- delete deploymentMockData.changes;
-
- vm = mountComponent(Component, { deployment: { ...deploymentMockData }, showMetrics: true });
- });
-
- it('renders the link to the review app without dropdown', () => {
- expect(vm.$el.querySelector('.js-mr-wigdet-deployment-dropdown')).toBeNull();
- expect(vm.$el.querySelector('.js-deploy-url')).not.toBeNull();
- });
- });
-
- describe('with a single change', () => {
- beforeEach(() => {
- deploymentMockData.changes = deploymentMockData.changes.slice(0, 1);
-
- vm = mountComponent(Component, {
- deployment: { ...deploymentMockData },
- showMetrics: true,
- });
- });
-
- it('renders the link to the review app without dropdown', () => {
- expect(vm.$el.querySelector('.js-mr-wigdet-deployment-dropdown')).toBeNull();
- expect(vm.$el.querySelector('.js-deploy-url')).not.toBeNull();
- });
-
- it('renders the link to the review app linked to to the first change', () => {
- const expectedUrl = deploymentMockData.changes[0].external_url;
- const deployUrl = vm.$el.querySelector('.js-deploy-url');
-
- expect(vm.$el.querySelector('.js-mr-wigdet-deployment-dropdown')).toBeNull();
- expect(deployUrl).not.toBeNull();
- expect(deployUrl.href).toEqual(expectedUrl);
- });
- });
-
- describe('deployment status', () => {
- describe('running', () => {
- beforeEach(() => {
- vm = mountComponent(Component, {
- deployment: Object.assign({}, deploymentMockData, { status: 'running' }),
- showMetrics: true,
- });
- });
-
- it('renders information about running deployment', () => {
- expect(vm.$el.querySelector('.js-deployment-info').textContent).toContain('Deploying to');
- });
-
- it('renders disabled stop button', () => {
- expect(vm.$el.querySelector('.js-stop-env').getAttribute('disabled')).toBe('disabled');
- });
- });
-
- describe('success', () => {
- beforeEach(() => {
- vm = mountComponent(Component, {
- deployment: Object.assign({}, deploymentMockData, { status: 'success' }),
- showMetrics: true,
- });
- });
-
- it('renders information about finished deployment', () => {
- expect(vm.$el.querySelector('.js-deployment-info').textContent).toContain('Deployed to');
- });
- });
-
- describe('failed', () => {
- beforeEach(() => {
- vm = mountComponent(Component, {
- deployment: Object.assign({}, deploymentMockData, { status: 'failed' }),
- showMetrics: true,
- });
- });
-
- it('renders information about finished deployment', () => {
- expect(vm.$el.querySelector('.js-deployment-info').textContent).toContain(
- 'Failed to deploy to',
- );
- });
- });
-
- describe('created', () => {
- beforeEach(() => {
- vm = mountComponent(Component, {
- deployment: Object.assign({}, deploymentMockData, { status: 'created' }),
- showMetrics: true,
- });
- });
-
- it('renders information about created deployment', () => {
- expect(vm.$el.querySelector('.js-deployment-info').textContent).toContain('Will deploy to');
- });
- });
-
- describe('canceled', () => {
- beforeEach(() => {
- vm = mountComponent(Component, {
- deployment: Object.assign({}, deploymentMockData, { status: 'canceled' }),
- showMetrics: true,
- });
- });
-
- it('renders information about canceled deployment', () => {
- expect(vm.$el.querySelector('.js-deployment-info').textContent).toContain(
- 'Failed to deploy to',
- );
- });
- });
- });
-});
diff --git a/spec/javascripts/vue_mr_widget/components/deployment_stop_button_spec.js b/spec/javascripts/vue_mr_widget/components/deployment_stop_button_spec.js
new file mode 100644
index 00000000000..6a6d8279c2c
--- /dev/null
+++ b/spec/javascripts/vue_mr_widget/components/deployment_stop_button_spec.js
@@ -0,0 +1,95 @@
+import Vue from 'vue';
+import deploymentStopComponent from '~/vue_merge_request_widget/components/deployment/deployment_stop_button.vue';
+import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
+import MRWidgetService from '~/vue_merge_request_widget/services/mr_widget_service';
+import mountComponent from '../../helpers/vue_mount_component_helper';
+
+describe('Deployment component', () => {
+ const Component = Vue.extend(deploymentStopComponent);
+ let deploymentMockData;
+
+ beforeEach(() => {
+ deploymentMockData = {
+ id: 15,
+ name: 'review/diplo',
+ url: '/root/review-apps/environments/15',
+ stop_url: '/root/review-apps/environments/15/stop',
+ metrics_url: '/root/review-apps/environments/15/deployments/1/metrics',
+ metrics_monitoring_url: '/root/review-apps/environments/15/metrics',
+ external_url: 'http://gitlab.com.',
+ external_url_formatted: 'gitlab',
+ deployed_at: '2017-03-22T22:44:42.258Z',
+ deployed_at_formatted: 'Mar 22, 2017 10:44pm',
+ deployment_manual_actions: [],
+ status: SUCCESS,
+ changes: [
+ {
+ path: 'index.html',
+ external_url: 'http://root-master-patch-91341.volatile-watch.surge.sh/index.html',
+ },
+ {
+ path: 'imgs/gallery.html',
+ external_url: 'http://root-master-patch-91341.volatile-watch.surge.sh/imgs/gallery.html',
+ },
+ {
+ path: 'about/',
+ external_url: 'http://root-master-patch-91341.volatile-watch.surge.sh/about/',
+ },
+ ],
+ };
+ });
+
+ let vm;
+
+ afterEach(() => {
+ vm.$destroy();
+ });
+
+ describe('', () => {
+ beforeEach(() => {
+ vm = mountComponent(Component, {
+ stopUrl: deploymentMockData.stop_url,
+ isDeployInProgress: false,
+ });
+ });
+
+ describe('stopEnvironment', () => {
+ const url = '/foo/bar';
+ const returnPromise = () =>
+ new Promise(resolve => {
+ resolve({
+ data: {
+ redirect_url: url,
+ },
+ });
+ });
+ const mockStopEnvironment = () => {
+ vm.stopEnvironment(deploymentMockData);
+ return vm;
+ };
+
+ it('should show a confirm dialog and call service.stopEnvironment when confirmed', done => {
+ spyOn(window, 'confirm').and.returnValue(true);
+ spyOn(MRWidgetService, 'stopEnvironment').and.returnValue(returnPromise(true));
+ const visitUrl = spyOnDependency(deploymentStopComponent, 'visitUrl').and.returnValue(true);
+ vm = mockStopEnvironment();
+
+ expect(window.confirm).toHaveBeenCalled();
+ expect(MRWidgetService.stopEnvironment).toHaveBeenCalledWith(deploymentMockData.stop_url);
+ setTimeout(() => {
+ expect(visitUrl).toHaveBeenCalledWith(url);
+ done();
+ }, 333);
+ });
+
+ it('should show a confirm dialog but should not work if the dialog is rejected', () => {
+ spyOn(window, 'confirm').and.returnValue(false);
+ spyOn(MRWidgetService, 'stopEnvironment').and.returnValue(returnPromise(false));
+ vm = mockStopEnvironment();
+
+ expect(window.confirm).toHaveBeenCalled();
+ expect(MRWidgetService.stopEnvironment).not.toHaveBeenCalled();
+ });
+ });
+ });
+});
diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js
index 99de320ca2b..d15c3552b4a 100644
--- a/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js
+++ b/spec/javascripts/vue_mr_widget/components/mr_widget_memory_usage_spec.js
@@ -1,5 +1,5 @@
import Vue from 'vue';
-import MemoryUsage from '~/vue_merge_request_widget/components/memory_usage.vue';
+import MemoryUsage from '~/vue_merge_request_widget/components/deployment/memory_usage.vue';
import MRWidgetService from '~/vue_merge_request_widget/services/mr_widget_service';
const url = '/root/acets-review-apps/environments/15/deployments/1/metrics';
diff --git a/spec/javascripts/vue_mr_widget/components/review_app_link_spec.js b/spec/javascripts/vue_mr_widget/components/review_app_link_spec.js
index 069bc14e01e..d8d84d087bc 100644
--- a/spec/javascripts/vue_mr_widget/components/review_app_link_spec.js
+++ b/spec/javascripts/vue_mr_widget/components/review_app_link_spec.js
@@ -8,6 +8,7 @@ describe('review app link', () => {
const props = {
link: '/review',
cssClass: 'js-link',
+ isCurrent: true,
};
let vm;
let el;
diff --git a/spec/javascripts/vue_mr_widget/mock_data.js b/spec/javascripts/vue_mr_widget/mock_data.js
index 40bec001ffe..ff34dafa660 100644
--- a/spec/javascripts/vue_mr_widget/mock_data.js
+++ b/spec/javascripts/vue_mr_widget/mock_data.js
@@ -1,3 +1,5 @@
+import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
+
export default {
id: 132,
iid: 22,
@@ -290,15 +292,20 @@ export const mockStore = {
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' }, { id: 1, name: 'prod-docs' }],
+ postMergeDeployments: [
+ { id: 0, name: 'prod', status: SUCCESS },
+ { id: 1, name: 'prod-docs', status: SUCCESS },
+ ],
troubleshootingDocsPath: 'troubleshooting-docs-path',
ciStatus: 'ci-status',
hasCI: true,
diff --git a/spec/javascripts/vue_mr_widget/mr_widget_options_spec.js b/spec/javascripts/vue_mr_widget/mr_widget_options_spec.js
index 30e0504e4e1..604b21e77fe 100644
--- a/spec/javascripts/vue_mr_widget/mr_widget_options_spec.js
+++ b/spec/javascripts/vue_mr_widget/mr_widget_options_spec.js
@@ -6,6 +6,7 @@ import { stateKey } from '~/vue_merge_request_widget/stores/state_maps';
import mountComponent from 'spec/helpers/vue_mount_component_helper';
import mockData from './mock_data';
import { faviconDataUrl, overlayDataUrl } from '../lib/utils/mock_data';
+import { SUCCESS } from '~/vue_merge_request_widget/components/deployment/constants';
const returnPromise = data =>
new Promise(resolve => {
@@ -277,7 +278,9 @@ describe('mrWidgetOptions', () => {
describe('fetchDeployments', () => {
it('should fetch deployments', done => {
- spyOn(vm.service, 'fetchDeployments').and.returnValue(returnPromise([{ id: 1 }]));
+ spyOn(vm.service, 'fetchDeployments').and.returnValue(
+ returnPromise([{ id: 1, status: SUCCESS }]),
+ );
vm.fetchPreMergeDeployments();
@@ -554,7 +557,7 @@ describe('mrWidgetOptions', () => {
deployed_at: '2017-03-22T22:44:42.258Z',
deployed_at_formatted: 'Mar 22, 2017 10:44pm',
changes,
- status: 'success',
+ status: SUCCESS,
};
beforeEach(done => {