diff --git a/plugins/code-coverage-backend/src/index.ts b/plugins/code-coverage-backend/src/index.ts index 7612c392a2..12de31b541 100644 --- a/plugins/code-coverage-backend/src/index.ts +++ b/plugins/code-coverage-backend/src/index.ts @@ -15,3 +15,5 @@ */ export * from './service/router'; + +export * from './service/jsoncoverage-types'; diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 75be2cab92..47d065a092 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -26,6 +26,7 @@ "@backstage/core-api": "^0.2.12", "@backstage/dev-utils": "^0.1.11", "@backstage/plugin-catalog-react": "^0.1.0", + "@backstage/plugin-code-coverage-backend": "^0.1.0", "@backstage/theme": "^0.2.3", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", diff --git a/plugins/code-coverage/src/api.ts b/plugins/code-coverage/src/api.ts index 000ff132e9..f386fa03fe 100644 --- a/plugins/code-coverage/src/api.ts +++ b/plugins/code-coverage/src/api.ts @@ -17,6 +17,10 @@ import { createApiRef } from '@backstage/core'; import { Config } from '@backstage/config'; import { EntityName, stringifyEntityRef } from '@backstage/catalog-model'; +import { + JsonCodeCoverage, + JsonCoverageHistory, +} from '@backstage/plugin-code-coverage-backend'; export class FetchError extends Error { get name(): string { @@ -34,15 +38,15 @@ export class FetchError extends Error { export type CodeCoverageApi = { url: string; - getCoverageForEntity: (entity: EntityName) => Promise; + getCoverageForEntity: (entity: EntityName) => Promise; getFileContentFromEntity: ( entity: EntityName, filePath: string, - ) => Promise; + ) => Promise; getCoverageHistoryForEntity: ( entity: EntityName, limit?: number, - ) => Promise; + ) => Promise; }; export const codeCoverageApiRef = createApiRef({ @@ -57,7 +61,7 @@ export class CodeCoverageRestApi implements CodeCoverageApi { constructor(public url: string) {} - private async fetch( + private async fetch( input: string, init?: RequestInit, ): Promise { @@ -69,18 +73,21 @@ export class CodeCoverageRestApi implements CodeCoverageApi { return await resp.text(); } - async getCoverageForEntity(entityName: EntityName): Promise { + async getCoverageForEntity( + entityName: EntityName, + ): Promise { const entity = stringifyEntityRef(entityName); - return await this.fetch(`/api/code-coverage/report?entity=${entity}`); + return (await this.fetch( + `/api/code-coverage/report?entity=${entity}`, + )) as JsonCodeCoverage; } async getFileContentFromEntity( entityName: EntityName, filePath: string, - ): Promise { + ): Promise { const entity = stringifyEntityRef(entityName); - return await this.fetch( - /// file-content?entity=component:default/mycomponent&path=src/some-file.go + return await this.fetch( `/api/code-coverage/file-content?entity=${entity}&path=${filePath}`, ); } @@ -88,13 +95,13 @@ export class CodeCoverageRestApi implements CodeCoverageApi { async getCoverageHistoryForEntity( entityName: EntityName, limit?: number, - ): Promise { + ): Promise { const entity = stringifyEntityRef(entityName); const hasValidLimit = limit && limit > 0; - return await this.fetch( + return (await this.fetch( `/api/code-coverage/history?entity=${entity}${ hasValidLimit ? `&limit=${limit}` : '' }`, - ); + )) as JsonCoverageHistory; } } diff --git a/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx b/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx index 358cd72f24..72c8b27a12 100644 --- a/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx +++ b/plugins/code-coverage/src/components/FileExplorer/FileContent.tsx @@ -93,9 +93,17 @@ export const FileContent = ({ filename, coverage }: Props) => { if (loading) { return ; - } else if (error) { + } + if (error) { return {error.message}; } + if (!value) { + return ( + + Unable to retrieve file content for {filename} + + ); + } const [language] = filename.split('.').slice(-1); const highlightedLines = highlightLines(language, value.split('\n'));