From 154573ab641d5f535b1d5944413ad217bf427809 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 19 Aug 2024 14:50:04 +0200 Subject: [PATCH] frontend-test-utils: update extension tester to drop v1 support Signed-off-by: Patrik Oldsberg --- .../src/app/createExtensionTester.test.tsx | 22 ++++--- .../src/app/createExtensionTester.tsx | 63 ++++++++----------- 2 files changed, 39 insertions(+), 46 deletions(-) diff --git a/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx b/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx index 7467f61c4e..9528562198 100644 --- a/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx +++ b/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx @@ -18,10 +18,10 @@ import React, { useCallback } from 'react'; import { Link } from 'react-router-dom'; import { fireEvent, screen, waitFor } from '@testing-library/react'; import { + ApiBlueprint, analyticsApiRef, configApiRef, coreExtensionData, - createApiExtension, createApiFactory, createExtension, createExtensionDataRef, @@ -64,8 +64,8 @@ describe('createExtensionTester', () => { it("should fail to render an extension that doesn't output a react element", async () => { const extension = createExtension({ ...defaultDefinition, - output: { path: coreExtensionData.routePath }, - factory: () => ({ path: '/foo' }), + output: [coreExtensionData.routePath], + factory: () => [coreExtensionData.routePath('/foo')], }); const tester = createExtensionTester(extension); expect(() => tester.render()).toThrowErrorMatchingInlineSnapshot( @@ -122,7 +122,7 @@ describe('createExtensionTester', () => { const appTitle = configApi.getOptionalString('app.title'); return (
-

{appTitle ?? 'Backstafe app'}

+

{appTitle ?? 'Backstage app'}

{config.title ?? 'Index page'}

See details
@@ -186,12 +186,14 @@ describe('createExtensionTester', () => { // Mocking the analytics api implementation const analyticsApiMock = new MockAnalyticsApi(); - const analyticsApiOverride = createApiExtension({ - factory: createApiFactory({ - api: analyticsApiRef, - deps: {}, - factory: () => analyticsApiMock, - }), + const analyticsApiOverride = ApiBlueprint.make({ + params: { + factory: createApiFactory({ + api: analyticsApiRef, + deps: {}, + factory: () => analyticsApiMock, + }), + }, }); const indexPageExtension = createExtension({ diff --git a/packages/frontend-test-utils/src/app/createExtensionTester.tsx b/packages/frontend-test-utils/src/app/createExtensionTester.tsx index 1f901699b1..63de46a76e 100644 --- a/packages/frontend-test-utils/src/app/createExtensionTester.tsx +++ b/packages/frontend-test-utils/src/app/createExtensionTester.tsx @@ -26,13 +26,13 @@ import { ExtensionDataRef, ExtensionDefinition, IconComponent, + NavItemBlueprint, RouteRef, + RouterBlueprint, coreExtensionData, createExtension, createExtensionInput, createExtensionOverrides, - createNavItemExtension, - createRouterExtension, useRouteRef, } from '@backstage/frontend-plugin-api'; import { Config, ConfigReader } from '@backstage/config'; @@ -74,30 +74,29 @@ const TestAppNavExtension = createExtension({ name: 'nav', attachTo: { id: 'app/layout', input: 'nav' }, inputs: { - items: createExtensionInput({ - target: createNavItemExtension.targetDataRef, - }), - }, - output: { - element: coreExtensionData.reactElement, + items: createExtensionInput([NavItemBlueprint.dataRefs.target]), }, + output: [coreExtensionData.reactElement], factory({ inputs }) { - return { - element: ( + return [ + coreExtensionData.reactElement( + , ), - }; + ]; }, }); @@ -253,18 +252,7 @@ export class ExtensionTester { let subjectOverride; // attaching to app/routes to render as index route if (subjectInternal.version === 'v1') { - subjectOverride = createExtension({ - ...subjectInternal, - attachTo: { id: 'app/routes', input: 'routes' }, - output: { - ...subjectInternal.output, - path: coreExtensionData.routePath, - }, - factory: params => ({ - ...subjectInternal.factory(params as any), - path: '/', - }), - }); + throw new Error('The extension tester does not support v1 extensions'); } else if (subjectInternal.version === 'v2') { subjectOverride = createExtension({ ...subjectInternal, @@ -282,6 +270,7 @@ export class ExtensionTester { return [...parentOutput, coreExtensionData.routePath('/')]; }, }); + (subjectOverride as any).configSchema = subjectInternal.configSchema; } else { throw new Error('Unsupported extension version'); } @@ -293,11 +282,13 @@ export class ExtensionTester { subjectOverride, ...this.#extensions.slice(1).map(extension => extension.definition), TestAppNavExtension, - createRouterExtension({ + RouterBlueprint.make({ namespace: 'test', - Component: ({ children }) => ( - {children} - ), + params: { + Component: ({ children }) => ( + {children} + ), + }, }), ], }),