summaryrefslogtreecommitdiff
path: root/spec/frontend/pages
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-06 09:18:56 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-06 09:18:56 +0000
commitc06178d51ad9b8d4ce665047873615facfc9c1c5 (patch)
tree2a1acfea73fd0fbdd7d0e240fd7ac52224845f99 /spec/frontend/pages
parent0a0e8803b0e3e2fb83d74c9bafc32f4e9d825bcc (diff)
downloadgitlab-ce-c06178d51ad9b8d4ce665047873615facfc9c1c5.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/pages')
-rw-r--r--spec/frontend/pages/projects/new/components/app_spec.js77
-rw-r--r--spec/frontend/pages/projects/new/components/new_project_push_tip_popover_spec.js75
2 files changed, 152 insertions, 0 deletions
diff --git a/spec/frontend/pages/projects/new/components/app_spec.js b/spec/frontend/pages/projects/new/components/app_spec.js
new file mode 100644
index 00000000000..b604e636243
--- /dev/null
+++ b/spec/frontend/pages/projects/new/components/app_spec.js
@@ -0,0 +1,77 @@
+import { shallowMount } from '@vue/test-utils';
+import { assignGitlabExperiment } from 'helpers/experimentation_helper';
+import App from '~/pages/projects/new/components/app.vue';
+import NewNamespacePage from '~/vue_shared/new_namespace/new_namespace_page.vue';
+
+describe('Experimental new project creation app', () => {
+ let wrapper;
+
+ const findNewNamespacePage = () => wrapper.findComponent(NewNamespacePage);
+
+ const createComponent = (propsData) => {
+ wrapper = shallowMount(App, { propsData });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('new_repo experiment', () => {
+ it('passes new_repo experiment', () => {
+ createComponent();
+
+ expect(findNewNamespacePage().props().experiment).toBe('new_repo');
+ });
+
+ describe('when in the candidate variant', () => {
+ assignGitlabExperiment('new_repo', 'candidate');
+
+ it('has "repository" in the panel title', () => {
+ createComponent();
+
+ expect(findNewNamespacePage().props().panels[0].title).toBe(
+ 'Create blank project/repository',
+ );
+ });
+ });
+
+ describe('when in the control variant', () => {
+ assignGitlabExperiment('new_repo', 'control');
+
+ it('has "project" in the panel title', () => {
+ createComponent();
+
+ expect(findNewNamespacePage().props().panels[0].title).toBe('Create blank project');
+ });
+ });
+ });
+
+ it('passes custom new project guideline text to underlying component', () => {
+ const DEMO_GUIDELINES = 'Demo guidelines';
+ const guidelineSelector = '#new-project-guideline';
+ createComponent({
+ newProjectGuidelines: DEMO_GUIDELINES,
+ });
+
+ expect(wrapper.find(guidelineSelector).text()).toBe(DEMO_GUIDELINES);
+ });
+
+ it.each`
+ isCiCdAvailable | outcome
+ ${false} | ${'do not show CI/CD panel'}
+ ${true} | ${'show CI/CD panel'}
+ `('$outcome when isCiCdAvailable is $isCiCdAvailable', ({ isCiCdAvailable }) => {
+ createComponent({
+ isCiCdAvailable,
+ });
+
+ expect(
+ Boolean(
+ wrapper
+ .findComponent(NewNamespacePage)
+ .props()
+ .panels.find((p) => p.name === 'cicd_for_external_repo'),
+ ),
+ ).toBe(isCiCdAvailable);
+ });
+});
diff --git a/spec/frontend/pages/projects/new/components/new_project_push_tip_popover_spec.js b/spec/frontend/pages/projects/new/components/new_project_push_tip_popover_spec.js
new file mode 100644
index 00000000000..d4cf8c78600
--- /dev/null
+++ b/spec/frontend/pages/projects/new/components/new_project_push_tip_popover_spec.js
@@ -0,0 +1,75 @@
+import { GlPopover, GlFormInputGroup } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+import NewProjectPushTipPopover from '~/pages/projects/new/components/new_project_push_tip_popover.vue';
+import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
+
+describe('New project push tip popover', () => {
+ let wrapper;
+ const targetId = 'target';
+ const pushToCreateProjectCommand = 'command';
+ const workingWithProjectsHelpPath = 'path';
+
+ const findPopover = () => wrapper.findComponent(GlPopover);
+ const findClipboardButton = () => wrapper.findComponent(ClipboardButton);
+ const findFormInput = () => wrapper.findComponent(GlFormInputGroup);
+ const findHelpLink = () => wrapper.find('a');
+ const findTarget = () => document.getElementById(targetId);
+
+ const buildWrapper = () => {
+ wrapper = shallowMount(NewProjectPushTipPopover, {
+ propsData: {
+ target: findTarget(),
+ },
+ stubs: {
+ GlFormInputGroup,
+ },
+ provide: {
+ pushToCreateProjectCommand,
+ workingWithProjectsHelpPath,
+ },
+ });
+ };
+
+ beforeEach(() => {
+ setFixtures(`<a id="${targetId}"></a>`);
+ buildWrapper();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('renders popover that targets the specified target', () => {
+ expect(findPopover().props()).toMatchObject({
+ target: findTarget(),
+ triggers: 'click blur',
+ placement: 'top',
+ title: 'Push to create a project',
+ });
+ });
+
+ it('renders a readonly form input with the push to create command', () => {
+ expect(findFormInput().props()).toMatchObject({
+ value: pushToCreateProjectCommand,
+ selectOnClick: true,
+ });
+ expect(findFormInput().attributes()).toMatchObject({
+ 'aria-label': 'Push project from command line',
+ readonly: 'readonly',
+ });
+ });
+
+ it('allows copying the push command using the clipboard button', () => {
+ expect(findClipboardButton().props()).toMatchObject({
+ text: pushToCreateProjectCommand,
+ tooltipPlacement: 'right',
+ title: 'Copy command',
+ });
+ });
+
+ it('displays a link to open the push command help page reference', () => {
+ expect(findHelpLink().attributes().href).toBe(
+ `${workingWithProjectsHelpPath}#push-to-create-a-new-project`,
+ );
+ });
+});