From f010dc30b74be6fd99947ccb578e9fac0137c572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20N=C3=A4sman?= Date: Tue, 26 Apr 2022 12:09:42 +0200 Subject: [PATCH] review feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Camila Belo Co-authored-by: Eric Peterson Signed-off-by: Anders Näsman --- .../techdocs-addons-test-utils/api-report.md | 29 +++++------ .../src/test-utils.tsx | 51 +++++++++---------- .../src/ReportIssue/ReportIssue.test.tsx | 6 +-- 3 files changed, 41 insertions(+), 45 deletions(-) diff --git a/plugins/techdocs-addons-test-utils/api-report.md b/plugins/techdocs-addons-test-utils/api-report.md index 52972bb05d..342863beea 100644 --- a/plugins/techdocs-addons-test-utils/api-report.md +++ b/plugins/techdocs-addons-test-utils/api-report.md @@ -3,24 +3,15 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { ApiRef } from '@backstage/core-plugin-api'; import { default as React_2 } from 'react'; import { ReactElement } from 'react'; import { screen as screen_2 } from 'testing-library__dom'; import { TechDocsEntityMetadata } from '@backstage/plugin-techdocs-react'; import { TechDocsMetadata } from '@backstage/plugin-techdocs-react'; -import { TestApiProviderProps } from '@backstage/test-utils'; // @public (undocumented) -export type Apis = TestApiProviderProps['apis']; - -// @public (undocumented) -export type RecursivePartial = { - [P in keyof T]?: RecursivePartial; -}; - -// @public (undocumented) -export class TechDocsAddonBuilder { - constructor(addons: ReactElement[]); +export class TechDocsAddonTester { // (undocumented) atPath(path: string): this; // (undocumented) @@ -29,7 +20,7 @@ export class TechDocsAddonBuilder { string | React_2.JSXElementConstructor >; // (undocumented) - static buildAddonsInTechDocs(addons: ReactElement[]): TechDocsAddonBuilder; + static buildAddonsInTechDocs(addons: ReactElement[]): TechDocsAddonTester; // (undocumented) renderWithEffects(): Promise< typeof screen_2 & { @@ -37,12 +28,20 @@ export class TechDocsAddonBuilder { } >; // (undocumented) - withApis(apis: Apis): this; + withApis(apis: TechdocsAddonTesterApis): this; // (undocumented) withDom(dom: ReactElement): this; // (undocumented) - withEntity(entity: RecursivePartial): this; + withEntity(entity: Partial): this; // (undocumented) - withMetadata(metadata: RecursivePartial): this; + withMetadata(metadata: Partial): this; } + +// @public (undocumented) +export type TechdocsAddonTesterApis = TechDocsAddonTesterTestApiPair[]; + +// @public (undocumented) +export type TechDocsAddonTesterTestApiPair = TApi extends infer TImpl + ? readonly [ApiRef, Partial] + : never; ``` diff --git a/plugins/techdocs-addons-test-utils/src/test-utils.tsx b/plugins/techdocs-addons-test-utils/src/test-utils.tsx index 17c25ed939..9082aadc13 100644 --- a/plugins/techdocs-addons-test-utils/src/test-utils.tsx +++ b/plugins/techdocs-addons-test-utils/src/test-utils.tsx @@ -23,12 +23,9 @@ import { renderToStaticMarkup } from 'react-dom/server'; import { Route } from 'react-router-dom'; import { act, render } from '@testing-library/react'; -import { - wrapInTestApp, - TestApiProvider, - TestApiProviderProps, -} from '@backstage/test-utils'; +import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { FlatRoutes } from '@backstage/core-app-api'; +import { ApiRef } from '@backstage/core-plugin-api'; import { TechDocsAddons, @@ -41,13 +38,6 @@ import { TechDocsReaderPage, techdocsPlugin } from '@backstage/plugin-techdocs'; import { catalogPlugin } from '@backstage/plugin-catalog'; import { searchApiRef } from '@backstage/plugin-search-react'; -/** - * @public - */ -export type RecursivePartial = { - [P in keyof T]?: RecursivePartial; -}; - const techdocsApi = { getTechDocsMetadata: jest.fn(), getEntityMetadata: jest.fn(), @@ -66,18 +56,25 @@ const searchApi = { /** * @public */ -export type Apis = TestApiProviderProps['apis']; +export type TechDocsAddonTesterTestApiPair = TApi extends infer TImpl + ? readonly [ApiRef, Partial] + : never; -type TechDocsAddonBuilderOptions = { +/** + * @public + */ +export type TechdocsAddonTesterApis = TechDocsAddonTesterTestApiPair[]; + +type TechDocsAddonTesterOptions = { dom: ReactElement; - entity: RecursivePartial; - metadata: RecursivePartial; + entity: Partial; + metadata: Partial; componentId: string; - apis: Apis; + apis: TechdocsAddonTesterApis; path: string; }; -const defaultOptions: TechDocsAddonBuilderOptions = { +const defaultOptions: TechDocsAddonTesterOptions = { dom: <>, entity: {}, metadata: {}, @@ -113,19 +110,19 @@ const defaultDom = ( * @public */ -export class TechDocsAddonBuilder { - private options: TechDocsAddonBuilderOptions = defaultOptions; +export class TechDocsAddonTester { + private options: TechDocsAddonTesterOptions = defaultOptions; private addons: ReactElement[]; static buildAddonsInTechDocs(addons: ReactElement[]) { - return new TechDocsAddonBuilder(addons); + return new TechDocsAddonTester(addons); } - constructor(addons: ReactElement[]) { + private constructor(addons: ReactElement[]) { this.addons = addons; } - withApis(apis: Apis) { + withApis(apis: TechdocsAddonTesterApis) { const refs = apis.map(([ref]) => ref); this.options.apis = this.options.apis .filter(([ref]) => !refs.includes(ref)) @@ -138,12 +135,12 @@ export class TechDocsAddonBuilder { return this; } - withMetadata(metadata: RecursivePartial) { + withMetadata(metadata: Partial) { this.options.metadata = metadata; return this; } - withEntity(entity: RecursivePartial) { + withEntity(entity: Partial) { this.options.entity = entity; return this; } @@ -154,7 +151,7 @@ export class TechDocsAddonBuilder { } build() { - const apis = [ + const apis: TechdocsAddonTesterApis = [ [techdocsApiRef, techdocsApi], [techdocsStorageApiRef, techdocsStorageApi], [searchApiRef, searchApi], @@ -237,4 +234,4 @@ export class TechDocsAddonBuilder { } } -export default TechDocsAddonBuilder.buildAddonsInTechDocs; +export default TechDocsAddonTester.buildAddonsInTechDocs; diff --git a/plugins/techdocs-module-addons-contrib/src/ReportIssue/ReportIssue.test.tsx b/plugins/techdocs-module-addons-contrib/src/ReportIssue/ReportIssue.test.tsx index 41186a9e5e..3c3b61f529 100644 --- a/plugins/techdocs-module-addons-contrib/src/ReportIssue/ReportIssue.test.tsx +++ b/plugins/techdocs-module-addons-contrib/src/ReportIssue/ReportIssue.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TechDocsAddonBuilder } from '@backstage/plugin-techdocs-addons-test-utils'; +import { TechDocsAddonTester } from '@backstage/plugin-techdocs-addons-test-utils'; import React from 'react'; import { fireEvent, waitFor } from '@testing-library/react'; @@ -59,7 +59,7 @@ describe('ReportIssue', () => { it('renders github link without exploding', async () => { byUrl.mockReturnValue({ type: 'github' }); const { shadowRoot, getByText } = - await TechDocsAddonBuilder.buildAddonsInTechDocs([ + await TechDocsAddonTester.buildAddonsInTechDocs([ , ]) .withDom( @@ -117,7 +117,7 @@ describe('ReportIssue', () => { it('renders gitlab link without exploding', async () => { byUrl.mockReturnValue({ type: 'gitlab' }); const { shadowRoot, getByText } = - await TechDocsAddonBuilder.buildAddonsInTechDocs([ + await TechDocsAddonTester.buildAddonsInTechDocs([ , ]) .withDom(