From d2d4a80937711780ec9b80ea5c4da5655ee979df Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 13 Aug 2024 15:01:58 +0200 Subject: [PATCH] feat: some more work on splitting out the render method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Patrik Oldsberg Co-authored-by: Fredrik Adelöw Co-authored-by: Camila Belo Co-authored-by: Johan Haals Signed-off-by: blam --- .../src/app/createExtensionTester.tsx | 10 +-- .../src/app/renderInTestApp.tsx | 69 ++++++++++--------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/packages/frontend-test-utils/src/app/createExtensionTester.tsx b/packages/frontend-test-utils/src/app/createExtensionTester.tsx index 2d842062fc..fb05270eb8 100644 --- a/packages/frontend-test-utils/src/app/createExtensionTester.tsx +++ b/packages/frontend-test-utils/src/app/createExtensionTester.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { MemoryRouter, Link } from 'react-router-dom'; +import { MemoryRouter } from 'react-router-dom'; import { RenderResult, render } from '@testing-library/react'; import { createSpecializedApp } from '@backstage/frontend-app-api'; import { @@ -24,15 +24,10 @@ import { Extension, ExtensionDataRef, ExtensionDefinition, - IconComponent, - RouteRef, coreExtensionData, createExtension, - createExtensionInput, createExtensionOverrides, - createNavItemExtension, createRouterExtension, - useRouteRef, } from '@backstage/frontend-plugin-api'; import { Config, ConfigReader } from '@backstage/config'; import { JsonArray, JsonObject, JsonValue } from '@backstage/types'; @@ -215,14 +210,12 @@ export class ExtensionTester { */ render(options?: { config?: JsonObject }): RenderResult { const { config = {} } = options ?? {}; - const [subject] = this.#extensions; if (!subject) { throw new Error( 'No subject found. At least one extension should be added to the tester.', ); } - const app = createSpecializedApp({ features: [ createExtensionOverrides({ @@ -239,7 +232,6 @@ export class ExtensionTester { ], config: this.#getConfig(config), }); - return render(app.createRoot()); } diff --git a/packages/frontend-test-utils/src/app/renderInTestApp.tsx b/packages/frontend-test-utils/src/app/renderInTestApp.tsx index d828c89f12..85cf1c626c 100644 --- a/packages/frontend-test-utils/src/app/renderInTestApp.tsx +++ b/packages/frontend-test-utils/src/app/renderInTestApp.tsx @@ -15,25 +15,23 @@ */ import React from 'react'; -import { - ExtensionDefinition, - IconComponent, - RouteRef, - coreExtensionData, - createExtension, - createExtensionInput, - createExtensionOverrides, - createNavItemExtension, - createRouterExtension, - useRouteRef, -} from '@backstage/frontend-plugin-api'; import { Link, MemoryRouter } from 'react-router-dom'; import { createSpecializedApp } from '@backstage/frontend-app-api'; import { render } from '@testing-library/react'; -import { resolveExtensionDefinition } from '@backstage/frontend-plugin-api/src/wiring/resolveExtensionDefinition'; -import { resolve } from 'path'; import { ConfigReader } from '@backstage/config'; import { JsonObject } from '@backstage/types'; +import { + createExtension, + createExtensionOverrides, + createRouterExtension, + ExtensionDefinition, + coreExtensionData, + RouteRef, + useRouteRef, + createExtensionInput, + IconComponent, + createNavItemExtension, +} from '@backstage/frontend-plugin-api'; /** * Options to customize the behavior of the test app. @@ -120,26 +118,35 @@ const TestAppNavExtension = createExtension({ * Renders the given element in a test app, for use in unit tests. */ export function renderInTestApp( - element: JSX.Element, + element: JSX.Element | { extensions: ExtensionDefinition[] }, options?: TestAppOptions, ) { - const extensions: Array> = [ - createExtension({ - namespace: 'test', - attachTo: { id: 'app/routes', input: 'routes' }, - output: [coreExtensionData.reactElement, coreExtensionData.routePath], - factory: () => { - return [ - coreExtensionData.reactElement(element), - coreExtensionData.routePath('/'), + const extensions: Array> = + 'extensions' in element + ? element.extensions + : [ + createExtension({ + namespace: 'test', + attachTo: { id: 'app/routes', input: 'routes' }, + output: [ + coreExtensionData.reactElement, + coreExtensionData.routePath, + ], + factory: () => { + return [ + coreExtensionData.reactElement(element), + coreExtensionData.routePath('/'), + ]; + }, + }), + createRouterExtension({ + namespace: 'test', + Component: ({ children }) => ( + {children} + ), + }), + TestAppNavExtension, ]; - }, - }), - createRouterExtension({ - namespace: 'test', - Component: ({ children }) => {children}, - }), - ]; if (options?.mountedRoutes) { for (const [path, routeRef] of Object.entries(options.mountedRoutes)) {