diff --git a/.changeset/cold-plums-hunt.md b/.changeset/cold-plums-hunt.md new file mode 100644 index 0000000000..a952c5e459 --- /dev/null +++ b/.changeset/cold-plums-hunt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-azure-devops-backend': patch +--- + +Only warn if teams fail to load at startup. diff --git a/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts b/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts index a4879de7be..0f6dbe5b04 100644 --- a/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts +++ b/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts @@ -40,7 +40,11 @@ export class PullRequestsDashboardProvider { azureDevOpsApi: AzureDevOpsApi, ): Promise { const provider = new PullRequestsDashboardProvider(logger, azureDevOpsApi); - await provider.readTeams(); + try { + await provider.readTeams(); + } catch (error) { + logger.warn(`Failed to load azure team information, ${error}`); + } return provider; } @@ -124,10 +128,12 @@ export class PullRequestsDashboardProvider { }); } - public getUserTeamIds(email: string): string[] { + public async getUserTeamIds(email: string): Promise { + await this.getAllTeams(); // Make sure team members are loaded return ( - this.getTeamMembers().find(teamMember => teamMember.uniqueName === email) - ?.memberOf ?? [] + Array.from(this.teamMembers.values()).find( + teamMember => teamMember.uniqueName === email, + )?.memberOf ?? [] ); } @@ -138,8 +144,4 @@ export class PullRequestsDashboardProvider { return Array.from(this.teams.values()); } - - public getTeamMembers(): TeamMember[] { - return Array.from(this.teamMembers.values()); - } } diff --git a/plugins/azure-devops-backend/src/service/router.test.ts b/plugins/azure-devops-backend/src/service/router.test.ts index 335e581d73..e6cd856c0a 100644 --- a/plugins/azure-devops-backend/src/service/router.test.ts +++ b/plugins/azure-devops-backend/src/service/router.test.ts @@ -49,7 +49,7 @@ describe('createRouter', () => { getPullRequests: jest.fn(), getBuilds: jest.fn(), getBuildRuns: jest.fn(), - getAllTeams: jest.fn().mockReturnValue([]), + getAllTeams: jest.fn(), getTeamMembers: jest.fn(), } as any; const router = await createRouter({ @@ -411,6 +411,7 @@ describe('createRouter', () => { describe('GET /users/:userId/team-ids', () => { it('fetches a a list of teams', async () => { + azureDevOpsApi.getAllTeams.mockResolvedValue([]); const response = await request(app).get('/users/user1/team-ids'); expect(response.status).toEqual(200); }); diff --git a/plugins/azure-devops-backend/src/service/router.ts b/plugins/azure-devops-backend/src/service/router.ts index 6482ed2f59..f41209e4ff 100644 --- a/plugins/azure-devops-backend/src/service/router.ts +++ b/plugins/azure-devops-backend/src/service/router.ts @@ -176,7 +176,7 @@ export async function createRouter( router.get('/users/:userId/team-ids', async (req, res) => { const { userId } = req.params; - const teamIds = pullRequestsDashboardProvider.getUserTeamIds(userId); + const teamIds = await pullRequestsDashboardProvider.getUserTeamIds(userId); res.status(200).json(teamIds); });