0
0
Fork 0
mirror of https://github.com/renovatebot/renovate.git synced 2025-05-13 08:01:49 +00:00
renovatebot_renovate/lib/workers/repository/process/lookup/timestamps.spec.ts
2025-04-14 16:18:30 +00:00

206 lines
6.2 KiB
TypeScript

import type { ReleaseResult } from '../../../../modules/datasource/types';
import { get as getVersioning } from '../../../../modules/versioning/index';
import { asTimestamp } from '../../../../util/timestamp';
import { calculateLatestReleaseBump } from '../../../../workers/repository/process/lookup/timestamps';
const versioning = getVersioning('semver');
describe('workers/repository/process/lookup/timestamps', () => {
describe('calculateLatestReleaseBump', () => {
it('returns the timestamp of the latest version', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
{
version: '2.0.0',
releaseTimestamp: asTimestamp('2022-01-01T00:00:00.000Z'),
},
{
version: '0.9.0',
releaseTimestamp: asTimestamp('2020-01-01T00:00:00.000Z'),
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBe('2022-01-01T00:00:00.000Z');
});
it('handles releases with missing timestamps', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
{ version: '2.0.0' }, // Missing timestamp
{
version: '3.0.0',
releaseTimestamp: asTimestamp('2023-01-01T00:00:00.000Z'),
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBe('2023-01-01T00:00:00.000Z');
});
it('handles latest release with missing timestamp', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
{
version: '2.0.0',
releaseTimestamp: asTimestamp('2022-01-01T00:00:00.000Z'),
},
{
version: '3.0.0',
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBeUndefined();
});
it('handles latest release with deprecation flag', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
{
version: '2.0.0',
releaseTimestamp: asTimestamp('2022-01-01T00:00:00.000Z'),
},
{
version: '3.0.0',
releaseTimestamp: asTimestamp('2023-01-01T00:00:00.000Z'),
isDeprecated: true,
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBeUndefined();
});
it('handles latest release with invalid version', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
{
version: '2.0.0',
releaseTimestamp: asTimestamp('2022-01-01T00:00:00.000Z'),
},
{
version: '3.0.0',
releaseTimestamp: asTimestamp('invalid'),
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBeUndefined();
});
it('returns undefined bumpedAt when no valid timestamps exist', () => {
const releaseResult: ReleaseResult = {
releases: [{ version: '1.0.0' }, { version: '2.0.0' }],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBeUndefined();
});
it('handles empty releases array', () => {
const releaseResult: ReleaseResult = { releases: [] };
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBeUndefined();
});
it('preserves other properties in the release result', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
],
sourceUrl: 'https://github.com/some/repo',
homepage: 'https://example.com',
tags: { latest: '1.0.0' },
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBe('2021-01-01T00:00:00.000Z');
expect(result.sourceUrl).toBe('https://github.com/some/repo');
expect(result.homepage).toBe('https://example.com');
expect(result.tags).toEqual({ latest: '1.0.0' });
});
});
it('handles ancient versions that are higher than the ones recently released', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: '99.99.99-alpha',
releaseTimestamp: asTimestamp('2010-01-01T00:00:00.000Z'),
},
{
version: '2.0.0',
releaseTimestamp: asTimestamp('2022-01-01T00:00:00.000Z'),
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result).toBe(releaseResult);
expect(result.bumpedAt).toBeUndefined();
});
it('handles errors thrown for invalid versions', () => {
const releaseResult: ReleaseResult = {
releases: [
{
version: 'foo',
releaseTimestamp: asTimestamp('2020-01-01T00:00:00.000Z'),
},
{
version: '1.0.0',
releaseTimestamp: asTimestamp('2021-01-01T00:00:00.000Z'),
},
{
version: 'bar',
releaseTimestamp: asTimestamp('2022-01-01T00:00:00.000Z'),
},
{
version: '2.0.0',
releaseTimestamp: asTimestamp('2023-01-01T00:00:00.000Z'),
},
],
};
const result = calculateLatestReleaseBump(versioning, releaseResult);
expect(result.bumpedAt).toBe('2023-01-01T00:00:00.000Z');
});
});