Files
Sebastian Poxhofer d004b52a91 test: add coverage for lines detected by pnpm check (#43589)
tests: add coverage for lines detected by pnpm check
2026-05-26 07:53:07 +00:00

457 lines
20 KiB
TypeScript

import semverPartial from './index.ts';
describe('modules/versioning/semver-partial/index', () => {
describe('.isValid()', () => {
it.each`
version | expected
${'1'} | ${true}
${'1.2'} | ${true}
${'1.2.3'} | ${true}
${'~latest'} | ${true}
${'1.2.3-alpha'} | ${true}
${'v1'} | ${true}
${'v1.2'} | ${true}
${'v1.2.3'} | ${true}
${'v1.2.3-alpha'} | ${true}
${'invalid'} | ${false}
${''} | ${false}
`('isValid("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.isValid(version)).toBe(expected);
});
});
describe('.isVersion()', () => {
it.each`
version | expected
${'1'} | ${false}
${'1.2'} | ${false}
${'1.2.3'} | ${true}
${'~latest'} | ${false}
${'1.2.3-alpha'} | ${true}
${'1.2.3-rc.1'} | ${true}
${'v1'} | ${false}
${'v1.2'} | ${false}
${'v1.2.3'} | ${true}
${'v1.2.3-alpha'} | ${true}
${'v1.2.3-rc.1'} | ${true}
${'invalid'} | ${false}
${''} | ${false}
${'#1.0.0'} | ${false}
${'x1.0.0'} | ${false}
`('isVersion("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.isVersion(version)).toBe(expected);
});
});
describe('.isStable()', () => {
it.each`
version | expected
${'1.0.0-alpha'} | ${false}
${'1.0.0-beta'} | ${false}
${'1.0.0-rc'} | ${false}
${'1.0.0-pre'} | ${false}
${'1.0.0-dev'} | ${false}
${'1.0.0-snapshot'} | ${false}
${'1.0.0-unstable'} | ${false}
${'1.0.0-Alpha'} | ${false}
${'1.0.0-1'} | ${false}
${'1.0.0-build.1'} | ${false}
${'1.0.0'} | ${true}
${'v1.0.0'} | ${true}
${'v1.0.0-alpha'} | ${false}
${'1'} | ${false}
${'not-a-version'} | ${false}
`('isStable("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.isStable(version)).toBe(expected);
});
});
describe('.isSingleVersion()', () => {
it.each`
version | expected
${'1'} | ${false}
${'1.2'} | ${false}
${'1.2.3'} | ${true}
${'~latest'} | ${false}
${'1.2.3-alpha'} | ${true}
${'v1'} | ${false}
${'v1.2'} | ${false}
${'v1.2.3'} | ${true}
${'v1.2.3-alpha'} | ${true}
`('isSingleVersion("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.isSingleVersion(version)).toBe(expected);
});
});
describe('.matches()', () => {
it.each`
version | range | expected
${'1.1.0'} | ${'1.0'} | ${false}
${'1.0.0'} | ${'1'} | ${true}
${'1.2.0'} | ${'1'} | ${true}
${'1.2.3'} | ${'1'} | ${true}
${'2.0.0'} | ${'1'} | ${false}
${'1.1.0'} | ${'1.1'} | ${true}
${'1.1.5'} | ${'1.1'} | ${true}
${'1.2.0'} | ${'1.1'} | ${false}
${'1.0.0'} | ${'1.1'} | ${false}
${'1.2.3'} | ${'1.2'} | ${true}
${'1.2.0'} | ${'1.2'} | ${true}
${'1.3.0'} | ${'1.2'} | ${false}
${'1.0.0'} | ${'~latest'} | ${true}
${'2.1.0'} | ${'~latest'} | ${true}
${'1.0.0-rc'} | ${'1'} | ${false}
${'1.0.0-rc'} | ${'1.0'} | ${false}
${'invalid'} | ${'1'} | ${false}
${'~latest'} | ${'1'} | ${false}
${'1'} | ${'1'} | ${false}
${'1.2'} | ${'1.2'} | ${false}
${'1.2.3'} | ${'1.2.3'} | ${true}
${'1.2.4'} | ${'1.2.3'} | ${false}
${'not-semver-ver'} | ${'1'} | ${false}
${'1.0.0-alpha'} | ${'1'} | ${false}
${'1.0.0-beta'} | ${'1.0'} | ${false}
${'v1.0.0'} | ${'v1'} | ${true}
${'v1.2.0'} | ${'v1'} | ${true}
${'v1.1.0'} | ${'v1.1'} | ${true}
${'v1.2.3'} | ${'v1.2.3'} | ${true}
${'v2.0.0'} | ${'v1'} | ${false}
${'v1.0.0'} | ${'1'} | ${true}
${'1.0.0'} | ${'v1'} | ${true}
${'v1.1.5'} | ${'1.1'} | ${true}
${'1.1.5'} | ${'v1.1'} | ${true}
${'v2.1.0'} | ${'2'} | ${true}
${'2.1.0'} | ${'v2'} | ${true}
${'v1.2.0'} | ${'1.1'} | ${false}
${'1.2.0'} | ${'v1.1'} | ${false}
${'v1.0.0-rc'} | ${'v1'} | ${false}
${'1.0.0-rc'} | ${'v1'} | ${false}
${'v1.0.0-rc'} | ${'1'} | ${false}
${'v1.2.4'} | ${'1.2.3'} | ${false}
${'1.2.4'} | ${'v1.2.3'} | ${false}
${'v1.2.3'} | ${'1.2.3'} | ${true}
${'1.2.3'} | ${'v1.2.3'} | ${true}
`(
'matches("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(semverPartial.matches(version, range)).toBe(expected);
},
);
it('should handle invalid range that is not ~latest or valid version', () => {
expect(semverPartial.matches('1.0.0', 'completely-invalid-range')).toBe(
false,
);
});
});
describe('.getSatisfyingVersion()', () => {
it.each`
versions | range | expected
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.0.1']} | ${'1'} | ${'1.2.0'}
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.0.1']} | ${'1.1'} | ${'1.1.1'}
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.0.1']} | ${'2'} | ${'2.0.1'}
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.1.0']} | ${'~latest'} | ${'2.1.0'}
${['1.0.0', '1.1.0', '1.2.0', '2.0.0', '2.0.1', '2.1.0-rc']} | ${'2'} | ${'2.0.1'}
${['1.0.0', '1.0.1-rc', '1.1.0']} | ${'1.0'} | ${'1.0.0'}
${['0.5.0', '1.0.0', '2.0.0']} | ${'3'} | ${null}
${['invalid-version', '1.0.0']} | ${'1'} | ${'1.0.0'}
${['1.0', '1.1', '1.2']} | ${'1'} | ${null}
${['0.9.0-alpha', '0.9.0-beta', '0.9.0']} | ${'~latest'} | ${'0.9.0'}
${['some-text', 'another-text']} | ${'1'} | ${null}
${['not-valid', 'also-bad']} | ${'1'} | ${null}
${['1.0.0', '1.0.1-alpha', '1.0.2', '1.1.0-beta', '1.1.1']} | ${'1'} | ${'1.1.1'}
${['1.0.0', '1.0.1-alpha', '1.0.2', '1.1.0-beta', '1.1.1']} | ${'1.0'} | ${'1.0.2'}
${['v1.0.0', 'v1.1.0', 'v1.1.1', 'v1.2.0', 'v2.0.0']} | ${'v1'} | ${'v1.2.0'}
${['v1.0.0', 'v1.1.0', 'v1.1.1']} | ${'v1.1'} | ${'v1.1.1'}
${['v1.0.0', 'v2.0.0', 'v3.0.0']} | ${'v2'} | ${'v2.0.0'}
${['1.0.0', 'v1.1.0', '1.1.1', 'v1.2.0', '2.0.0']} | ${'1'} | ${'v1.2.0'}
${['v1.0.0', '1.1.0', 'v1.1.1']} | ${'v1.1'} | ${'v1.1.1'}
${['1.0.0', 'v1.1.0', '1.1.1']} | ${'1'} | ${'1.1.1'}
${['v1.0.0', '1.1.0', 'v1.1.1']} | ${'1'} | ${'v1.1.1'}
${['1.0.0', '1.1.0', '1.2.0']} | ${'v1'} | ${'1.2.0'}
${['v1.0.0', 'v1.1.0', '1.2.0']} | ${'1'} | ${'1.2.0'}
`(
'getSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(semverPartial.getSatisfyingVersion(versions, range)).toBe(
expected,
);
},
);
});
describe('.minSatisfyingVersion()', () => {
it.each`
versions | range | expected
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0']} | ${'1'} | ${'1.0.0'}
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0']} | ${'1.1'} | ${'1.1.0'}
${['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.0.1']} | ${'2'} | ${'2.0.0'}
${['1.0.0', '1.1.0', '1.2.0', '2.0.0', '2.0.1', '2.1.0']} | ${'~latest'} | ${'1.0.0'}
${['1.0.0', '1.0.1-rc', '1.1.0']} | ${'1.0'} | ${'1.0.0'}
${['0.5.0', '1.0.0', '2.0.0']} | ${'3'} | ${null}
${['v0.5.0', 'v1.0.0', 'v2.0.0']} | ${'v3'} | ${null}
${['v1.0.0', '1.1.0', 'v1.2.0']} | ${'1'} | ${'v1.0.0'}
${['1.0.0', 'v1.1.0', '1.2.0']} | ${'v1'} | ${'1.0.0'}
${['v1.0.0', 'v1.1.0', '1.2.0', 'v2.0.0']} | ${'v1'} | ${'v1.0.0'}
${['1.0.0', '1.1.0', 'v1.2.0', '2.0.0']} | ${'1'} | ${'1.0.0'}
`(
'minSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(semverPartial.minSatisfyingVersion(versions, range)).toBe(
expected,
);
},
);
});
describe('.isLessThanRange()', () => {
it.each`
version | range | expected
${'0.9.0'} | ${'1'} | ${true}
${'1.0.0'} | ${'1'} | ${false}
${'1.5.0'} | ${'1'} | ${false}
${'2.0.0'} | ${'1'} | ${false}
${'1.0.0'} | ${'1.1'} | ${true}
${'1.1.0'} | ${'1.1'} | ${false}
${'1.2.0'} | ${'1.1'} | ${false}
${'0.9.0'} | ${'~latest'} | ${false}
${'1.0.0'} | ${'~latest'} | ${false}
${'1.5.0'} | ${'1'} | ${false}
${'invalid'} | ${'1'} | ${false}
${'v0.9.0'} | ${'v1'} | ${true}
${'v1.0.0'} | ${'v1'} | ${false}
${'v1.0.0'} | ${'v1.1'} | ${true}
${'0.9.0'} | ${'v1'} | ${true}
${'v0.9.0'} | ${'1'} | ${true}
${'1.0.0'} | ${'v1.1'} | ${true}
${'v1.0.0'} | ${'1.1'} | ${true}
${'v2.0.0'} | ${'1'} | ${false}
${'2.0.0'} | ${'v1'} | ${false}
`(
'isLessThanRange("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(semverPartial.isLessThanRange?.(version, range)).toBe(expected);
},
);
});
describe('.equals()', () => {
it.each`
version | other | expected
${'1.0.0'} | ${'1.0.0'} | ${true}
${'1.0.0'} | ${'1.0.1'} | ${false}
${'invalid'} | ${'1.0.0'} | ${false}
${'1.0.0'} | ${'invalid'} | ${false}
${'invalid'} | ${'invalid'} | ${false}
${'v1.0.0'} | ${'v1.0.0'} | ${true}
${'v1.0.0'} | ${'v1.0.1'} | ${false}
${'v1.0.0'} | ${'1.0.0'} | ${true}
${'1.0.0'} | ${'v1.0.0'} | ${true}
${'v1.0.0'} | ${'1.0.1'} | ${false}
${'1.0.1'} | ${'v1.0.0'} | ${false}
`(
'equals("$version", "$other") === $expected',
({ version, other, expected }) => {
expect(semverPartial.equals(version, other)).toBe(expected);
},
);
});
describe('.getMajor()', () => {
it.each`
version | expected
${'1.0.0'} | ${1}
${'2.3.4'} | ${2}
${'v1.0.0'} | ${1}
${'v2.3.4'} | ${2}
${'invalid'} | ${null}
`('getMajor("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.getMajor(version)).toBe(expected);
});
});
describe('.getMinor()', () => {
it.each`
version | expected
${'1.0.0'} | ${0}
${'2.3.4'} | ${3}
${'v1.0.0'} | ${0}
${'v2.3.4'} | ${3}
${'invalid'} | ${null}
`('getMinor("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.getMinor(version)).toBe(expected);
});
});
describe('.getPatch()', () => {
it.each`
version | expected
${'1.0.0'} | ${0}
${'2.3.4'} | ${4}
${'v1.0.0'} | ${0}
${'v2.3.4'} | ${4}
${'invalid'} | ${null}
`('getPatch("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.getPatch(version)).toBe(expected);
});
});
describe('.isGreaterThan()', () => {
it.each`
version | other | expected
${'1.0.1'} | ${'1.0.0'} | ${true}
${'1.0.0'} | ${'1.0.1'} | ${false}
${'2.0.0'} | ${'1.9.9'} | ${true}
${'invalid'} | ${'1.0.0'} | ${false}
${'1.0.0'} | ${'invalid'} | ${false}
${'v1.0.1'} | ${'v1.0.0'} | ${true}
${'v1.0.0'} | ${'v1.0.1'} | ${false}
${'v2.0.0'} | ${'v1.9.9'} | ${true}
${'v1.0.0'} | ${'1.0.1'} | ${false}
${'1.0.1'} | ${'v1.0.0'} | ${true}
${'v2.0.0'} | ${'1.0.0'} | ${true}
${'2.0.0'} | ${'v1.0.0'} | ${true}
${'v1.9.9'} | ${'1.9.8'} | ${true}
${'1.9.9'} | ${'v1.9.8'} | ${true}
`(
'isGreaterThan("$version", "$other") === $expected',
({ version, other, expected }) => {
expect(semverPartial.isGreaterThan(version, other)).toBe(expected);
},
);
});
describe('.sortVersions()', () => {
it.each`
a | b | expected
${'1.0.0'} | ${'1.0.0'} | ${0}
${'1.0.0'} | ${'1.0.1'} | ${-1}
${'1.0.1'} | ${'1.0.0'} | ${1}
${'2.0.0'} | ${'1.9.9'} | ${1}
${'invalid'} | ${'1.0.0'} | ${0}
${'1.0.0'} | ${'invalid'} | ${0}
${'invalid'} | ${'invalid'} | ${0}
${'v1.0.0'} | ${'v1.0.0'} | ${0}
${'v1.0.0'} | ${'v1.0.1'} | ${-1}
${'v1.0.1'} | ${'v1.0.0'} | ${1}
${'v1.0.0'} | ${'1.0.0'} | ${0}
${'1.0.0'} | ${'v1.0.0'} | ${0}
${'v1.0.0'} | ${'1.0.1'} | ${-1}
${'1.0.1'} | ${'v1.0.0'} | ${1}
`('sortVersions("$a", "$b") === $expected', ({ a, b, expected }) => {
expect(semverPartial.sortVersions(a, b)).toBe(expected);
});
});
describe('.isBreaking()', () => {
it.each`
version | current | expected
${'2.0.0'} | ${'1.0.0'} | ${true}
${'1.1.0'} | ${'1.0.0'} | ${false}
${'1.0.1'} | ${'1.0.0'} | ${false}
${'0.2.0'} | ${'0.1.0'} | ${true}
${'0.1.1'} | ${'0.1.0'} | ${false}
${'1.0.0'} | ${'0.9.0'} | ${true}
${'invalid'} | ${'1.0.0'} | ${false}
${'1.0.0'} | ${'invalid'} | ${false}
${'v2.0.0'} | ${'v1.0.0'} | ${true}
${'v1.1.0'} | ${'v1.0.0'} | ${false}
${'v0.2.0'} | ${'v0.1.0'} | ${true}
${'v2.0.0'} | ${'1.0.0'} | ${true}
${'2.0.0'} | ${'v1.0.0'} | ${true}
${'1.1.0'} | ${'v1.0.0'} | ${false}
${'v1.1.0'} | ${'1.0.0'} | ${false}
${'v1.0.0'} | ${'0.9.0'} | ${true}
${'1.0.0'} | ${'v0.9.0'} | ${true}
`(
'isBreaking("$version", "$current") === $expected',
({ version, current, expected }) => {
expect(semverPartial.isBreaking!(version, current)).toBe(expected);
},
);
});
describe('.isCompatible()', () => {
it.each`
version | expected
${'1.0.0'} | ${true}
${'1'} | ${true}
${'~latest'} | ${true}
${'v1.0.0'} | ${true}
${'v1'} | ${true}
${'invalid'} | ${false}
`('isCompatible("$version") === $expected', ({ version, expected }) => {
expect(semverPartial.isCompatible(version)).toBe(expected);
});
});
describe('.getNewValue()', () => {
it.each`
currentValue | rangeStrategy | currentVersion | newVersion | expected
${'1'} | ${'pin'} | ${'1.0.0'} | ${'1.1.0'} | ${'1.1.0'}
${'1.2'} | ${'pin'} | ${'1.2.0'} | ${'1.2.1'} | ${'1.2.1'}
${'1.2.3'} | ${'pin'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'2'} | ${'pin'} | ${'2.0.0'} | ${'2.1.0'} | ${'2.1.0'}
${'2.5'} | ${'pin'} | ${'2.5.0'} | ${'2.5.3'} | ${'2.5.3'}
${'10'} | ${'pin'} | ${'10.0.0'} | ${'10.1.0'} | ${'10.1.0'}
${'~latest'} | ${'pin'} | ${'1.0.0'} | ${'1.1.0'} | ${'1.1.0'}
${'1.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.1.0'} | ${'1.1.0'}
${'v1'} | ${'pin'} | ${'v1.0.0'} | ${'v1.1.0'} | ${'v1.1.0'}
${'v1.2'} | ${'pin'} | ${'v1.2.0'} | ${'v1.2.1'} | ${'v1.2.1'}
${'v1.2.3'} | ${'pin'} | ${'v1.2.3'} | ${'v1.2.4'} | ${'v1.2.4'}
${'v1'} | ${'pin'} | ${'v1.0.0'} | ${'1.1.0'} | ${'1.1.0'}
${'v1.2.3'} | ${'pin'} | ${'v1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'1'} | ${'pin'} | ${'1.0.0'} | ${'v1.1.0'} | ${'v1.1.0'}
${'1.2.3'} | ${'pin'} | ${'1.2.3'} | ${'v1.2.4'} | ${'v1.2.4'}
${'1'} | ${'replace'} | ${'1.0.0'} | ${'1.1.0'} | ${'1'}
${'1'} | ${'replace'} | ${'1.0.0'} | ${'2.0.0'} | ${'2'}
${'1.2'} | ${'replace'} | ${'1.2.0'} | ${'1.2.1'} | ${'1.2'}
${'1.2'} | ${'replace'} | ${'1.2.0'} | ${'1.3.0'} | ${'1.3'}
${'1.2.3'} | ${'replace'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'1.2.3'} | ${'replace'} | ${'1.2.3'} | ${'1.3.0'} | ${'1.3.0'}
${'1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.0'} | ${'1'}
${'1.2'} | ${'replace'} | ${'1.2.0'} | ${'2.0.0'} | ${'2.0'}
${'2'} | ${'replace'} | ${'2.0.0'} | ${'3.0.0'} | ${'3'}
${'2.1'} | ${'replace'} | ${'2.1.0'} | ${'2.2.0'} | ${'2.2'}
${'10.5'} | ${'replace'} | ${'10.5.0'} | ${'10.6.0'} | ${'10.6'}
${'~latest'} | ${'replace'} | ${'1.0.0'} | ${'2.0.0'} | ${'~latest'}
${'1.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.1.0'} | ${'1.1.0'}
${'1'} | ${'replace'} | ${'1.0.0'} | ${'invalid'} | ${'invalid'}
${'v1'} | ${'replace'} | ${'v1.0.0'} | ${'v1.1.0'} | ${'v1'}
${'v1'} | ${'replace'} | ${'v1.0.0'} | ${'v2.0.0'} | ${'v2'}
${'v1.2'} | ${'replace'} | ${'v1.2.0'} | ${'v1.2.1'} | ${'v1.2'}
${'v1.2'} | ${'replace'} | ${'v1.2.0'} | ${'v1.3.0'} | ${'v1.3'}
${'v1.2.3'} | ${'replace'} | ${'v1.2.3'} | ${'v1.2.4'} | ${'v1.2.4'}
${'v1.2.3'} | ${'replace'} | ${'v1.2.3'} | ${'v1.3.0'} | ${'v1.3.0'}
${'v1'} | ${'replace'} | ${'v1.0.0'} | ${'v1.2.0'} | ${'v1'}
${'v2'} | ${'replace'} | ${'v2.0.0'} | ${'v3.0.0'} | ${'v3'}
${'v1'} | ${'replace'} | ${'v1.0.0'} | ${'1.1.0'} | ${'v1'}
${'v1'} | ${'replace'} | ${'v1.0.0'} | ${'2.0.0'} | ${'v2'}
${'v1.2.3'} | ${'replace'} | ${'v1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'1'} | ${'replace'} | ${'1.0.0'} | ${'v1.1.0'} | ${'1'}
${'1'} | ${'replace'} | ${'1.0.0'} | ${'v2.0.0'} | ${'2'}
${'1.2.3'} | ${'replace'} | ${'1.2.3'} | ${'v1.2.4'} | ${'v1.2.4'}
${'not-a-version'} | ${'replace'} | ${'1.0.0'} | ${'2.0.0'} | ${'2.0.0'}
`(
'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"',
({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
expected,
}) => {
expect(
semverPartial.getNewValue({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
}),
).toBe(expected);
},
);
});
});