diff --git a/app/assets/javascripts/projects/new_v2/components/app.vue b/app/assets/javascripts/projects/new_v2/components/app.vue index 91b3551c237ed50195cc61692e001c8fccdf016b..6f912ed7a548db1cb7b658ccb00c46f1ab1060f3 100644 --- a/app/assets/javascripts/projects/new_v2/components/app.vue +++ b/app/assets/javascripts/projects/new_v2/components/app.vue @@ -7,6 +7,7 @@ import SingleChoiceSelector from '~/vue_shared/components/single_choice_selector import SingleChoiceSelectorItem from '~/vue_shared/components/single_choice_selector_item.vue'; import NewProjectDestinationSelect from './project_destination_select.vue'; +import Breadcrumb from './form_breadcrumb.vue'; import CommandLine from './command_line.vue'; const OPTIONS = { @@ -68,6 +69,7 @@ export default { SingleChoiceSelector, SingleChoiceSelectorItem, NewProjectDestinationSelect, + Breadcrumb, CommandLine, }, directives: { @@ -189,75 +191,78 @@ export default { diff --git a/app/assets/javascripts/projects/new_v2/components/form_breadcrumb.vue b/app/assets/javascripts/projects/new_v2/components/form_breadcrumb.vue new file mode 100644 index 0000000000000000000000000000000000000000..8979b802373ba64ba60b2b2e159259c64cce9cfc --- /dev/null +++ b/app/assets/javascripts/projects/new_v2/components/form_breadcrumb.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/assets/javascripts/projects/new_v2/index.js b/app/assets/javascripts/projects/new_v2/index.js index 1e039e3a44b3f9ed089744355ee43288410de483..204451672e9524ac300b053caef0ff7c378063d3 100644 --- a/app/assets/javascripts/projects/new_v2/index.js +++ b/app/assets/javascripts/projects/new_v2/index.js @@ -50,10 +50,15 @@ export function initNewProjectForm() { }; const provide = { - userNamespaceId, canCreateProject: parseBoolean(canCreateProject), projectHelpPath, pushToCreateProjectCommand, + namespaceId, + userNamespaceId, + rootPath, + parentGroupUrl, + parentGroupName, + projectsUrl, }; return new Vue({ diff --git a/spec/frontend/projects/new_v2/components/app_spec.js b/spec/frontend/projects/new_v2/components/app_spec.js index f616fd060320bdfc96f8c667aca7505cf2104238..b8b3ada84a8e3fbeef9d207e12285cb7697c4ab7 100644 --- a/spec/frontend/projects/new_v2/components/app_spec.js +++ b/spec/frontend/projects/new_v2/components/app_spec.js @@ -1,6 +1,7 @@ import { GlAlert } from '@gitlab/ui'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import App from '~/projects/new_v2/components/app.vue'; +import FormBreadcrumb from '~/projects/new_v2/components/form_breadcrumb.vue'; import CommandLine from '~/projects/new_v2/components/command_line.vue'; import MultiStepFormTemplate from '~/vue_shared/components/multi_step_form_template.vue'; import SingleChoiceSelector from '~/vue_shared/components/single_choice_selector.vue'; @@ -26,10 +27,17 @@ describe('New project creation app', () => { }; const findMultiStepForm = () => wrapper.findComponent(MultiStepFormTemplate); + const findBreadcrumbs = () => wrapper.findComponent(FormBreadcrumb); const findSingleChoiceSelector = () => wrapper.findComponent(SingleChoiceSelector); const findAlert = () => wrapper.findComponent(GlAlert); const findCommandLine = () => wrapper.findComponent(CommandLine); + it('renders breadcrumbs', () => { + createComponent(); + + expect(findBreadcrumbs().exists()).toBe(true); + }); + it('renders a form', () => { createComponent(); diff --git a/spec/frontend/projects/new_v2/components/form_breadcrumb_spec.js b/spec/frontend/projects/new_v2/components/form_breadcrumb_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..42f7c833b01589cc84a8ef4d5e79f82e63199897 --- /dev/null +++ b/spec/frontend/projects/new_v2/components/form_breadcrumb_spec.js @@ -0,0 +1,38 @@ +import { GlBreadcrumb } from '@gitlab/ui'; +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import FormBreadcrumb from '~/projects/new_v2/components/form_breadcrumb.vue'; + +describe('New project form breadcrumbs', () => { + let wrapper; + + const createComponent = (props = {}) => { + wrapper = shallowMountExtended(FormBreadcrumb, { + provide: { + rootPath: '/', + projectsUrl: '/dashboard/projects', + ...props, + }, + }); + }; + + const findBreadcrumb = () => wrapper.findComponent(GlBreadcrumb); + + it('renders personal namespace breadcrumbs', () => { + createComponent({ parentGroupUrl: null, parentGroupName: null }); + + expect(findBreadcrumb().props('items')).toStrictEqual([ + { text: 'Your work', href: '/' }, + { text: 'Projects', href: '/dashboard/projects' }, + { text: 'New project', href: '#' }, + ]); + }); + + it('renders group namespace breadcrumbs', () => { + createComponent({ parentGroupUrl: '/group/projects', parentGroupName: 'test group' }); + + expect(findBreadcrumb().props('items')).toStrictEqual([ + { text: 'test group', href: '/group/projects' }, + { text: 'New project', href: '#' }, + ]); + }); +});