From 36e48f9c4a81ad105d1dadd3966f4be620fba98b Mon Sep 17 00:00:00 2001 From: Chad Lavimoniere Date: Mon, 12 May 2025 14:35:09 -0400 Subject: [PATCH] Migrate Iterations breadcrumb to new injection method Changelog: changed EE: true --- .../components/iteration_breadcrumb.vue | 11 ++++++- ee/app/assets/javascripts/iterations/index.js | 11 ++++++- .../components/iteration_breadcrumb_spec.js | 30 +++++++++++++++++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/ee/app/assets/javascripts/iterations/components/iteration_breadcrumb.vue b/ee/app/assets/javascripts/iterations/components/iteration_breadcrumb.vue index d780af6a07529a..4233ac6373ea0f 100644 --- a/ee/app/assets/javascripts/iterations/components/iteration_breadcrumb.vue +++ b/ee/app/assets/javascripts/iterations/components/iteration_breadcrumb.vue @@ -38,6 +38,13 @@ export default { }, }, }, + props: { + staticBreadcrumbs: { + type: Object, + default: () => ({ items: [] }), + required: false, + }, + }, data() { return { cadenceTitle: '', @@ -69,7 +76,9 @@ export default { } }); - return breadcrumbs; + const staticBreadcrumbs = this.staticBreadcrumbs.items; + + return [...staticBreadcrumbs, ...breadcrumbs]; }, }, methods: { diff --git a/ee/app/assets/javascripts/iterations/index.js b/ee/app/assets/javascripts/iterations/index.js index c6f15797b57656..c4e71b3da4cd8d 100644 --- a/ee/app/assets/javascripts/iterations/index.js +++ b/ee/app/assets/javascripts/iterations/index.js @@ -51,7 +51,16 @@ export function initCadenceApp({ namespaceType }) { }, }); - injectVueAppBreadcrumbs(router, IterationBreadcrumb, apolloProvider); + injectVueAppBreadcrumbs( + router, + IterationBreadcrumb, + apolloProvider, + {}, + { + // Cf. https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186906 + singleNavOptIn: true, + }, + ); return new Vue({ el, diff --git a/ee/spec/frontend/iterations/components/iteration_breadcrumb_spec.js b/ee/spec/frontend/iterations/components/iteration_breadcrumb_spec.js index 35a608daa01719..201fa8a08bc140 100644 --- a/ee/spec/frontend/iterations/components/iteration_breadcrumb_spec.js +++ b/ee/spec/frontend/iterations/components/iteration_breadcrumb_spec.js @@ -63,7 +63,7 @@ describe('Iteration Breadcrumb', () => { router = createRouter({ base, permissions }); }; - const mountComponent = ({ requestHandlers = [], readCadenceSpy } = {}) => { + const mountComponent = ({ requestHandlers = [], readCadenceSpy, props = {} } = {}) => { mockApollo = createMockApollo([[readCadenceQuery, readCadenceSpy], ...requestHandlers]); wrapper = extendedWrapper( @@ -71,7 +71,7 @@ describe('Iteration Breadcrumb', () => { router, provide: { groupPath: '' }, apolloProvider: mockApollo, - propsData: {}, + propsData: props, }), ); }; @@ -126,6 +126,32 @@ describe('Iteration Breadcrumb', () => { { path: 'edit', text: 'Edit', to: `/${cadenceId}/iterations/${iterationId}/edit` }, ]); }); + + it('passes the static breadcrumbs to GlBreadcrumb if provided', async () => { + await router.push({ name: 'editIteration', params: { cadenceId, iterationId } }); + mountComponent({ + readCadenceSpy: jest.fn().mockResolvedValue(cadenceResponse), + props: { + staticBreadcrumbs: { + items: [{ text: 'Static breadcrumb', href: '/static' }], + }, + }, + }); + await waitForApollo(); + + expect(findBreadcrumb().props('items')).toEqual([ + { text: 'Static breadcrumb', href: '/static' }, + { path: '', text: 'Iteration cadences', to: '/' }, + { path: '1234', text: 'cadenceTitle', to: '/1234' }, + { path: 'iterations', text: 'Iterations', to: `/${cadenceId}/iterations` }, + { + path: `${iterationId}`, + text: `${iterationId}`, + to: `/${cadenceId}/iterations/${iterationId}`, + }, + { path: 'edit', text: 'Edit', to: `/${cadenceId}/iterations/${iterationId}/edit` }, + ]); + }); }); describe('when cadenceId isnt present', () => { -- GitLab