mirror of https://github.com/renovatebot/renovate
219 lines
6.2 KiB
TypeScript
219 lines
6.2 KiB
TypeScript
import { ZodError } from 'zod';
|
|
import * as httpMock from '../../../../test/http-mock';
|
|
import { logger } from '../../../../test/util';
|
|
import { DenoDatasource } from '.';
|
|
|
|
describe('modules/datasource/deno/index', () => {
|
|
const deno = new DenoDatasource();
|
|
|
|
describe('getReleases', () => {
|
|
it('returns releases of standard library', async () => {
|
|
httpMock
|
|
.scope(deno.defaultRegistryUrls[0])
|
|
.get('/v2/modules/std')
|
|
.reply(200, {
|
|
versions: ['0.163.0', '0.162.0', '0.161.0'],
|
|
tags: [{ value: 'top_5_percent', kind: 'popularity' }],
|
|
})
|
|
.get('/v2/modules/std/0.163.0')
|
|
.reply(200, {
|
|
version: '0.163.0',
|
|
upload_options: {
|
|
repository: 'denoland/deno_std',
|
|
ref: '0.163.0',
|
|
type: 'github',
|
|
},
|
|
uploaded_at: '2022-11-08T21:10:21.592Z',
|
|
})
|
|
.get('/v2/modules/std/0.162.0')
|
|
.reply(200, {
|
|
version: '0.162.0',
|
|
upload_options: {
|
|
repository: 'denoland/deno_std',
|
|
ref: '0.162.0',
|
|
type: 'github',
|
|
},
|
|
uploaded_at: '2022-10-20T12:10:21.592Z',
|
|
})
|
|
.get('/v2/modules/std/0.161.0')
|
|
.reply(200, { foo: 'bar' });
|
|
|
|
const result = await deno.getReleases({
|
|
packageName: 'https://deno.land/std',
|
|
registryUrl: deno.defaultRegistryUrls[0],
|
|
});
|
|
expect(result).toMatchObject({
|
|
releases: [
|
|
{
|
|
version: '0.163.0',
|
|
sourceUrl: 'https://github.com/denoland/deno_std',
|
|
releaseTimestamp: '2022-11-08T21:10:21.592Z',
|
|
},
|
|
{
|
|
version: '0.162.0',
|
|
sourceUrl: 'https://github.com/denoland/deno_std',
|
|
releaseTimestamp: '2022-10-20T12:10:21.592Z',
|
|
},
|
|
{
|
|
version: '0.161.0',
|
|
},
|
|
],
|
|
tags: {
|
|
popularity: 'top_5_percent',
|
|
},
|
|
});
|
|
|
|
expect(logger.logger.warn).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
err: expect.any(ZodError),
|
|
}),
|
|
`Deno: failed to get version details for 0.161.0`,
|
|
);
|
|
});
|
|
|
|
it('throws error if module endpoint fails', async () => {
|
|
httpMock
|
|
.scope(deno.defaultRegistryUrls[0])
|
|
.get('/v2/modules/std')
|
|
.reply(404);
|
|
|
|
await expect(
|
|
deno.getReleases({
|
|
packageName: 'https://deno.land/std',
|
|
registryUrl: deno.defaultRegistryUrls[0],
|
|
}),
|
|
).rejects.toThrow();
|
|
});
|
|
|
|
it('throws error if version endpoint fails', async () => {
|
|
httpMock
|
|
.scope(deno.defaultRegistryUrls[0])
|
|
.get('/v2/modules/std')
|
|
.reply(200, {
|
|
versions: ['0.163.0', '0.162.0'],
|
|
tags: [{ value: 'top_5_percent', kind: 'popularity' }],
|
|
})
|
|
.get('/v2/modules/std/0.163.0')
|
|
.reply(200, {
|
|
version: '0.163.0',
|
|
upload_options: {
|
|
repository: 'denoland/deno_std',
|
|
ref: '0.163.0',
|
|
type: 'github',
|
|
},
|
|
uploaded_at: '2022-11-08T21:10:21.592Z',
|
|
})
|
|
.get('/v2/modules/std/0.162.0')
|
|
.reply(503);
|
|
await expect(
|
|
deno.getReleases({
|
|
packageName: 'https://deno.land/std',
|
|
registryUrl: deno.defaultRegistryUrls[0],
|
|
}),
|
|
).rejects.toThrow();
|
|
});
|
|
|
|
it('returns null if we could not match a deno land dependency', async () => {
|
|
expect(
|
|
await deno.getReleases({
|
|
packageName: 'https://myexample.com/std',
|
|
}),
|
|
).toBeNull();
|
|
});
|
|
|
|
it('returns releases of third-party library', async () => {
|
|
httpMock
|
|
.scope(deno.defaultRegistryUrls[0])
|
|
.get('/v2/modules/postgres')
|
|
.reply(200, {
|
|
versions: ['v0.16.0', 'v0.16.1'],
|
|
tags: [],
|
|
})
|
|
.get('/v2/modules/postgres/v0.16.0')
|
|
.reply(200, {
|
|
version: 'v0.16.0',
|
|
upload_options: {
|
|
repository: 'denodrivers/postgres',
|
|
ref: 'v0.16.0',
|
|
type: 'gitlab',
|
|
},
|
|
uploaded_at: '2022-06-01T20:29:52.413Z',
|
|
})
|
|
.get('/v2/modules/postgres/v0.16.1')
|
|
.reply(200, {
|
|
version: 'v0.16.1',
|
|
upload_options: {
|
|
repository: 'denoland/deno_std',
|
|
ref: 'v0.16.1',
|
|
type: 'gitlab',
|
|
},
|
|
uploaded_at: '2022-06-07T22:43:44.098Z',
|
|
});
|
|
|
|
const result = await deno.getReleases({
|
|
packageName: 'https://deno.land/x/postgres',
|
|
registryUrl: deno.defaultRegistryUrls[0],
|
|
});
|
|
expect(result).toMatchObject({
|
|
releases: [
|
|
{
|
|
version: 'v0.16.0',
|
|
releaseTimestamp: '2022-06-01T20:29:52.413Z',
|
|
},
|
|
{
|
|
version: 'v0.16.1',
|
|
releaseTimestamp: '2022-06-07T22:43:44.098Z',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it('returns releases of a alternative registry server', async () => {
|
|
httpMock
|
|
.scope('https://api.example.com')
|
|
.get('/v2/modules/postgres')
|
|
.reply(200, {
|
|
versions: ['v0.16.0', 'v0.16.1'],
|
|
tags: [],
|
|
})
|
|
.get('/v2/modules/postgres/v0.16.0')
|
|
.reply(200, {
|
|
version: 'v0.16.0',
|
|
upload_options: {
|
|
repository: 'denodrivers/postgres',
|
|
ref: 'v0.16.0',
|
|
type: 'gitlab',
|
|
},
|
|
uploaded_at: '2022-06-01T20:29:52.413Z',
|
|
})
|
|
.get('/v2/modules/postgres/v0.16.1')
|
|
.reply(200, {
|
|
version: 'v0.16.1',
|
|
upload_options: {
|
|
repository: 'denoland/deno_std',
|
|
ref: 'v0.16.1',
|
|
type: 'gitlab',
|
|
},
|
|
uploaded_at: '2022-06-07T22:43:44.098Z',
|
|
});
|
|
|
|
const result = await deno.getReleases({
|
|
packageName: 'https://deno.land/x/postgres',
|
|
registryUrl: 'https://api.example.com',
|
|
});
|
|
expect(result).toMatchObject({
|
|
releases: [
|
|
{
|
|
version: 'v0.16.0',
|
|
releaseTimestamp: '2022-06-01T20:29:52.413Z',
|
|
},
|
|
{
|
|
version: 'v0.16.1',
|
|
releaseTimestamp: '2022-06-07T22:43:44.098Z',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
});
|
|
});
|