summaryrefslogtreecommitdiff
path: root/spec/frontend/vue_shared/components/web_ide_link_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/vue_shared/components/web_ide_link_spec.js')
-rw-r--r--spec/frontend/vue_shared/components/web_ide_link_spec.js155
1 files changed, 146 insertions, 9 deletions
diff --git a/spec/frontend/vue_shared/components/web_ide_link_spec.js b/spec/frontend/vue_shared/components/web_ide_link_spec.js
index 92938b2717f..659d93d6597 100644
--- a/spec/frontend/vue_shared/components/web_ide_link_spec.js
+++ b/spec/frontend/vue_shared/components/web_ide_link_spec.js
@@ -1,11 +1,18 @@
-import { shallowMount } from '@vue/test-utils';
+import { GlModal } from '@gitlab/ui';
+import { nextTick } from 'vue';
+
import ActionsButton from '~/vue_shared/components/actions_button.vue';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
import WebIdeLink from '~/vue_shared/components/web_ide_link.vue';
+import { stubComponent } from 'helpers/stub_component';
+import { shallowMountExtended, mountExtended } from 'helpers/vue_test_utils_helper';
+
const TEST_EDIT_URL = '/gitlab-test/test/-/edit/main/';
const TEST_WEB_IDE_URL = '/-/ide/project/gitlab-test/test/edit/main/-/';
const TEST_GITPOD_URL = 'https://gitpod.test/';
+const TEST_USER_PREFERENCES_GITPOD_PATH = '/-/profile/preferences#user_gitpod_enabled';
+const TEST_USER_PROFILE_ENABLE_GITPOD_PATH = '/-/profile?user%5Bgitpod_enabled%5D=true';
const ACTION_EDIT = {
href: TEST_EDIT_URL,
@@ -54,21 +61,31 @@ const ACTION_GITPOD = {
};
const ACTION_GITPOD_ENABLE = {
...ACTION_GITPOD,
- href: '#modal-enable-gitpod',
+ href: undefined,
handle: expect.any(Function),
};
describe('Web IDE link component', () => {
let wrapper;
- function createComponent(props) {
- wrapper = shallowMount(WebIdeLink, {
+ function createComponent(props, mountFn = shallowMountExtended) {
+ wrapper = mountFn(WebIdeLink, {
propsData: {
editUrl: TEST_EDIT_URL,
webIdeUrl: TEST_WEB_IDE_URL,
gitpodUrl: TEST_GITPOD_URL,
...props,
},
+ stubs: {
+ GlModal: stubComponent(GlModal, {
+ template: `
+ <div>
+ <slot name="modal-title"></slot>
+ <slot></slot>
+ <slot name="modal-footer"></slot>
+ </div>`,
+ }),
+ },
});
}
@@ -78,6 +95,7 @@ describe('Web IDE link component', () => {
const findActionsButton = () => wrapper.find(ActionsButton);
const findLocalStorageSync = () => wrapper.find(LocalStorageSync);
+ const findModal = () => wrapper.findComponent(GlModal);
it.each([
{
@@ -97,19 +115,68 @@ describe('Web IDE link component', () => {
expectedActions: [ACTION_WEB_IDE_CONFIRM_FORK, ACTION_EDIT_CONFIRM_FORK],
},
{
- props: { showWebIdeButton: false, showGitpodButton: true, gitpodEnabled: true },
+ props: {
+ showWebIdeButton: false,
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: true,
+ },
expectedActions: [ACTION_EDIT, ACTION_GITPOD],
},
{
- props: { showWebIdeButton: false, showGitpodButton: true, gitpodEnabled: false },
+ props: {
+ showWebIdeButton: false,
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ gitpodEnabled: true,
+ },
+ expectedActions: [ACTION_EDIT],
+ },
+ {
+ props: {
+ showWebIdeButton: false,
+ showGitpodButton: true,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: true,
+ },
+ expectedActions: [ACTION_EDIT],
+ },
+ {
+ props: {
+ showWebIdeButton: false,
+ showGitpodButton: true,
+ gitpodEnabled: true,
+ },
+ expectedActions: [ACTION_EDIT],
+ },
+ {
+ props: {
+ showWebIdeButton: false,
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: false,
+ },
expectedActions: [ACTION_EDIT, ACTION_GITPOD_ENABLE],
},
{
- props: { showGitpodButton: true, gitpodEnabled: false },
+ props: {
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: false,
+ },
expectedActions: [ACTION_WEB_IDE, ACTION_EDIT, ACTION_GITPOD_ENABLE],
},
{
- props: { showEditButton: false, showGitpodButton: true, gitpodText: 'Test Gitpod' },
+ props: {
+ showEditButton: false,
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodText: 'Test Gitpod',
+ },
expectedActions: [ACTION_WEB_IDE, { ...ACTION_GITPOD_ENABLE, text: 'Test Gitpod' }],
},
{
@@ -128,6 +195,8 @@ describe('Web IDE link component', () => {
showEditButton: false,
showWebIdeButton: true,
showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
gitpodEnabled: true,
});
});
@@ -174,7 +243,7 @@ describe('Web IDE link component', () => {
])(
'emits the correct event when an action handler is called',
async ({ props, expectedEventPayload }) => {
- createComponent({ ...props, needsToFork: true });
+ createComponent({ ...props, needsToFork: true, disableForkModal: true });
findActionsButton().props('actions')[0].handle();
@@ -182,4 +251,72 @@ describe('Web IDE link component', () => {
},
);
});
+
+ describe('when Gitpod is not enabled', () => {
+ it('renders closed modal to enable Gitpod', () => {
+ createComponent({
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: false,
+ });
+
+ const modal = findModal();
+
+ expect(modal.exists()).toBe(true);
+ expect(modal.props()).toMatchObject({
+ visible: false,
+ modalId: 'enable-gitpod-modal',
+ size: 'sm',
+ title: WebIdeLink.i18n.modal.title,
+ actionCancel: {
+ text: WebIdeLink.i18n.modal.actionCancelText,
+ },
+ actionPrimary: {
+ text: WebIdeLink.i18n.modal.actionPrimaryText,
+ attributes: {
+ variant: 'confirm',
+ category: 'primary',
+ href: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ 'data-method': 'put',
+ },
+ },
+ });
+ });
+
+ it('opens modal when `Gitpod` action is clicked', async () => {
+ const gitpodText = 'Open in Gitpod';
+
+ createComponent(
+ {
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: false,
+ gitpodText,
+ },
+ mountExtended,
+ );
+
+ findLocalStorageSync().vm.$emit('input', ACTION_GITPOD.key);
+
+ await nextTick();
+ await wrapper.findByRole('button', { name: gitpodText }).trigger('click');
+
+ expect(findModal().props('visible')).toBe(true);
+ });
+ });
+
+ describe('when Gitpod is enabled', () => {
+ it('does not render modal', () => {
+ createComponent({
+ showGitpodButton: true,
+ userPreferencesGitpodPath: TEST_USER_PREFERENCES_GITPOD_PATH,
+ userProfileEnableGitpodPath: TEST_USER_PROFILE_ENABLE_GITPOD_PATH,
+ gitpodEnabled: true,
+ });
+
+ expect(findModal().exists()).toBe(false);
+ });
+ });
});