renovate/lib/modules/versioning/debian/index.spec.ts

425 lines
16 KiB
TypeScript

import { DateTime, Settings } from 'luxon';
import { logger } from '../../../logger';
import { DebianVersioningApi } from '.';
describe('modules/versioning/debian/index', () => {
const dt = DateTime.fromISO('2023-07-10');
const debian = new DebianVersioningApi();
beforeEach(() => {
Settings.now = () => dt.valueOf();
});
it.each`
version | expected
${undefined} | ${false}
${null} | ${false}
${''} | ${false}
${'buzz'} | ${true}
${'rex'} | ${true}
${'bo'} | ${true}
${'hamm'} | ${true}
${'slink'} | ${true}
${'potato'} | ${true}
${'woody'} | ${true}
${'sarge'} | ${true}
${'etch'} | ${true}
${'lenny'} | ${true}
${'squeeze'} | ${true}
${'wheezy'} | ${true}
${'jessie'} | ${true}
${'stretch'} | ${true}
${'buster'} | ${true}
${'Buster'} | ${false}
${'bullseye'} | ${true}
${'bookworm'} | ${true}
${'trixie'} | ${false}
${'sid'} | ${false}
${'1.1'} | ${true}
${'1.2'} | ${true}
${'1.3'} | ${true}
${'2'} | ${true}
${'2.1'} | ${true}
${'2.2'} | ${true}
${'3'} | ${true}
${'4'} | ${true}
${'5'} | ${true}
${'6'} | ${true}
${'7'} | ${true}
${'8'} | ${true}
${'9'} | ${true}
${'10'} | ${true}
${'10-slim'} | ${false}
${'11'} | ${true}
${'12'} | ${true}
${'13'} | ${false}
${'sid'} | ${false}
${'stable'} | ${true}
${'oldstable'} | ${true}
${'oldoldstable'} | ${true}
${'experimental'} | ${false}
`('isValid("$version") === $expected', ({ version, expected }) => {
Settings.now = () => dt.valueOf();
expect(debian.isValid(version)).toBe(expected);
});
it.each`
version | range | expected
${undefined} | ${undefined} | ${false}
${null} | ${undefined} | ${false}
${''} | ${undefined} | ${false}
${'7'} | ${undefined} | ${true}
${'11'} | ${undefined} | ${true}
${'12'} | ${undefined} | ${true}
${'stable'} | ${undefined} | ${true}
${'oldstable'} | ${undefined} | ${true}
${'oldoldstable'} | ${undefined} | ${true}
${'wheezy'} | ${undefined} | ${true}
${'bullseye'} | ${undefined} | ${true}
${'bookworm'} | ${undefined} | ${true}
${'trixie'} | ${undefined} | ${false}
`(
'isCompatible("$version") === $expected',
({ version, range, expected }) => {
expect(debian.isCompatible(version, range)).toBe(expected);
},
);
it.each`
version | expected
${undefined} | ${false}
${null} | ${false}
${''} | ${false}
${'6'} | ${true}
${'>=6'} | ${false}
`('isSingleVersion("$version") === $expected', ({ version, expected }) => {
expect(debian.isSingleVersion(version)).toBe(expected);
});
it.each`
version | expected
${undefined} | ${false}
${null} | ${false}
${''} | ${false}
${'buzz'} | ${false}
${'rex'} | ${false}
${'bo'} | ${false}
${'hamm'} | ${false}
${'slink'} | ${false}
${'potato'} | ${false}
${'woody'} | ${false}
${'sarge'} | ${false}
${'etch'} | ${false}
${'lenny'} | ${false}
${'squeeze'} | ${false}
${'wheezy'} | ${false}
${'jessie'} | ${false}
${'stretch'} | ${false}
${'buster'} | ${true}
${'bullseye'} | ${true}
${'bookworm'} | ${true}
${'trixie'} | ${false}
${'sid'} | ${false}
${'1.1'} | ${false}
${'1.2'} | ${false}
${'1.3'} | ${false}
${'2'} | ${false}
${'2.1'} | ${false}
${'2.2'} | ${false}
${'3'} | ${false}
${'4'} | ${false}
${'5'} | ${false}
${'6'} | ${false}
${'7'} | ${false}
${'8'} | ${false}
${'9'} | ${false}
${'10'} | ${true}
${'11'} | ${true}
${'12'} | ${true}
${'13'} | ${false}
${'sid'} | ${false}
${'experimental'} | ${false}
${'stable'} | ${true}
${'oldstable'} | ${true}
${'oldoldstable'} | ${true}
`('isStable("$version") === $expected', ({ version, expected }) => {
Settings.now = () => dt.valueOf();
expect(debian.isStable(version)).toBe(expected);
});
it.each`
version
${'10'}
${'11'}
${'12'}
${'13'}
${'sid'}
${'experimental'}
${'stable'}
${'oldstable'}
${'oldoldstable'}
`(
'ensures that rolling release is not refreshed within frame time window',
({ version, expected }) => {
debian.isStable(version);
expect(logger.debug).toHaveBeenCalledTimes(0);
},
);
it('checks runtime date handling & refresh rolling release data', () => {
const future = DateTime.now().toUTC().plus({ year: 3 }).valueOf();
const past = DateTime.fromISO('2019-08-06', { zone: 'UTC' }).valueOf();
Settings.now = () => past.valueOf();
expect(debian.isStable('buster')).toBeTrue();
Settings.now = () => future.valueOf();
expect(debian.isStable('buster')).toBeFalse();
expect(logger.debug).toHaveBeenCalledTimes(1);
expect(logger.debug).toHaveBeenCalledWith(
'RollingReleasesData - data written',
);
});
it.each`
version | expected
${undefined} | ${false}
${null} | ${false}
${''} | ${false}
${'02.10'} | ${false}
${'04.10'} | ${false}
${'05.04'} | ${false}
${'6.06'} | ${false}
${'8.04'} | ${false}
${'9.04'} | ${false}
${'buzz'} | ${true}
${'rex'} | ${true}
${'bo'} | ${true}
${'hamm'} | ${true}
${'slink'} | ${true}
${'potato'} | ${true}
${'woody'} | ${true}
${'sarge'} | ${true}
${'etch'} | ${true}
${'lenny'} | ${true}
${'squeeze'} | ${true}
${'wheezy'} | ${true}
${'jessie'} | ${true}
${'stretch'} | ${true}
${'buster'} | ${true}
${'bullseye'} | ${true}
${'bookworm'} | ${true}
${'trixie'} | ${false}
${'sid'} | ${false}
${'1.1'} | ${true}
${'1.2'} | ${true}
${'1.3'} | ${true}
${'2'} | ${true}
${'2.1'} | ${true}
${'2.2'} | ${true}
${'3'} | ${true}
${'4'} | ${true}
${'5'} | ${true}
${'6'} | ${true}
${'7'} | ${true}
${'8'} | ${true}
${'9'} | ${true}
${'10'} | ${true}
${'11'} | ${true}
${'12'} | ${true}
${'13'} | ${false}
${'sid'} | ${false}
${'experimental'} | ${false}
${'Bookworm'} | ${false}
${'Sid'} | ${false}
${'Potato-'} | ${false}
${'Woody'} | ${false}
${'stable'} | ${true}
${'oldstable'} | ${true}
${'oldoldstable'} | ${true}
`('isVersion("$version") === $expected', ({ version, expected }) => {
expect(debian.isVersion(version)).toBe(expected);
});
it.each`
version | major | minor | patch
${undefined} | ${null} | ${null} | ${null}
${null} | ${null} | ${null} | ${null}
${''} | ${null} | ${null} | ${null}
${'42'} | ${null} | ${null} | ${null}
${'2020.04'} | ${null} | ${null} | ${null}
${'3.1'} | ${3} | ${1} | ${null}
${'1.1'} | ${1} | ${1} | ${null}
${'7'} | ${7} | ${null} | ${null}
${'8'} | ${8} | ${null} | ${null}
${'9'} | ${9} | ${null} | ${null}
${'10'} | ${10} | ${null} | ${null}
${'oldoldstable'} | ${10} | ${null} | ${null}
${'oldstable'} | ${11} | ${null} | ${null}
${'stable'} | ${12} | ${null} | ${null}
`(
'getMajor, getMinor, getPatch for "$version"',
({ version, major, minor, patch }) => {
expect(debian.getMajor(version)).toBe(major);
expect(debian.getMinor(version)).toBe(minor);
expect(debian.getPatch(version)).toBe(patch);
},
);
it.each`
a | b | expected
${'woody'} | ${'sarge'} | ${false}
${'lenny'} | ${'3'} | ${false}
${'lenny'} | ${'5'} | ${true}
${'squeeze'} | ${'6'} | ${true}
${'10'} | ${'buster'} | ${true}
${'6'} | ${'squeeze'} | ${true}
${'buster'} | ${'10'} | ${true}
${'oldoldstable'} | ${'10'} | ${true}
${'oldstable'} | ${'11'} | ${true}
${'stable'} | ${'12'} | ${true}
${'10'} | ${'oldoldstable'} | ${true}
${'11'} | ${'oldstable'} | ${true}
${'12'} | ${'stable'} | ${true}
`('equals($a, $b) === $expected', ({ a, b, expected }) => {
expect(debian.equals(a, b)).toBe(expected);
});
it.each`
a | b | expected
${'5'} | ${'6'} | ${false}
${'6'} | ${'5'} | ${true}
${'5'} | ${'10'} | ${false}
${'11'} | ${'10'} | ${true}
${'5'} | ${'6'} | ${false}
${'11'} | ${'1.1'} | ${true}
${'xxx'} | ${'yyy'} | ${true}
${'yyy'} | ${'xxx'} | ${true}
${'lenny'} | ${'squeeze'} | ${false}
${'squeeze'} | ${'lenny'} | ${true}
${'lenny'} | ${'buster'} | ${false}
${'bookworm'} | ${'etch'} | ${true}
${'sarge'} | ${'bo'} | ${true}
${'bullseye'} | ${'rex'} | ${true}
${'buzz'} | ${'jessie'} | ${false}
${'oldoldstable'} | ${'8'} | ${true}
${'oldstable'} | ${'oldoldstable'} | ${true}
${'stable'} | ${'oldstable'} | ${true}
${'12'} | ${'oldoldstable'} | ${true}
${'11'} | ${'oldstable'} | ${false}
${'10'} | ${'stable'} | ${false}
`('isGreaterThan("$a", "$b") === $expected', ({ a, b, expected }) => {
expect(debian.isGreaterThan(a, b)).toBe(expected);
});
it.each`
versions | range | expected
${['8', '9', '10', '11']} | ${'2020.04'} | ${null}
${['8', '9', '10', '11']} | ${'foobar'} | ${null}
${['8', '9', '10', '11']} | ${'11'} | ${'11'}
${['8', '9', '10', '11']} | ${'10'} | ${'10'}
${['8', '9', '10', '11']} | ${'4'} | ${null}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'2020.04'} | ${null}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'foobar'} | ${null}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'bullseye'} | ${'bullseye'}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'buster'} | ${'buster'}
${['jessie', 'stretch', 'buster', 'stable']} | ${'stable'} | ${'stable'}
${['jessie', 'stretch', 'oldstable', 'bullseye']} | ${'bullseye'} | ${'oldstable'}
${['jessie', 'oldoldstable', 'buster', 'bullseye']} | ${'warty'} | ${null}
`(
'getSatisfyingVersion($versions, "$range") === "$expected"',
({ versions, range, expected }) => {
expect(debian.getSatisfyingVersion(versions, range)).toBe(expected);
},
);
it.each`
versions | range | expected
${['8', '9', '10', '11']} | ${'2020.04'} | ${null}
${['8', '9', '10', '11']} | ${'foobar'} | ${null}
${['8', '9', '10', '11']} | ${'11'} | ${'11'}
${['8', '9', '10', '11']} | ${'10'} | ${'10'}
${['8', '9', '10', '11']} | ${'4'} | ${null}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'2020.04'} | ${null}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'foobar'} | ${null}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'bullseye'} | ${'bullseye'}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'buster'} | ${'buster'}
${['jessie', 'stretch', 'buster', 'bullseye']} | ${'warty'} | ${null}
${['jessie', 'stretch', 'buster', 'stable']} | ${'stable'} | ${'stable'}
${['jessie', 'stretch', 'oldstable', 'bullseye']} | ${'bullseye'} | ${'oldstable'}
${['jessie', 'oldoldstable', 'buster', 'bullseye']} | ${'warty'} | ${null}
`(
'minSatisfyingVersion($versions, "$range") === "$expected"',
({ versions, range, expected }) => {
expect(debian.minSatisfyingVersion(versions, range)).toBe(expected);
},
);
it.each`
currentValue | rangeStrategy | currentVersion | newVersion | expected
${undefined} | ${undefined} | ${undefined} | ${'foobar'} | ${'foobar'}
${'stretch'} | ${undefined} | ${undefined} | ${'11'} | ${'bullseye'}
${'stretch'} | ${undefined} | ${undefined} | ${'bullseye'} | ${'bullseye'}
${'stretch'} | ${undefined} | ${undefined} | ${'stable'} | ${'bookworm'}
${'9'} | ${undefined} | ${undefined} | ${'11'} | ${'11'}
${'oldoldstable'} | ${undefined} | ${undefined} | ${'12'} | ${'stable'}
${'oldstable'} | ${undefined} | ${undefined} | ${'12'} | ${'stable'}
${'9'} | ${undefined} | ${undefined} | ${'stable'} | ${'12'}
${'oldstable'} | ${undefined} | ${undefined} | ${'12'} | ${'stable'}
${'oldstable'} | ${undefined} | ${undefined} | ${'3'} | ${'3'}
${'oldstable'} | ${'pin'} | ${undefined} | ${'11'} | ${'11'}
${'oldstable'} | ${'pin'} | ${undefined} | ${'stable'} | ${'12'}
${'oldstable'} | ${'pin'} | ${undefined} | ${'bullseye'} | ${'11'}
${'buster'} | ${'pin'} | ${undefined} | ${'11'} | ${'11'}
${'buster'} | ${'pin'} | ${undefined} | ${'stable'} | ${'12'}
${'buster'} | ${'pin'} | ${undefined} | ${'bullseye'} | ${'11'}
${'10'} | ${'pin'} | ${undefined} | ${'11'} | ${'11'}
${'10'} | ${'pin'} | ${undefined} | ${'stable'} | ${'12'}
${'10'} | ${'pin'} | ${undefined} | ${'bullseye'} | ${'11'}
`(
'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"',
({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => {
Settings.now = () => dt.valueOf();
expect(
debian.getNewValue({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
}),
).toBe(expected);
},
);
it.each`
a | b | expected
${'woody'} | ${'sarge'} | ${-1}
${'lenny'} | ${'3'} | ${2}
${'3'} | ${'lenny'} | ${-2}
${'lenny'} | ${'5'} | ${0}
${'squeeze'} | ${'6'} | ${0}
${'10'} | ${'buster'} | ${0}
${'6'} | ${'squeeze'} | ${0}
${'buster'} | ${'10'} | ${0}
${'oldoldstable'} | ${'9'} | ${1}
${'oldstable'} | ${'oldoldstable'} | ${1}
${'stable'} | ${'oldstable'} | ${1}
${'12'} | ${'oldoldstable'} | ${2}
${'11'} | ${'oldstable'} | ${0}
${'10'} | ${'stable'} | ${-2}
`('debian.sortVersions($a, $b) === $expected ', ({ a, b, expected }) => {
expect(debian.sortVersions(a, b)).toEqual(expected);
});
it.each`
version | range | expected
${'10'} | ${'10-slim'} | ${false}
${'11'} | ${'11'} | ${true}
${'11'} | ${'11.0'} | ${false}
`(
'matches("$version", "$range") === "$expected"',
({ version, range, expected }) => {
expect(debian.matches(version, range)).toBe(expected);
},
);
});