test: Refactor Hashicorp and Hex versioning (#11684)

This commit is contained in:
Sergei Zharinov 2021-09-11 11:39:19 +03:00 committed by GitHub
parent 65dd2bb132
commit 5c7a4924f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 163 additions and 343 deletions

View file

@ -1,125 +1,77 @@
import { api as semver } from '.';
describe('versioning/hashicorp/index', () => {
describe('semver.matches()', () => {
it('handles tilde greater than', () => {
expect(semver.matches('4.2.0', '~> 4.0')).toBe(true);
expect(semver.matches('4.2.0', '~> 4.0.0')).toBe(false);
});
});
describe('semver.getSatisfyingVersion()', () => {
it('handles tilde greater than', () => {
expect(
semver.getSatisfyingVersion(
['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
'~> 4.0'
)
).toBe('4.2.0');
expect(
semver.getSatisfyingVersion(
['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
'~> 4.0.0'
)
).toBe('4.0.0');
});
});
describe('semver.isValid()', () => {
it('handles comma', () => {
expect(semver.isValid('>= 1.0.0, <= 2.0.0')).toBeTruthy();
});
});
describe('semver.isLessThanRange()', () => {
it('handles comma', () => {
expect(semver.isLessThanRange('0.9.0', '>= 1.0.0, <= 2.0.0')).toBe(true);
expect(semver.isLessThanRange('1.9.0', '>= 1.0.0, <= 2.0.0')).toBe(false);
});
});
describe('semver.minSatisfyingVersion()', () => {
it('handles tilde greater than', () => {
expect(
semver.minSatisfyingVersion(
['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
'~> 4.0'
)
).toBe('4.2.0');
expect(
semver.minSatisfyingVersion(
['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
'~> 4.0.0'
)
).toBeNull();
});
});
describe('semver.getNewValue()', () => {
it('handles tilde greater than', () => {
expect(
semver.getNewValue({
currentValue: '~> 1.2',
rangeStrategy: 'replace',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('~> 2.0');
expect(
semver.getNewValue({
currentValue: '~> 1.2.0',
rangeStrategy: 'replace',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('~> 2.0.0');
expect(
semver.getNewValue({
currentValue: '~> 0.14.0',
rangeStrategy: 'replace',
currentVersion: '0.14.1',
newVersion: '0.15.0',
})
).toEqual('~> 0.15.0');
expect(
semver.getNewValue({
currentValue: '~> 0.14.0',
rangeStrategy: 'replace',
currentVersion: '0.14.1',
newVersion: '0.15.1',
})
).toEqual('~> 0.15.0');
expect(
semver.getNewValue({
currentValue: '~> 0.14.6',
rangeStrategy: 'replace',
currentVersion: '0.14.6',
newVersion: '0.15.0',
})
).toEqual('~> 0.15.0');
});
it('handles comma dividers', () => {
expect(
semver.getNewValue({
currentValue: '>= 1.0.0, <= 2.0.0',
rangeStrategy: 'widen',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('>= 1.0.0, <= 2.0.7');
});
it('updates short ranges', () => {
expect(
semver.getNewValue({
currentValue: '0.14',
rangeStrategy: 'replace',
currentVersion: '0.14.2',
newVersion: '0.15.0',
})
).toEqual('0.15');
expect(
semver.getNewValue({
currentValue: '~> 0.14',
rangeStrategy: 'replace',
currentVersion: '0.14.2',
newVersion: '0.15.0',
})
).toEqual('~> 0.15');
});
test.each`
version | range | expected
${'4.2.0'} | ${'~> 4.0'} | ${true}
${'4.2.0'} | ${'~> 4.0.0'} | ${false}
`(
'matches("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(semver.matches(version, range)).toBe(expected);
}
);
test.each`
versions | range | expected
${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'}
${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${'4.0.0'}
`(
'getSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(semver.getSatisfyingVersion(versions, range)).toBe(expected);
}
);
test.each`
input | expected
${'>= 1.0.0, <= 2.0.0'} | ${true}
`('isValid("$input") === $expected', ({ input, expected }) => {
const res = !!semver.isValid(input);
expect(res).toBe(expected);
});
test.each`
version | range | expected
${'0.9.0'} | ${'>= 1.0.0, <= 2.0.0'} | ${true}
${'1.9.0'} | ${'>= 1.0.0, <= 2.0.0'} | ${false}
`(
'isLessThanRange($version, $range) === $expected',
({ version, range, expected }) => {
expect(semver.isLessThanRange(version, range)).toBe(expected);
}
);
test.each`
versions | range | expected
${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'}
${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${null}
`(
'minSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(semver.minSatisfyingVersion(versions, range)).toBe(expected);
}
);
test.each`
currentValue | rangeStrategy | currentVersion | newVersion | expected
${'~> 1.2'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0'}
${'~> 1.2.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0.0'}
${'~> 0.14.0'} | ${'replace'} | ${'0.14.1'} | ${'0.15.0'} | ${'~> 0.15.0'}
${'~> 0.14.0'} | ${'replace'} | ${'0.14.1'} | ${'0.15.1'} | ${'~> 0.15.0'}
${'~> 0.14.6'} | ${'replace'} | ${'0.14.6'} | ${'0.15.0'} | ${'~> 0.15.0'}
${'>= 1.0.0, <= 2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.0.7'} | ${'>= 1.0.0, <= 2.0.7'}
${'0.14'} | ${'replace'} | ${'0.14.2'} | ${'0.15.0'} | ${'0.15'}
${'~> 0.14'} | ${'replace'} | ${'0.14.2'} | ${'0.15.0'} | ${'~> 0.15'}
`(
'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"',
({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => {
const res = semver.getNewValue({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
});
expect(res).toEqual(expected);
}
);
});

View file

@ -1,228 +1,96 @@
import { api as hexScheme } from '.';
describe('versioning/hex/index', () => {
describe('hexScheme.matches()', () => {
it('handles tilde greater than', () => {
expect(hexScheme.matches('4.2.0', '~> 4.0')).toBe(true);
expect(hexScheme.matches('2.1.0', '~> 2.0.0')).toBe(false);
expect(hexScheme.matches('2.0.0', '>= 2.0.0 and < 2.1.0')).toBe(true);
expect(hexScheme.matches('2.1.0', '== 2.0.0 or < 2.1.0')).toBe(false);
expect(hexScheme.matches('1.9.4', '== 1.9.4')).toBe(true);
expect(hexScheme.matches('1.9.5', '== 1.9.4')).toBe(false);
});
});
it('handles tilde greater than', () => {
expect(
hexScheme.getSatisfyingVersion(
['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
'~> 4.0'
)
).toBe('4.2.0');
expect(
hexScheme.getSatisfyingVersion(
['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'],
'~> 4.0.0'
)
).toBe('4.0.0');
});
describe('hexScheme.isValid()', () => {
it('handles and', () => {
expect(hexScheme.isValid('>= 1.0.0 and <= 2.0.0')).toBeTruthy();
});
it('handles or', () => {
expect(hexScheme.isValid('>= 1.0.0 or <= 2.0.0')).toBeTruthy();
});
it('handles !=', () => {
expect(hexScheme.isValid('!= 1.0.0')).toBeTruthy();
});
it('handles ==', () => {
expect(hexScheme.isValid('== 1.0.0')).toBeTruthy();
});
});
describe('hexScheme.isLessThanRange()', () => {
it('handles and', () => {
expect(hexScheme.isLessThanRange('0.1.0', '>= 1.0.0 and <= 2.0.0')).toBe(
true
);
expect(hexScheme.isLessThanRange('1.9.0', '>= 1.0.0 and <= 2.0.0')).toBe(
false
);
});
it('handles or', () => {
expect(hexScheme.isLessThanRange('0.9.0', '>= 1.0.0 or >= 2.0.0')).toBe(
true
);
expect(hexScheme.isLessThanRange('1.9.0', '>= 1.0.0 or >= 2.0.0')).toBe(
false
);
});
});
describe('hexScheme.minSatisfyingVersion()', () => {
it('handles tilde greater than', () => {
expect(
hexScheme.minSatisfyingVersion(
['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
'~> 4.0'
)
).toBe('4.2.0');
expect(
hexScheme.minSatisfyingVersion(
['0.4.0', '0.5.0', '4.2.0', '5.0.0'],
'~> 4.0.0'
)
).toBeNull();
});
});
describe('hexScheme.getNewValue()', () => {
it('handles exact pin', () => {
expect(
hexScheme.getNewValue({
currentValue: '== 1.2.3',
rangeStrategy: 'pin',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('== 2.0.7');
});
it('handles exact bump', () => {
expect(
hexScheme.getNewValue({
currentValue: '== 3.6.1',
rangeStrategy: 'bump',
currentVersion: '3.6.1',
newVersion: '3.6.2',
})
).toEqual('== 3.6.2');
});
it('handles exact replace', () => {
expect(
hexScheme.getNewValue({
currentValue: '== 3.6.1',
rangeStrategy: 'replace',
currentVersion: '3.6.1',
newVersion: '3.6.2',
})
).toEqual('== 3.6.2');
});
it('handles tilde greater than', () => {
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2',
rangeStrategy: 'replace',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('~> 2.0');
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2',
rangeStrategy: 'pin',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('== 2.0.7');
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2',
rangeStrategy: 'bump',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('~> 2.0');
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2',
rangeStrategy: 'bump',
currentVersion: '1.2.3',
newVersion: '1.3.1',
})
).toEqual('~> 1.3');
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2.0',
rangeStrategy: 'replace',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('~> 2.0.0');
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2.0',
rangeStrategy: 'pin',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('== 2.0.7');
expect(
hexScheme.getNewValue({
currentValue: '~> 1.2.0',
rangeStrategy: 'bump',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('~> 2.0.7');
});
});
it('handles and', () => {
expect(
hexScheme.getNewValue({
currentValue: '>= 1.0.0 and <= 2.0.0',
rangeStrategy: 'widen',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('>= 1.0.0 and <= 2.0.7');
expect(
hexScheme.getNewValue({
currentValue: '>= 1.0.0 and <= 2.0.0',
rangeStrategy: 'replace',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('<= 2.0.7');
expect(
hexScheme.getNewValue({
currentValue: '>= 1.0.0 and <= 2.0.0',
rangeStrategy: 'pin',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('== 2.0.7');
});
it('handles or', () => {
expect(
hexScheme.getNewValue({
currentValue: '>= 1.0.0 or <= 2.0.0',
rangeStrategy: 'widen',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('>= 1.0.0 or <= 2.0.0');
expect(
hexScheme.getNewValue({
currentValue: '>= 1.0.0 or <= 2.0.0',
rangeStrategy: 'replace',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('<= 2.0.7');
expect(
hexScheme.getNewValue({
currentValue: '>= 1.0.0 or <= 2.0.0',
rangeStrategy: 'pin',
currentVersion: '1.2.3',
newVersion: '2.0.7',
})
).toEqual('== 2.0.7');
});
it('handles short range replace', () => {
expect(
hexScheme.getNewValue({
currentValue: '~> 0.4',
rangeStrategy: 'replace',
currentVersion: '0.4.2',
newVersion: '0.6.0',
})
).toEqual('~> 0.6');
test.each`
version | range | expected
${'4.2.0'} | ${'~> 4.0'} | ${true}
${'2.1.0'} | ${'~> 2.0.0'} | ${false}
${'2.0.0'} | ${'>= 2.0.0 and < 2.1.0'} | ${true}
${'2.1.0'} | ${'== 2.0.0 or < 2.1.0'} | ${false}
${'1.9.4'} | ${'== 1.9.4'} | ${true}
${'1.9.5'} | ${'== 1.9.4'} | ${false}
`(
'matches("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(hexScheme.matches(version, range)).toBe(expected);
}
);
test.each`
versions | range | expected
${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'}
${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${'4.0.0'}
`(
'getSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(hexScheme.getSatisfyingVersion(versions, range)).toBe(expected);
}
);
test.each`
input | expected
${'>= 1.0.0 and <= 2.0.0'} | ${true}
${'>= 1.0.0 or <= 2.0.0'} | ${true}
${'!= 1.0.0'} | ${true}
${'== 1.0.0'} | ${true}
`('isValid("$input") === $expected', ({ input, expected }) => {
const res = !!hexScheme.isValid(input);
expect(res).toBe(expected);
});
test.each`
version | range | expected
${'0.1.0'} | ${'>= 1.0.0 and <= 2.0.0'} | ${true}
${'1.9.0'} | ${'>= 1.0.0 and <= 2.0.0'} | ${false}
${'0.9.0'} | ${'>= 1.0.0 or >= 2.0.0'} | ${true}
${'1.9.0'} | ${'>= 1.0.0 or >= 2.0.0'} | ${false}
`(
'isLessThanRange($version, $range) === $expected',
({ version, range, expected }) => {
expect(hexScheme.isLessThanRange(version, range)).toBe(expected);
}
);
test.each`
versions | range | expected
${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'}
${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${null}
`(
'minSatisfyingVersion($versions, "$range") === $expected',
({ versions, range, expected }) => {
expect(hexScheme.minSatisfyingVersion(versions, range)).toBe(expected);
}
);
test.each`
currentValue | rangeStrategy | currentVersion | newVersion | expected
${'== 1.2.3'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'}
${'== 3.6.1'} | ${'bump'} | ${'3.6.1'} | ${'3.6.2'} | ${'== 3.6.2'}
${'== 3.6.1'} | ${'replace'} | ${'3.6.1'} | ${'3.6.2'} | ${'== 3.6.2'}
${'~> 1.2'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0'}
${'~> 1.2'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'}
${'~> 1.2'} | ${'bump'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0'}
${'~> 1.2'} | ${'bump'} | ${'1.2.3'} | ${'1.3.1'} | ${'~> 1.3'}
${'~> 1.2.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0.0'}
${'~> 1.2.0'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'}
${'~> 1.2.0'} | ${'bump'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0.7'}
${'>= 1.0.0 and <= 2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.0.7'} | ${'>= 1.0.0 and <= 2.0.7'}
${'>= 1.0.0 and <= 2.0.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'<= 2.0.7'}
${'>= 1.0.0 and <= 2.0.0'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'}
${'>= 1.0.0 or <= 2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.0.7'} | ${'>= 1.0.0 or <= 2.0.0'}
${'>= 1.0.0 or <= 2.0.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'<= 2.0.7'}
${'>= 1.0.0 or <= 2.0.0'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'}
${'~> 0.4'} | ${'replace'} | ${'0.4.2'} | ${'0.6.0'} | ${'~> 0.6'}
`(
'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"',
({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => {
const res = hexScheme.getNewValue({
currentValue,
rangeStrategy,
currentVersion,
newVersion,
});
expect(res).toEqual(expected);
}
);
});