Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/environments/new_environment_item_spec.js')
-rw-r--r--spec/frontend/environments/new_environment_item_spec.js185
1 files changed, 167 insertions, 18 deletions
diff --git a/spec/frontend/environments/new_environment_item_spec.js b/spec/frontend/environments/new_environment_item_spec.js
index 244aef5c43b..db596688dad 100644
--- a/spec/frontend/environments/new_environment_item_spec.js
+++ b/spec/frontend/environments/new_environment_item_spec.js
@@ -2,12 +2,14 @@ import VueApollo from 'vue-apollo';
import Vue from 'vue';
import { GlCollapse, GlIcon } from '@gitlab/ui';
import createMockApollo from 'helpers/mock_apollo_helper';
-import { mountExtended } from 'helpers/vue_test_utils_helper';
+import { mountExtended, extendedWrapper } from 'helpers/vue_test_utils_helper';
import { stubTransition } from 'helpers/stub_transition';
-import { __, s__ } from '~/locale';
+import { formatDate, getTimeago } from '~/lib/utils/datetime_utility';
+import { __, s__, sprintf } from '~/locale';
import EnvironmentItem from '~/environments/components/new_environment_item.vue';
import Deployment from '~/environments/components/deployment.vue';
-import { resolvedEnvironment } from './graphql/mock_data';
+import DeployBoardWrapper from '~/environments/components/deploy_board_wrapper.vue';
+import { resolvedEnvironment, rolloutStatus } from './graphql/mock_data';
Vue.use(VueApollo);
@@ -22,11 +24,19 @@ describe('~/environments/components/new_environment_item.vue', () => {
mountExtended(EnvironmentItem, {
apolloProvider,
propsData: { environment: resolvedEnvironment, ...propsData },
+ provide: { helpPagePath: '/help' },
stubs: { transition: stubTransition() },
});
const findDeployment = () => wrapper.findComponent(Deployment);
+ const expandCollapsedSection = async () => {
+ const button = wrapper.findByRole('button', { name: __('Expand') });
+ await button.trigger('click');
+
+ return button;
+ };
+
afterEach(() => {
wrapper?.destroy();
});
@@ -165,25 +175,92 @@ describe('~/environments/components/new_environment_item.vue', () => {
});
describe('pin', () => {
- it('shows the option to pin the environment if there is an autostop date', () => {
- wrapper = createWrapper({
- propsData: {
- environment: { ...resolvedEnvironment, autoStopAt: new Date(Date.now() + 100000) },
- },
- apolloProvider: createApolloProvider(),
+ describe('with autostop', () => {
+ let environment;
+
+ beforeEach(() => {
+ environment = {
+ ...resolvedEnvironment,
+ autoStopAt: new Date(Date.now() + 100000).toString(),
+ };
+ wrapper = createWrapper({
+ propsData: {
+ environment,
+ },
+ apolloProvider: createApolloProvider(),
+ });
});
- const rollback = wrapper.findByRole('menuitem', { name: __('Prevent auto-stopping') });
+ it('shows the option to pin the environment if there is an autostop date', () => {
+ const pin = wrapper.findByRole('menuitem', { name: __('Prevent auto-stopping') });
- expect(rollback.exists()).toBe(true);
+ expect(pin.exists()).toBe(true);
+ });
+
+ it('shows when the environment auto stops', () => {
+ const autoStop = wrapper.findByTitle(formatDate(environment.autoStopAt));
+
+ expect(autoStop.text()).toBe('in 1 minute');
+ });
});
- it('does not show the option to pin the environment if there is no autostop date', () => {
- wrapper = createWrapper({ apolloProvider: createApolloProvider() });
+ describe('without autostop', () => {
+ beforeEach(() => {
+ wrapper = createWrapper({ apolloProvider: createApolloProvider() });
+ });
- const rollback = wrapper.findByRole('menuitem', { name: __('Prevent auto-stopping') });
+ it('does not show the option to pin the environment if there is no autostop date', () => {
+ wrapper = createWrapper({ apolloProvider: createApolloProvider() });
- expect(rollback.exists()).toBe(false);
+ const pin = wrapper.findByRole('menuitem', { name: __('Prevent auto-stopping') });
+
+ expect(pin.exists()).toBe(false);
+ });
+
+ it('does not show when the environment auto stops', () => {
+ const autoStop = wrapper.findByText(
+ sprintf(s__('Environment|Auto stop %{time}'), {
+ time: getTimeago().format(resolvedEnvironment.autoStopAt),
+ }),
+ );
+
+ expect(autoStop.exists()).toBe(false);
+ });
+ });
+
+ describe('with past autostop', () => {
+ let environment;
+
+ beforeEach(() => {
+ environment = {
+ ...resolvedEnvironment,
+ autoStopAt: new Date(Date.now() - 100000).toString(),
+ };
+ wrapper = createWrapper({
+ propsData: {
+ environment,
+ },
+ apolloProvider: createApolloProvider(),
+ });
+ });
+
+ it('does not show the option to pin the environment if there is no autostop date', () => {
+ wrapper = createWrapper({ apolloProvider: createApolloProvider() });
+
+ const pin = wrapper.findByRole('menuitem', { name: __('Prevent auto-stopping') });
+
+ expect(pin.exists()).toBe(false);
+ });
+
+ it('does not show when the environment auto stops', () => {
+ const autoStop = wrapper.findByText(
+ sprintf(s__('Environment|Auto stop %{time}'), {
+ time: getTimeago().format(environment.autoStopAt),
+ }),
+ );
+
+ expect(autoStop.exists()).toBe(false);
+ });
});
});
@@ -258,14 +335,12 @@ describe('~/environments/components/new_environment_item.vue', () => {
describe('collapse', () => {
let icon;
let collapse;
- let button;
let environmentName;
beforeEach(() => {
wrapper = createWrapper({ apolloProvider: createApolloProvider() });
collapse = wrapper.findComponent(GlCollapse);
icon = wrapper.findComponent(GlIcon);
- button = wrapper.findByRole('button', { name: __('Expand') });
environmentName = wrapper.findByText(resolvedEnvironment.name);
});
@@ -278,7 +353,7 @@ describe('~/environments/components/new_environment_item.vue', () => {
it('opens on click', async () => {
expect(findDeployment().isVisible()).toBe(false);
- await button.trigger('click');
+ const button = await expandCollapsedSection();
expect(button.attributes('aria-label')).toBe(__('Collapse'));
expect(collapse.attributes('visible')).toBe('visible');
@@ -338,4 +413,78 @@ describe('~/environments/components/new_environment_item.vue', () => {
expect(deployment.exists()).toBe(false);
});
});
+
+ describe('empty state', () => {
+ it('should link to documentation', async () => {
+ const environment = {
+ ...resolvedEnvironment,
+ lastDeployment: null,
+ upcomingDeployment: null,
+ };
+
+ wrapper = createWrapper({
+ propsData: { environment },
+ apolloProvider: createApolloProvider(),
+ });
+
+ await expandCollapsedSection();
+
+ const text = s__(
+ 'Environments|There are no deployments for this environment yet. Learn more about setting up deployments.',
+ );
+
+ const emptyState = wrapper.findByText((_content, element) => element.textContent === text);
+
+ const link = extendedWrapper(emptyState).findByRole('link');
+
+ expect(link.attributes('href')).toBe('/help');
+ });
+
+ it('should not link to the documentation when there are deployments', async () => {
+ wrapper = createWrapper({
+ apolloProvider: createApolloProvider(),
+ });
+
+ await expandCollapsedSection();
+
+ const text = s__(
+ 'Environments|There are no deployments for this environment yet. Learn more about setting up deployments.',
+ );
+
+ const emptyState = wrapper.findByText((_content, element) => element.textContent === text);
+
+ expect(emptyState.exists()).toBe(false);
+ });
+ });
+
+ describe('deploy boards', () => {
+ it('should show a deploy board if the environment has a rollout status', async () => {
+ const environment = {
+ ...resolvedEnvironment,
+ rolloutStatus,
+ };
+
+ wrapper = createWrapper({
+ propsData: { environment },
+ apolloProvider: createApolloProvider(),
+ });
+
+ await expandCollapsedSection();
+
+ const deployBoard = wrapper.findComponent(DeployBoardWrapper);
+ expect(deployBoard.exists()).toBe(true);
+ expect(deployBoard.props('rolloutStatus')).toBe(rolloutStatus);
+ });
+
+ it('should not show a deploy board if the environment has no rollout status', async () => {
+ wrapper = createWrapper({
+ apolloProvider: createApolloProvider(),
+ });
+
+ await expandCollapsedSection();
+
+ const deployBoard = wrapper.findComponent(DeployBoardWrapper);
+ expect(deployBoard.exists()).toBe(false);
+ });
+ });
});