From c1cb49008b14a68c918bc80c12b21b5fead790ad Mon Sep 17 00:00:00 2001 From: Karan Shah Date: Tue, 1 Mar 2022 16:20:29 +0000 Subject: [PATCH] Refactor the error to AirbrakeApi Signed-off-by: Karan Shah --- plugins/airbrake/src/api/AirbrakeApi.ts | 6 ++++++ plugins/airbrake/src/api/ProductionApi.ts | 8 +------- plugins/airbrake/src/api/mock/MockApi.ts | 7 +++++-- .../EntityAirbrakeWidget/EntityAirbrakeWidget.tsx | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/plugins/airbrake/src/api/AirbrakeApi.ts b/plugins/airbrake/src/api/AirbrakeApi.ts index a29aa3eca7..672b1f92f4 100644 --- a/plugins/airbrake/src/api/AirbrakeApi.ts +++ b/plugins/airbrake/src/api/AirbrakeApi.ts @@ -24,3 +24,9 @@ export const airbrakeApiRef = createApiRef({ export interface AirbrakeApi { fetchGroups(projectId: string): Promise; } + +export class NoProjectIdError extends Error { + constructor() { + super('Project ID is not present'); + } +} diff --git a/plugins/airbrake/src/api/ProductionApi.ts b/plugins/airbrake/src/api/ProductionApi.ts index abd8c8863f..7d1d88a2a4 100644 --- a/plugins/airbrake/src/api/ProductionApi.ts +++ b/plugins/airbrake/src/api/ProductionApi.ts @@ -15,15 +15,9 @@ */ import { Groups } from './airbrakeGroups'; -import { AirbrakeApi } from './AirbrakeApi'; +import { AirbrakeApi, NoProjectIdError } from './AirbrakeApi'; import { DiscoveryApi } from '@backstage/core-plugin-api'; -export class NoProjectIdError extends Error { - constructor() { - super('Project ID is not present'); - } -} - export class ProductionAirbrakeApi implements AirbrakeApi { constructor(private readonly discoveryApi: DiscoveryApi) {} diff --git a/plugins/airbrake/src/api/mock/MockApi.ts b/plugins/airbrake/src/api/mock/MockApi.ts index dbb1d5c049..f362fbbcaa 100644 --- a/plugins/airbrake/src/api/mock/MockApi.ts +++ b/plugins/airbrake/src/api/mock/MockApi.ts @@ -15,7 +15,7 @@ */ import { Groups } from '../airbrakeGroups'; -import { AirbrakeApi } from '../AirbrakeApi'; +import { AirbrakeApi, NoProjectIdError } from '../AirbrakeApi'; import mockGroupsData from './airbrakeGroupsApiMock.json'; export class MockAirbrakeApi implements AirbrakeApi { @@ -25,7 +25,10 @@ export class MockAirbrakeApi implements AirbrakeApi { this.waitTimeInMillis = waitTimeInMillis; } - fetchGroups(): Promise { + fetchGroups(projectId: string): Promise { + if (!projectId) { + return Promise.reject(new NoProjectIdError()); + } return new Promise(resolve => { setTimeout(() => resolve(mockGroupsData), this.waitTimeInMillis); }); diff --git a/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx b/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx index affb822f64..6ec820efa6 100644 --- a/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx +++ b/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx @@ -29,7 +29,7 @@ import { ErrorApi, errorApiRef, useApi } from '@backstage/core-plugin-api'; import { airbrakeApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; import { AIRBRAKE_PROJECT_ID_ANNOTATION, useProjectId } from '../useProjectId'; -import { NoProjectIdError } from '../../api/ProductionApi'; +import { NoProjectIdError } from '../../api/AirbrakeApi'; const useStyles = makeStyles(() => ({ multilineText: {