summaryrefslogtreecommitdiff
path: root/spec/frontend/environments
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/environments')
-rw-r--r--spec/frontend/environments/enable_review_app_modal_spec.js (renamed from spec/frontend/environments/enable_review_app_button_spec.js)20
-rw-r--r--spec/frontend/environments/environment_actions_spec.js15
-rw-r--r--spec/frontend/environments/environments_app_spec.js99
-rw-r--r--spec/frontend/environments/folder/environments_folder_view_spec.js17
4 files changed, 111 insertions, 40 deletions
diff --git a/spec/frontend/environments/enable_review_app_button_spec.js b/spec/frontend/environments/enable_review_app_modal_spec.js
index 5549a1737fc..7ea49a6e1d0 100644
--- a/spec/frontend/environments/enable_review_app_button_spec.js
+++ b/spec/frontend/environments/enable_review_app_modal_spec.js
@@ -1,6 +1,6 @@
-import { shallowMount, mount } from '@vue/test-utils';
+import { shallowMount } from '@vue/test-utils';
import ModalCopyButton from '~/vue_shared/components/modal_copy_button.vue';
-import EnableReviewAppButton from '~/environments/components/enable_review_app_button.vue';
+import EnableReviewAppButton from '~/environments/components/enable_review_app_modal.vue';
describe('Enable Review App Button', () => {
let wrapper;
@@ -9,19 +9,13 @@ describe('Enable Review App Button', () => {
wrapper.destroy();
});
- describe('renders button with text', () => {
- beforeEach(() => {
- wrapper = mount(EnableReviewAppButton);
- });
-
- it('renders Enable Review text', () => {
- expect(wrapper.text()).toBe('Enable review app');
- });
- });
-
describe('renders the modal', () => {
beforeEach(() => {
- wrapper = shallowMount(EnableReviewAppButton);
+ wrapper = shallowMount(EnableReviewAppButton, {
+ propsData: {
+ modalId: 'fake-id',
+ },
+ });
});
it('renders the copyToClipboard button', () => {
diff --git a/spec/frontend/environments/environment_actions_spec.js b/spec/frontend/environments/environment_actions_spec.js
index ebdc4923045..d305f5e90bd 100644
--- a/spec/frontend/environments/environment_actions_spec.js
+++ b/spec/frontend/environments/environment_actions_spec.js
@@ -1,14 +1,22 @@
import { shallowMount } from '@vue/test-utils';
import { TEST_HOST } from 'helpers/test_constants';
import { GlLoadingIcon, GlIcon } from '@gitlab/ui';
+import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
import eventHub from '~/environments/event_hub';
import EnvironmentActions from '~/environments/components/environment_actions.vue';
describe('EnvironmentActions Component', () => {
let vm;
+ const findEnvironmentActionsButton = () => vm.find('[data-testid="environment-actions-button"]');
+
beforeEach(() => {
- vm = shallowMount(EnvironmentActions, { propsData: { actions: [] } });
+ vm = shallowMount(EnvironmentActions, {
+ propsData: { actions: [] },
+ directives: {
+ GlTooltip: createMockDirective(),
+ },
+ });
});
afterEach(() => {
@@ -23,6 +31,11 @@ describe('EnvironmentActions Component', () => {
expect(vm.find('.dropdown-new').attributes('aria-label')).toEqual('Deploy to...');
});
+ it('should render a tooltip', () => {
+ const tooltip = getBinding(findEnvironmentActionsButton().element, 'gl-tooltip');
+ expect(tooltip).toBeDefined();
+ });
+
describe('is loading', () => {
beforeEach(() => {
vm.setData({ isLoading: true });
diff --git a/spec/frontend/environments/environments_app_spec.js b/spec/frontend/environments/environments_app_spec.js
index fe32bf918dd..bb114e31063 100644
--- a/spec/frontend/environments/environments_app_spec.js
+++ b/spec/frontend/environments/environments_app_spec.js
@@ -1,9 +1,11 @@
import { mount, shallowMount } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
+import { extendedWrapper } from 'helpers/vue_test_utils_helper';
+import EnableReviewAppModal from '~/environments/components/enable_review_app_modal.vue';
import Container from '~/environments/components/container.vue';
import EmptyState from '~/environments/components/empty_state.vue';
import EnvironmentsApp from '~/environments/components/environments_app.vue';
+import axios from '~/lib/utils/axios_utils';
import { environment, folder } from './mock_data';
describe('Environment', () => {
@@ -34,12 +36,18 @@ describe('Environment', () => {
});
};
- const createWrapper = (shallow = false) => {
+ const createWrapper = (shallow = false, props = {}) => {
const fn = shallow ? shallowMount : mount;
- wrapper = fn(EnvironmentsApp, { propsData: mockData });
+ wrapper = extendedWrapper(fn(EnvironmentsApp, { propsData: { ...mockData, ...props } }));
return axios.waitForAll();
};
+ const findEnableReviewAppButton = () => wrapper.findByTestId('enable-review-app');
+ const findEnableReviewAppModal = () => wrapper.findAll(EnableReviewAppModal);
+ const findNewEnvironmentButton = () => wrapper.findByTestId('new-environment');
+ const findEnvironmentsTabAvailable = () => wrapper.find('.js-environments-tab-available > a');
+ const findEnvironmentsTabStopped = () => wrapper.find('.js-environments-tab-stopped > a');
+
beforeEach(() => {
mock = new MockAdapter(axios);
});
@@ -59,19 +67,6 @@ describe('Environment', () => {
it('should render the empty state', () => {
expect(wrapper.find(EmptyState).exists()).toBe(true);
});
-
- describe('when it is possible to enable a review app', () => {
- beforeEach(() => {
- mockRequest(200, { environments: [], review_app: { can_setup_review_app: true } });
- return createWrapper();
- });
-
- it('should render the enable review app button', () => {
- expect(wrapper.find('.js-enable-review-app-button').text()).toContain(
- 'Enable review app',
- );
- });
- });
});
describe('with paginated environments', () => {
@@ -86,7 +81,7 @@ describe('Environment', () => {
return createWrapper();
});
- it('should render a conatiner table with environments', () => {
+ it('should render a container table with environments', () => {
const containerTable = wrapper.find(Container);
expect(containerTable.exists()).toBe(true);
@@ -108,9 +103,16 @@ describe('Environment', () => {
it('should make an API request when using tabs', () => {
jest.spyOn(wrapper.vm, 'updateContent').mockImplementation(() => {});
- wrapper.find('.js-environments-tab-stopped').trigger('click');
+ findEnvironmentsTabStopped().trigger('click');
expect(wrapper.vm.updateContent).toHaveBeenCalledWith({ scope: 'stopped', page: '1' });
});
+
+ it('should not make the same API request when clicking on the current scope tab', () => {
+ // component starts at available
+ jest.spyOn(wrapper.vm, 'updateContent').mockImplementation(() => {});
+ findEnvironmentsTabAvailable().trigger('click');
+ expect(wrapper.vm.updateContent).toHaveBeenCalledTimes(0);
+ });
});
});
});
@@ -165,4 +167,65 @@ describe('Environment', () => {
expect(wrapper.find('.text-center > a.btn').text()).toContain('Show all');
});
});
+
+ describe('environment button', () => {
+ describe('when user can create environment', () => {
+ beforeEach(() => {
+ mockRequest(200, { environments: [] });
+ return createWrapper(true);
+ });
+
+ it('should render', () => {
+ expect(findNewEnvironmentButton().exists()).toBe(true);
+ });
+ });
+
+ describe('when user can not create environment', () => {
+ beforeEach(() => {
+ mockRequest(200, { environments: [] });
+ return createWrapper(true, { ...mockData, canCreateEnvironment: false });
+ });
+
+ it('should not render', () => {
+ expect(findNewEnvironmentButton().exists()).toBe(false);
+ });
+ });
+ });
+
+ describe('review app modal', () => {
+ describe('when it is not possible to enable a review app', () => {
+ beforeEach(() => {
+ mockRequest(200, { environments: [] });
+ return createWrapper(true);
+ });
+
+ it('should not render the enable review app button', () => {
+ expect(findEnableReviewAppButton().exists()).toBe(false);
+ });
+
+ it('should not render a review app modal', () => {
+ const modal = findEnableReviewAppModal();
+ expect(modal).toHaveLength(0);
+ expect(modal.exists()).toBe(false);
+ });
+ });
+
+ describe('when it is possible to enable a review app', () => {
+ beforeEach(() => {
+ mockRequest(200, { environments: [], review_app: { can_setup_review_app: true } });
+ return createWrapper(true);
+ });
+
+ it('should render the enable review app button', () => {
+ expect(findEnableReviewAppButton().exists()).toBe(true);
+ expect(findEnableReviewAppButton().text()).toContain('Enable review app');
+ });
+
+ it('should render only one review app modal', () => {
+ const modal = findEnableReviewAppModal();
+ expect(modal).toHaveLength(1);
+ expect(modal.at(0).exists()).toBe(true);
+ });
+ });
+ });
});
diff --git a/spec/frontend/environments/folder/environments_folder_view_spec.js b/spec/frontend/environments/folder/environments_folder_view_spec.js
index f33c8de0094..f55cb851dde 100644
--- a/spec/frontend/environments/folder/environments_folder_view_spec.js
+++ b/spec/frontend/environments/folder/environments_folder_view_spec.js
@@ -1,10 +1,10 @@
+import { GlPagination } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter';
import { removeBreakLine, removeWhitespace } from 'helpers/text_helper';
-import { GlPagination } from '@gitlab/ui';
-import axios from '~/lib/utils/axios_utils';
-import EnvironmentsFolderViewComponent from '~/environments/folder/environments_folder_view.vue';
import EnvironmentTable from '~/environments/components/environments_table.vue';
+import EnvironmentsFolderViewComponent from '~/environments/folder/environments_folder_view.vue';
+import axios from '~/lib/utils/axios_utils';
import { environmentsList } from '../mock_data';
describe('Environments Folder View', () => {
@@ -46,9 +46,10 @@ describe('Environments Folder View', () => {
wrapper = mount(EnvironmentsFolderViewComponent, { propsData: mockData });
};
- const findEnvironmentsTabAvailable = () => wrapper.find('.js-environments-tab-available');
+ const findEnvironmentsTabAvailable = () =>
+ wrapper.find('[data-testid="environments-tab-available"]');
- const findEnvironmentsTabStopped = () => wrapper.find('.js-environments-tab-stopped');
+ const findEnvironmentsTabStopped = () => wrapper.find('[data-testid="environments-tab-stopped"]');
beforeEach(() => {
mock = new MockAdapter(axios);
@@ -88,9 +89,9 @@ describe('Environments Folder View', () => {
});
it('should render parent folder name', () => {
- expect(removeBreakLine(removeWhitespace(wrapper.find('.js-folder-name').text()))).toContain(
- 'Environments / review',
- );
+ expect(
+ removeBreakLine(removeWhitespace(wrapper.find('[data-testid="folder-name"]').text())),
+ ).toContain('Environments / review');
});
describe('pagination', () => {