Refactor the error to AirbrakeApi

Signed-off-by: Karan Shah <karan.shah@simplybusiness.co.uk>
This commit is contained in:
Karan Shah
2022-03-01 16:20:29 +00:00
parent 9caa47d98f
commit c1cb49008b
4 changed files with 13 additions and 10 deletions
+6
View File
@@ -24,3 +24,9 @@ export const airbrakeApiRef = createApiRef<AirbrakeApi>({
export interface AirbrakeApi {
fetchGroups(projectId: string): Promise<Groups>;
}
export class NoProjectIdError extends Error {
constructor() {
super('Project ID is not present');
}
}
+1 -7
View File
@@ -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) {}
+5 -2
View File
@@ -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<Groups> {
fetchGroups(projectId: string): Promise<Groups> {
if (!projectId) {
return Promise.reject(new NoProjectIdError());
}
return new Promise(resolve => {
setTimeout(() => resolve(mockGroupsData), this.waitTimeInMillis);
});
@@ -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<BackstageTheme>(() => ({
multilineText: {