Skip to content

Commit 9401c34

Browse files
Convert "gets correct assets for a release" to use the same example response as the other tests
1 parent 750c097 commit 9401c34

1 file changed

Lines changed: 88 additions & 107 deletions

File tree

Lines changed: 88 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,96 @@
11
import { Response } from "node-fetch";
22
import { Range } from "semver";
33

4-
import type {
5-
GithubRelease,
6-
GithubReleaseAsset,
7-
} from "../../../../src/codeql-cli/distribution/releases-api-consumer";
4+
import type { GithubRelease } from "../../../../src/codeql-cli/distribution/releases-api-consumer";
85
import { ReleasesApiConsumer } from "../../../../src/codeql-cli/distribution/releases-api-consumer";
96

107
describe("Releases API consumer", () => {
118
const repositoryNwo = "someowner/somerepo";
129
const unconstrainedVersionRange = new Range("*");
1310

14-
describe("picking the latest release", () => {
15-
const sampleReleaseResponse: GithubRelease[] = [
16-
{
17-
assets: [],
18-
created_at: "2019-09-01T00:00:00Z",
19-
id: 1,
20-
name: "v2.1.0",
21-
prerelease: false,
22-
tag_name: "v2.1.0",
23-
},
24-
{
25-
assets: [],
26-
created_at: "2019-08-10T00:00:00Z",
27-
id: 2,
28-
name: "v3.1.1",
29-
prerelease: false,
30-
tag_name: "v3.1.1",
31-
},
32-
{
33-
assets: [
34-
{
35-
id: 1,
36-
name: "exampleAsset.txt",
37-
size: 1,
38-
},
39-
],
40-
created_at: "2019-09-05T00:00:00Z",
41-
id: 3,
42-
name: "v2.0.0",
43-
prerelease: false,
44-
tag_name: "v2.0.0",
45-
},
46-
{
47-
assets: [],
48-
created_at: "2019-08-11T00:00:00Z",
49-
id: 4,
50-
name: "v3.1.2-pre-1.1",
51-
prerelease: true,
52-
tag_name: "v3.1.2-pre-1.1",
53-
},
54-
// Release ID 5 is older than release ID 4 but its version has a higher precedence, so release
55-
// ID 5 should be picked over release ID 4.
56-
{
57-
assets: [],
58-
created_at: "2019-08-09T00:00:00Z",
59-
id: 5,
60-
name: "v3.1.2-pre-2.0",
61-
prerelease: true,
62-
tag_name: "v3.1.2-pre-2.0",
63-
},
64-
// Has a tag_name that is not valid semver
65-
{
66-
assets: [],
67-
created_at: "2019-08-010T00:00:00Z",
68-
id: 6,
69-
name: "codeql-bundle-20231220",
70-
prerelease: true,
71-
tag_name: "codeql-bundle-20231220",
72-
},
73-
];
74-
75-
class MockReleasesApiConsumer extends ReleasesApiConsumer {
76-
protected async makeApiCall(apiPath: string): Promise<Response> {
77-
if (apiPath === `/repos/${repositoryNwo}/releases`) {
78-
return Promise.resolve(
79-
new Response(JSON.stringify(sampleReleaseResponse)),
80-
);
81-
}
82-
return Promise.reject(new Error(`Unknown API path: ${apiPath}`));
11+
const sampleReleaseResponse: GithubRelease[] = [
12+
{
13+
assets: [],
14+
created_at: "2019-09-01T00:00:00Z",
15+
id: 1,
16+
name: "v2.1.0",
17+
prerelease: false,
18+
tag_name: "v2.1.0",
19+
},
20+
{
21+
assets: [
22+
{
23+
id: 1,
24+
name: "firstAsset",
25+
size: 11,
26+
},
27+
{
28+
id: 2,
29+
name: "secondAsset",
30+
size: 12,
31+
},
32+
],
33+
created_at: "2019-08-10T00:00:00Z",
34+
id: 2,
35+
name: "v3.1.1",
36+
prerelease: false,
37+
tag_name: "v3.1.1",
38+
},
39+
{
40+
assets: [
41+
{
42+
id: 1,
43+
name: "exampleAsset.txt",
44+
size: 1,
45+
},
46+
],
47+
created_at: "2019-09-05T00:00:00Z",
48+
id: 3,
49+
name: "v2.0.0",
50+
prerelease: false,
51+
tag_name: "v2.0.0",
52+
},
53+
{
54+
assets: [],
55+
created_at: "2019-08-11T00:00:00Z",
56+
id: 4,
57+
name: "v3.1.2-pre-1.1",
58+
prerelease: true,
59+
tag_name: "v3.1.2-pre-1.1",
60+
},
61+
// Release ID 5 is older than release ID 4 but its version has a higher precedence, so release
62+
// ID 5 should be picked over release ID 4.
63+
{
64+
assets: [],
65+
created_at: "2019-08-09T00:00:00Z",
66+
id: 5,
67+
name: "v3.1.2-pre-2.0",
68+
prerelease: true,
69+
tag_name: "v3.1.2-pre-2.0",
70+
},
71+
// Has a tag_name that is not valid semver
72+
{
73+
assets: [],
74+
created_at: "2019-08-010T00:00:00Z",
75+
id: 6,
76+
name: "codeql-bundle-20231220",
77+
prerelease: true,
78+
tag_name: "codeql-bundle-20231220",
79+
},
80+
];
81+
82+
class MockReleasesApiConsumer extends ReleasesApiConsumer {
83+
protected async makeApiCall(apiPath: string): Promise<Response> {
84+
if (apiPath === `/repos/${repositoryNwo}/releases`) {
85+
return Promise.resolve(
86+
new Response(JSON.stringify(sampleReleaseResponse)),
87+
);
8388
}
89+
return Promise.reject(new Error(`Unknown API path: ${apiPath}`));
8490
}
91+
}
8592

93+
describe("picking the latest release", () => {
8694
it("picked release is non-prerelease with the highest semver", async () => {
8795
const consumer = new MockReleasesApiConsumer(repositoryNwo);
8896

@@ -167,7 +175,12 @@ describe("Releases API consumer", () => {
167175
});
168176

169177
it("gets correct assets for a release", async () => {
170-
const expectedAssets: GithubReleaseAsset[] = [
178+
const consumer = new MockReleasesApiConsumer(repositoryNwo);
179+
180+
const assets = (await consumer.getLatestRelease(unconstrainedVersionRange))
181+
.assets;
182+
183+
expect(assets).toEqual([
171184
{
172185
id: 1,
173186
name: "firstAsset",
@@ -178,38 +191,6 @@ describe("Releases API consumer", () => {
178191
name: "secondAsset",
179192
size: 12,
180193
},
181-
];
182-
183-
class MockReleasesApiConsumer extends ReleasesApiConsumer {
184-
protected async makeApiCall(apiPath: string): Promise<Response> {
185-
if (apiPath === `/repos/${repositoryNwo}/releases`) {
186-
const responseBody: GithubRelease[] = [
187-
{
188-
assets: expectedAssets,
189-
created_at: "2019-09-01T00:00:00Z",
190-
id: 1,
191-
name: "Release 1",
192-
prerelease: false,
193-
tag_name: "v2.0.0",
194-
},
195-
];
196-
197-
return Promise.resolve(new Response(JSON.stringify(responseBody)));
198-
}
199-
return Promise.reject(new Error(`Unknown API path: ${apiPath}`));
200-
}
201-
}
202-
203-
const consumer = new MockReleasesApiConsumer(repositoryNwo);
204-
205-
const assets = (await consumer.getLatestRelease(unconstrainedVersionRange))
206-
.assets;
207-
208-
expect(assets.length).toBe(expectedAssets.length);
209-
expectedAssets.map((expectedAsset, index) => {
210-
expect(assets[index].id).toBe(expectedAsset.id);
211-
expect(assets[index].name).toBe(expectedAsset.name);
212-
expect(assets[index].size).toBe(expectedAsset.size);
213-
});
194+
]);
214195
});
215196
});

0 commit comments

Comments
 (0)