From 840f2113c6d889f7edf6eb94dd0866641162db9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 8 Dec 2022 11:23:08 +0100 Subject: [PATCH] Handle missing commits in GitlabUrlReader.readTree MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/mighty-parrots-hammer.md | 5 ++ .../src/reading/GitlabUrlReader.test.ts | 51 ++++++++++++++----- .../src/reading/GitlabUrlReader.ts | 3 +- 3 files changed, 43 insertions(+), 16 deletions(-) create mode 100644 .changeset/mighty-parrots-hammer.md diff --git a/.changeset/mighty-parrots-hammer.md b/.changeset/mighty-parrots-hammer.md new file mode 100644 index 0000000000..5a39d8955e --- /dev/null +++ b/.changeset/mighty-parrots-hammer.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Fix `GitlabUrlReader.readTree` bug when there were no matching commits diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 31092e7707..3751ee868e 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -229,22 +229,28 @@ describe('GitlabUrlReader', () => { path.resolve(__dirname, '__fixtures__/gitlab-archive.tar.gz'), ); - const projectGitlabApiResponse = { - id: 11111111, - default_branch: 'main', - }; + let projectGitlabApiResponse: any; + let commitsGitlabApiResponse: any; + let specificPathCommitsGitlabApiResponse: any; - const commitsGitlabApiResponse = [ - { - id: 'sha123abc', - }, - ]; + beforeEach(() => { + projectGitlabApiResponse = { + id: 11111111, + default_branch: 'main', + }; - const specificPathCommitsGitlabApiResponse = [ - { - id: 'sha456def', - }, - ]; + commitsGitlabApiResponse = [ + { + id: 'sha123abc', + }, + ]; + + specificPathCommitsGitlabApiResponse = [ + { + id: 'sha456def', + }, + ]; + }); beforeEach(() => { worker.use( @@ -494,6 +500,23 @@ describe('GitlabUrlReader', () => { }; await expect(fnGitlab).rejects.toThrow(NotFoundError); }); + + it('should gracefully handle no matching commits', async () => { + commitsGitlabApiResponse = []; + + const response = await gitlabProcessor.readTree( + 'https://gitlab.com/backstage/mock/tree/main', + ); + + const files = await response.files(); + expect(files.length).toBe(2); + + const indexMarkdownFile = await files[0].content(); + const mkDocsFile = await files[1].content(); + + expect(mkDocsFile.toString()).toBe('site_name: Test\n'); + expect(indexMarkdownFile.toString()).toBe('# Test\n'); + }); }); describe('search', () => { diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index a582f02cf0..c80f1b566c 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -188,8 +188,7 @@ export class GitlabUrlReader implements UrlReader { throw new Error(message); } - const commitSha = (await commitsGitlabResponse.json())[0].id; - + const commitSha = (await commitsGitlabResponse.json())[0]?.id ?? ''; if (etag && etag === commitSha) { throw new NotModifiedError(); }