Skip to content

Commit

Permalink
test: Refactor Ivy versioning tests (#11718)
Browse files Browse the repository at this point in the history
  • Loading branch information
zharinov committed Sep 14, 2021
1 parent 2d2edf2 commit e6a26a7
Showing 1 changed file with 163 additions and 180 deletions.
343 changes: 163 additions & 180 deletions lib/versioning/ivy/index.spec.ts
Expand Up @@ -6,194 +6,177 @@ import {
} from './parse';
import ivy from '.';

const { getNewValue, isValid, isVersion, matches } = ivy;

describe('versioning/ivy/index', () => {
it('parses dynamic revisions', () => {
expect(parseDynamicRevision(null)).toBeNull();
expect(parseDynamicRevision('')).toBeNull();

expect(parseDynamicRevision('latest')).toEqual({
type: REV_TYPE_LATEST,
value: null,
});
expect(parseDynamicRevision('latest.release')).toEqual({
type: REV_TYPE_LATEST,
value: 'release',
});
expect(parseDynamicRevision('latest.milestone')).toEqual({
type: REV_TYPE_LATEST,
value: 'milestone',
});
expect(parseDynamicRevision('latest.integration')).toEqual({
type: REV_TYPE_LATEST,
value: null,
});

expect(parseDynamicRevision('.+')).toBeNull();
expect(parseDynamicRevision('1.0.+')).toEqual({
type: REV_TYPE_SUBREV,
value: '1.0',
});
expect(parseDynamicRevision('1.2.3.+')).toEqual({
type: REV_TYPE_SUBREV,
value: '1.2.3',
});
test.each`
input | type | value
${'latest'} | ${REV_TYPE_LATEST} | ${null}
${'latest.release'} | ${REV_TYPE_LATEST} | ${'release'}
${'latest.milestone'} | ${REV_TYPE_LATEST} | ${'milestone'}
${'latest.integration'} | ${REV_TYPE_LATEST} | ${null}
${'1.0.+'} | ${REV_TYPE_SUBREV} | ${'1.0'}
${'1.2.3.+'} | ${REV_TYPE_SUBREV} | ${'1.2.3'}
${'[1.0,2.0]'} | ${REV_TYPE_RANGE} | ${'[1.0,2.0]'}
${'[1.0,2.0['} | ${REV_TYPE_RANGE} | ${'[1.0,2.0['}
${']1.0,2.0]'} | ${REV_TYPE_RANGE} | ${']1.0,2.0]'}
${']1.0,2.0['} | ${REV_TYPE_RANGE} | ${']1.0,2.0['}
${'[1.0,)'} | ${REV_TYPE_RANGE} | ${'[1.0,)'}
${']1.0,)'} | ${REV_TYPE_RANGE} | ${']1.0,)'}
${'(,2.0]'} | ${REV_TYPE_RANGE} | ${'(,2.0]'}
${'(,2.0['} | ${REV_TYPE_RANGE} | ${'(,2.0['}
`(
'parseDynamicRevision("$input") === { type: "$type", value: "$value" }',
({ input, type, value }) => {
expect(parseDynamicRevision(input)).toEqual({ type, value });
}
);

[
'[1.0,2.0]',
'[1.0,2.0[',
']1.0,2.0]',
']1.0,2.0[',
'[1.0,)',
']1.0,)',
'(,2.0]',
'(,2.0[',
].forEach((value) => {
expect(parseDynamicRevision(value)).toEqual({
type: REV_TYPE_RANGE,
value,
});
});

expect(parseDynamicRevision('[0,1),(1,)')).toBeNull();
test.each`
input
${null}
${''}
${'.+'}
${'[0,1),(1,)'}
`('parseDynamicRevision("$input") === null', ({ input, type, value }) => {
expect(parseDynamicRevision(value)).toBeNull();
});

it('isValid', () => {
expect(isValid('')).toBe(false);
expect(isValid('1.0.0')).toBe(true);
expect(isValid('0')).toBe(true);
expect(isValid('0.1-2-sp')).toBe(true);
expect(isValid('1-final')).toBe(true);
expect(isValid('v1.0.0')).toBe(true);
expect(isValid('x1.0.0')).toBe(true);
expect(isValid('2.1.1.RELEASE')).toBe(true);
expect(isValid('Greenwich.SR1')).toBe(true);
expect(isValid('.1')).toBe(false);
expect(isValid('1.')).toBe(false);
expect(isValid('-1')).toBe(false);
expect(isValid('1-')).toBe(false);

expect(isValid('latest')).toBe(true);
expect(isValid('latest.release')).toBe(true);
expect(isValid('latest.milestone')).toBe(true);
expect(isValid('latest.integration')).toBe(true);
expect(isValid('1.0.+')).toBe(true);
expect(isValid('1.0+')).toBe(false);
expect(isValid(']0,1[')).toBe(true);
expect(isValid('[0,1]')).toBe(true);
expect(isValid('[0,1),(1,2]')).toBe(false);
test.each`
input | expected
${''} | ${false}
${'1.0.0'} | ${true}
${'0'} | ${true}
${'0.1-2-sp'} | ${true}
${'1-final'} | ${true}
${'v1.0.0'} | ${true}
${'x1.0.0'} | ${true}
${'2.1.1.RELEASE'} | ${true}
${'Greenwich.SR1'} | ${true}
${'.1'} | ${false}
${'1.'} | ${false}
${'-1'} | ${false}
${'1-'} | ${false}
${'latest'} | ${true}
${'latest.release'} | ${true}
${'latest.milestone'} | ${true}
${'latest.integration'} | ${true}
${'1.0.+'} | ${true}
${'1.0+'} | ${false}
${']0,1['} | ${true}
${'[0,1]'} | ${true}
${'[0,1),(1,2]'} | ${false}
`('isValid("$input") === $expected', ({ input, expected }) => {
const res = !!ivy.isValid(input);
expect(res).toBe(expected);
});
it('isVersion', () => {
expect(isVersion('')).toBe(false);
expect(isVersion('1.0.0')).toBe(true);
expect(isVersion('0')).toBe(true);
expect(isVersion('0.1-2-sp')).toBe(true);
expect(isVersion('1-final')).toBe(true);
expect(isVersion('v1.0.0')).toBe(true);
expect(isVersion('x1.0.0')).toBe(true);
expect(isVersion('2.1.1.RELEASE')).toBe(true);
expect(isVersion('Greenwich.SR1')).toBe(true);
expect(isVersion('.1')).toBe(false);
expect(isVersion('1.')).toBe(false);
expect(isVersion('-1')).toBe(false);
expect(isVersion('1-')).toBe(false);

expect(isVersion('latest')).toBe(false);
expect(isVersion('latest.release')).toBe(false);
expect(isVersion('latest.milestone')).toBe(false);
expect(isVersion('latest.integration')).toBe(false);
expect(isVersion('1.0.+')).toBe(false);
expect(isVersion('1.0+')).toBe(false);
expect(isVersion(']0,1[')).toBe(false);
expect(isVersion('[0,1]')).toBe(false);
expect(isVersion('[0,1),(1,2]')).toBe(false);
test.each`
input | expected
${''} | ${false}
${'1.0.0'} | ${true}
${'0'} | ${true}
${'0.1-2-sp'} | ${true}
${'1-final'} | ${true}
${'v1.0.0'} | ${true}
${'x1.0.0'} | ${true}
${'2.1.1.RELEASE'} | ${true}
${'Greenwich.SR1'} | ${true}
${'.1'} | ${false}
${'1.'} | ${false}
${'-1'} | ${false}
${'1-'} | ${false}
${'latest'} | ${false}
${'latest.release'} | ${false}
${'latest.milestone'} | ${false}
${'latest.integration'} | ${false}
${'1.0.+'} | ${false}
${'1.0+'} | ${false}
${']0,1['} | ${false}
${'[0,1]'} | ${false}
${'[0,1),(1,2]'} | ${false}
`('isVersion("$input") === $expected', ({ input, expected }) => {
expect(ivy.isVersion(input)).toBe(expected);
});
it('matches', () => {
expect(matches('', 'latest')).toBe(false);
expect(matches('0', '')).toBe(false);
expect(matches('0', 'latest')).toBe(true);
expect(matches('0', 'latest.integration')).toBe(true);

expect(matches('0', 'latest.release')).toBe(false);
expect(matches('release', 'latest.release')).toBe(true);
expect(matches('0.release', 'latest.release')).toBe(true);
expect(matches('0-release', 'latest.release')).toBe(true);
expect(matches('0release', 'latest.release')).toBe(true);
expect(matches('0.RELEASE', 'latest.release')).toBe(true);
test.each`
version | range | expected
${''} | ${'latest'} | ${false}
${'0'} | ${''} | ${false}
${'0'} | ${'latest'} | ${true}
${'0'} | ${'latest.integration'} | ${true}
${'0'} | ${'latest.release'} | ${false}
${'release'} | ${'latest.release'} | ${true}
${'0.release'} | ${'latest.release'} | ${true}
${'0-release'} | ${'latest.release'} | ${true}
${'0release'} | ${'latest.release'} | ${true}
${'0.RELEASE'} | ${'latest.release'} | ${true}
${'0'} | ${'latest.milestone'} | ${false}
${'milestone'} | ${'latest.milestone'} | ${true}
${'0.milestone'} | ${'latest.milestone'} | ${true}
${'0-milestone'} | ${'latest.milestone'} | ${true}
${'0milestone'} | ${'latest.milestone'} | ${true}
${'0.MILESTONE'} | ${'latest.milestone'} | ${true}
${'0'} | ${'1.0.+'} | ${false}
${'1.1.0'} | ${'1.2.+'} | ${false}
${'1.2.0'} | ${'1.2.+'} | ${true}
${'1.2.milestone'} | ${'1.2.+'} | ${true}
${'1.3'} | ${'1.2.+'} | ${false}
${'1'} | ${'1'} | ${true}
${'1'} | ${'0'} | ${false}
${'1'} | ${'[0,1]'} | ${true}
${'0'} | ${'(0,1)'} | ${false}
${'0'} | ${'(0,1['} | ${false}
${'0'} | ${']0,1)'} | ${false}
${'1'} | ${'(0,1)'} | ${false}
${'1'} | ${'(0,2)'} | ${true}
${'1'} | ${'[0,2]'} | ${true}
${'1'} | ${'(,1]'} | ${true}
${'1'} | ${'(,1)'} | ${false}
${'1'} | ${'[1,)'} | ${true}
${'1'} | ${'(1,)'} | ${false}
`(
'matches("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(ivy.matches(version, range)).toBe(expected);
}
);

expect(matches('0', 'latest.milestone')).toBe(false);
expect(matches('milestone', 'latest.milestone')).toBe(true);
expect(matches('0.milestone', 'latest.milestone')).toBe(true);
expect(matches('0-milestone', 'latest.milestone')).toBe(true);
expect(matches('0milestone', 'latest.milestone')).toBe(true);
expect(matches('0.MILESTONE', 'latest.milestone')).toBe(true);

expect(matches('0', '1.0.+')).toBe(false);
expect(matches('1.1.0', '1.2.+')).toBe(false);
expect(matches('1.2.0', '1.2.+')).toBe(true);
expect(matches('1.2.milestone', '1.2.+')).toBe(true);
expect(matches('1.3', '1.2.+')).toBe(false);
test.each`
currentValue | rangeStrategy | currentVersion | newVersion | expected
${'1'} | ${'auto'} | ${'1'} | ${'1.1'} | ${'1.1'}
${'[1.2.3,]'} | ${'auto'} | ${'1.2.3'} | ${'1.2.4'} | ${'[1.2.3,]'}
${'[1.2.3]'} | ${'pin'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'[1.0.0,1.2.3]'} | ${'pin'} | ${'1.0.0'} | ${'1.2.4'} | ${'1.2.4'}
${'[1.0.0,1.2.23]'} | ${'pin'} | ${'1.0.0'} | ${'1.2.23'} | ${'1.2.23'}
${'(,1.0]'} | ${'pin'} | ${'0.0.1'} | ${'2.0'} | ${'2.0'}
${'],1.0]'} | ${'pin'} | ${'0.0.1'} | ${'2.0'} | ${'2.0'}
${'(,1.0)'} | ${'pin'} | ${'0.1'} | ${'2.0'} | ${'2.0'}
${'],1.0['} | ${'pin'} | ${'2.0'} | ${'],2.0['} | ${'],2.0['}
${'[1.0,1.2],[1.3,1.5)'} | ${'pin'} | ${'1.0'} | ${'1.2.4'} | ${'1.2.4'}
${'[1.0,1.2],[1.3,1.5['} | ${'pin'} | ${'1.0'} | ${'1.2.4'} | ${'1.2.4'}
${'[1.2.3,)'} | ${'pin'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'[1.2.3,['} | ${'pin'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'}
${'latest.integration'} | ${'pin'} | ${'1.0'} | ${'2.0'} | ${'2.0'}
${'latest'} | ${'pin'} | ${'1.0'} | ${'2.0'} | ${'2.0'}
`(
'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"',
({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => {
const res = ivy.getNewValue({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
});
expect(res).toEqual(expected);
}
);

expect(matches('1', '1')).toBe(true);
expect(matches('1', '0')).toBe(false);
expect(matches('1', '[0,1]')).toBe(true);
expect(matches('0', '(0,1)')).toBe(false);
expect(matches('0', '(0,1[')).toBe(false);
expect(matches('0', ']0,1)')).toBe(false);
expect(matches('1', '(0,1)')).toBe(false);
expect(matches('1', '(0,2)')).toBe(true);
expect(matches('1', '[0,2]')).toBe(true);
expect(matches('1', '(,1]')).toBe(true);
expect(matches('1', '(,1)')).toBe(false);
expect(matches('1', '[1,)')).toBe(true);
expect(matches('1', '(1,)')).toBe(false);
});
it('api', () => {
expect(ivy.isGreaterThan('1.1', '1')).toBe(true);
expect(ivy.getSatisfyingVersion(['0', '1', '2'], '(,2)')).toBe('1');
expect(
ivy.getNewValue({
currentValue: '1',
rangeStrategy: 'auto',
currentVersion: '1',
newVersion: '1.1',
})
).toBe('1.1');
expect(
ivy.getNewValue({
currentValue: '[1.2.3,]',
rangeStrategy: 'auto',
currentVersion: '1.2.3',
newVersion: '1.2.4',
})
).toBe('[1.2.3,]');
});
it('pin', () => {
const sample = [
['[1.2.3]', '1.2.3', '1.2.4'],
['[1.0.0,1.2.3]', '1.0.0', '1.2.4'],
['[1.0.0,1.2.23]', '1.0.0', '1.2.23'],
['(,1.0]', '0.0.1', '2.0'],
['],1.0]', '0.0.1', '2.0'],
['(,1.0)', '0.1', '2.0'],
['],1.0[', '2.0', '],2.0['],
['[1.0,1.2],[1.3,1.5)', '1.0', '1.2.4'],
['[1.0,1.2],[1.3,1.5[', '1.0', '1.2.4'],
['[1.2.3,)', '1.2.3', '1.2.4'],
['[1.2.3,[', '1.2.3', '1.2.4'],
['latest.integration', '1.0', '2.0'],
['latest', '1.0', '2.0'],
];
sample.forEach(([currentValue, currentVersion, newVersion]) => {
expect(
getNewValue({
currentValue,
rangeStrategy: 'pin',
currentVersion,
newVersion,
})
).toEqual(newVersion);
});
});
test.each`
versions | range | expected
${['0', '1', '2']} | ${'(,2)'} | ${'1'}
`(
'getSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(ivy.getSatisfyingVersion(versions, range)).toBe(expected);
}
);
});

0 comments on commit e6a26a7

Please sign in to comment.