diff --git a/lib/versioning/cargo/index.ts b/lib/versioning/cargo/index.ts index 50847c56b2b6d87dfd317fe265ec89c6fa67f1bc..aa21ac9c573afa3a5403197a90de4b34dac42f19 100644 --- a/lib/versioning/cargo/index.ts +++ b/lib/versioning/cargo/index.ts @@ -1,5 +1,5 @@ import { api as npm } from '../npm'; -import { VersioningApi, RangeStrategy } from '../common'; +import { VersioningApi, NewValueConfig } from '../common'; const isVersion = (input: string): string | boolean => npm.isVersion(input); @@ -64,12 +64,12 @@ const isSingleVersion = (constraint: string): string | boolean => .trim() ); -function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { +function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { if (rangeStrategy === 'pin' || isSingleVersion(currentValue)) { let res = '='; if (currentValue.startsWith('= ')) { @@ -78,12 +78,12 @@ function getNewValue( res += toVersion; return res; } - const newSemver = npm.getNewValue( - cargo2npm(currentValue), + const newSemver = npm.getNewValue({ + currentValue: cargo2npm(currentValue), rangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); let newCargo = npm2cargo(newSemver); // Try to reverse any caret we added if (newCargo.startsWith('^') && !currentValue.startsWith('^')) { diff --git a/lib/versioning/common.ts b/lib/versioning/common.ts index 06ffe3da243172972fa4d2cf6cba351ff47fea71..c1e3a5aba8a585d28093346d1d963f9db77c07f1 100644 --- a/lib/versioning/common.ts +++ b/lib/versioning/common.ts @@ -9,6 +9,12 @@ export type RangeStrategy = | 'update-lockfile' | 'widen'; +export interface NewValueConfig { + currentValue: string; + rangeStrategy: RangeStrategy; + fromVersion?: string; + toVersion: string; +} export interface VersioningApi { // validation isCompatible(version: string, range?: string): string | boolean | null; @@ -28,12 +34,7 @@ export interface VersioningApi { isLessThanRange?(version: string, range: string): boolean; maxSatisfyingVersion(versions: string[], range: string): string | null; minSatisfyingVersion(versions: string[], range: string): string | null; - getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string - ): string; + getNewValue(newValueConfig: NewValueConfig): string; sortVersions(version: string, other: string): number; matches(version: string, range: string | Range): boolean; diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts index c5880f4a91aebb42d4cb8dec01a550fa2f01ba64..a4a57a950f0c6805022a2b46a70116feb6a802aa 100644 --- a/lib/versioning/composer/index.ts +++ b/lib/versioning/composer/index.ts @@ -1,7 +1,7 @@ import { coerce } from 'semver'; import { logger } from '../../logger'; import { api as npm } from '../npm'; -import { VersioningApi, RangeStrategy } from '../common'; +import { VersioningApi, NewValueConfig } from '../common'; function padZeroes(input: string): string { const sections = input.split('.'); @@ -65,12 +65,12 @@ const maxSatisfyingVersion = (versions: string[], range: string): string => const minSatisfyingVersion = (versions: string[], range: string): string => npm.minSatisfyingVersion(versions.map(composer2npm), composer2npm(range)); -function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { +function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { if (rangeStrategy === 'pin') { return toVersion; } @@ -84,12 +84,12 @@ function getNewValue( npm.isValid(currentValue) && composer2npm(currentValue) === currentValue ) { - newValue = npm.getNewValue( + newValue = npm.getNewValue({ currentValue, rangeStrategy, fromVersion, - padZeroes(toVersion) - ); + toVersion: padZeroes(toVersion), + }); } else if (currentValue.match(/^~(0\.[1-9][0-9]*)$/)) { // handle ~0.4 case first if (toMajor === 0) { @@ -113,12 +113,12 @@ function getNewValue( .split('||') .pop() .trim(); - const replacementValue = getNewValue( - lastValue, + const replacementValue = getNewValue({ + currentValue: lastValue, rangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); if (rangeStrategy === 'replace') { newValue = replacementValue; } else if (rangeStrategy === 'widen') { diff --git a/lib/versioning/hashicorp/index.ts b/lib/versioning/hashicorp/index.ts index f29b5ee4b0ac582f553d4768389aff78bf086aa7..faf9d3f47142bbb983e54556ab5cbcf36a395d72 100644 --- a/lib/versioning/hashicorp/index.ts +++ b/lib/versioning/hashicorp/index.ts @@ -1,5 +1,5 @@ import { api as npm } from '../npm'; -import { VersioningApi, RangeStrategy } from '../common'; +import { VersioningApi, NewValueConfig } from '../common'; function hashicorp2npm(input: string): string { // The only case incompatible with semver is a "short" ~>, e.g. ~> 1.2 @@ -21,12 +21,12 @@ const maxSatisfyingVersion = (versions: string[], range: string): string => const minSatisfyingVersion = (versions: string[], range: string): string => npm.minSatisfyingVersion(versions.map(hashicorp2npm), hashicorp2npm(range)); -function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { +function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { // handle specia. ~> 1.2 case if (currentValue.match(/(~>\s*)\d+\.\d+$/)) { return currentValue.replace( @@ -34,7 +34,12 @@ function getNewValue( `$1${npm.getMajor(toVersion)}.0` ); } - return npm.getNewValue(currentValue, rangeStrategy, fromVersion, toVersion); + return npm.getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, + }); } export const api: VersioningApi = { diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts index 4f7b9a20f921903a2e3ae370ec9b0fc66ac33313..fb595dd1daf41c54a20165949cd80a776c696f3a 100644 --- a/lib/versioning/hex/index.ts +++ b/lib/versioning/hex/index.ts @@ -1,5 +1,5 @@ import { api as npm } from '../npm'; -import { VersioningApi, RangeStrategy } from '../common'; +import { VersioningApi, NewValueConfig } from '../common'; function hex2npm(input: string): string { return input @@ -46,18 +46,18 @@ const maxSatisfyingVersion = (versions: string[], range: string): string => const minSatisfyingVersion = (versions: string[], range: string): string => npm.minSatisfyingVersion(versions.map(hex2npm), hex2npm(range)); -const getNewValue = ( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string => { - let newSemver = npm.getNewValue( - hex2npm(currentValue), +const getNewValue = ({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string => { + let newSemver = npm.getNewValue({ + currentValue: hex2npm(currentValue), rangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); newSemver = npm2hex(newSemver); if (currentValue.match(/~>\s*(\d+\.\d+)$/)) { newSemver = newSemver.replace( diff --git a/lib/versioning/loose/generic.ts b/lib/versioning/loose/generic.ts index ce5c09d199482c5b1a8ad353fcd2466b2e3de151..1e2641eb4da19b0214af1b43dd75d729685a6c05 100644 --- a/lib/versioning/loose/generic.ts +++ b/lib/versioning/loose/generic.ts @@ -1,4 +1,4 @@ -import { VersioningApi, RangeStrategy } from '../common'; +import { VersioningApi, NewValueConfig } from '../common'; export interface GenericVersion { release: number[]; @@ -80,12 +80,8 @@ export const comparer = ( function minSatisfyingVersion(versions: string[], range: string): string { return versions.find(v => equals(v, range)) || null; } - function getNewValue( - _currentValue: string, - _rangeStrategy: RangeStrategy, - _fromVersion: string, - toVersion: string - ): string { + function getNewValue(newValueConfig: NewValueConfig): string { + const { toVersion } = newValueConfig || {}; return toVersion; } function sortVersions(version: string, other: string): number { @@ -190,12 +186,8 @@ export abstract class GenericVersioningApi< } // eslint-disable-next-line class-methods-use-this - getNewValue( - _currentValue: string, - _rangeStrategy: RangeStrategy, - _fromVersion: string, - toVersion: string - ): string { + getNewValue(newValueConfig: NewValueConfig): string { + const { toVersion } = newValueConfig || {}; return toVersion; } diff --git a/lib/versioning/maven/index.ts b/lib/versioning/maven/index.ts index 9e4b8a88b1f0312803472efab06f0b66599061a3..c1636d7f7600d6a11d9c162ed677dcbca9b4b313 100644 --- a/lib/versioning/maven/index.ts +++ b/lib/versioning/maven/index.ts @@ -12,7 +12,7 @@ import { qualifierType, QualifierTypes, } from './compare'; -import { RangeStrategy, VersioningApi } from '../common'; +import { NewValueConfig, VersioningApi } from '../common'; const equals = (a: string, b: string): boolean => compare(a, b) === 0; @@ -114,12 +114,11 @@ const maxSatisfyingVersion = (versions: string[], range: string): string => { }, null); }; -function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - _fromVersion: string, - toVersion: string -): string | null { +function getNewValue({ + currentValue, + rangeStrategy, + toVersion, +}: NewValueConfig): string | null { if (isVersion(currentValue) || rangeStrategy === 'pin') { return toVersion; } diff --git a/lib/versioning/node/index.ts b/lib/versioning/node/index.ts index dcde501adc3a0648e29ee74cf670d33d291887ba..c7ac9e9a5212c46367202f19ea3a43b39cd75cd3 100644 --- a/lib/versioning/node/index.ts +++ b/lib/versioning/node/index.ts @@ -1,18 +1,18 @@ import npm, { isVersion, isValid } from '../npm'; -import { RangeStrategy, VersioningApi } from '../common'; +import { NewValueConfig, VersioningApi } from '../common'; -function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { - const res = npm.getNewValue( +function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { + const res = npm.getNewValue({ currentValue, rangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); if (isVersion(res)) { // normalize out any 'v' prefix return isVersion(res); diff --git a/lib/versioning/npm/range.ts b/lib/versioning/npm/range.ts index 56019cec7ee3d4f3310e8f3d4ace45789fc94175..94bfeb21eeb948d5c2e8440e0f753ebe96479b41 100644 --- a/lib/versioning/npm/range.ts +++ b/lib/versioning/npm/range.ts @@ -9,14 +9,14 @@ import { } from 'semver'; import { parseRange } from 'semver-utils'; import { logger } from '../../logger'; -import { RangeStrategy } from '../common'; +import { NewValueConfig } from '../common'; -export function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { +export function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { if (rangeStrategy === 'pin' || isVersion(currentValue)) { return toVersion; } @@ -24,17 +24,22 @@ export function getNewValue( if (satisfies(toVersion, currentValue)) { return currentValue; } - return getNewValue(currentValue, 'replace', fromVersion, toVersion); + return getNewValue({ + currentValue, + rangeStrategy: 'replace', + fromVersion, + toVersion, + }); } const parsedRange = parseRange(currentValue); const element = parsedRange[parsedRange.length - 1]; if (rangeStrategy === 'widen') { - const newValue = getNewValue( + const newValue = getNewValue({ currentValue, - 'replace', + rangeStrategy: 'replace', fromVersion, - toVersion - ); + toVersion, + }); if (element.operator && element.operator.startsWith('<')) { // TODO fix this const splitCurrent = currentValue.split(element.operator); @@ -63,7 +68,12 @@ export function getNewValue( if (rangeStrategy === 'bump') { if (parsedRange.length === 1) { if (!element.operator) { - return getNewValue(currentValue, 'replace', fromVersion, toVersion); + return getNewValue({ + currentValue, + rangeStrategy: 'replace', + fromVersion, + toVersion, + }); } if (element.operator === '^') { const split = currentValue.split('.'); diff --git a/lib/versioning/pep440/range.ts b/lib/versioning/pep440/range.ts index fafb81b38b99ebbf36d8b030f866bde200433ef0..c7145161143fc13c259ba74fd9b2d21adbc6912f 100644 --- a/lib/versioning/pep440/range.ts +++ b/lib/versioning/pep440/range.ts @@ -2,7 +2,7 @@ import { gte, lte, satisfies } from '@renovate/pep440'; import { parse as parseVersion } from '@renovate/pep440/lib/version'; import { parse as parseRange } from '@renovate/pep440/lib/specifier'; import { logger } from '../../logger'; -import { RangeStrategy } from '../common'; +import { NewValueConfig } from '../common'; function getFutureVersion( baseVersion: string, @@ -35,12 +35,12 @@ interface Range { version: string; } -export function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { +export function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { // easy pin if (rangeStrategy === 'pin') { return '==' + toVersion; @@ -67,7 +67,12 @@ export function getNewValue( rangeStrategy + '. Using "replace" instead.' ); - return getNewValue(currentValue, 'replace', fromVersion, toVersion); + return getNewValue({ + currentValue, + rangeStrategy: 'replace', + fromVersion, + toVersion, + }); } if (ranges.some(range => range.operator === '===')) { // the operator "===" is used for legacy non PEP440 versions diff --git a/lib/versioning/poetry/index.ts b/lib/versioning/poetry/index.ts index 49ec562ff31080d5897dd198e31b7a2a25cbe8f8..e6b77e9cddf17a3a5a2647c7f41355cc451f6c5f 100644 --- a/lib/versioning/poetry/index.ts +++ b/lib/versioning/poetry/index.ts @@ -1,7 +1,7 @@ import { parseRange } from 'semver-utils'; import { major, minor } from 'semver'; import { api as npm } from '../npm'; -import { RangeStrategy, VersioningApi } from '../common'; +import { NewValueConfig, VersioningApi } from '../common'; function notEmpty(s: string): boolean { return s !== ''; @@ -82,12 +82,12 @@ function handleShort( return null; } -function getNewValue( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string { +function getNewValue({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string { if (rangeStrategy === 'replace') { const npmCurrentValue = poetry2npm(currentValue); const parsedRange = parseRange(npmCurrentValue); @@ -107,12 +107,12 @@ function getNewValue( } } } - const newSemver = npm.getNewValue( - poetry2npm(currentValue), + const newSemver = npm.getNewValue({ + currentValue: poetry2npm(currentValue), rangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); const newPoetry = npm2poetry(newSemver); return newPoetry; } diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts index 0da4b089940c0da973c366e27e28b6b98b3cca14..0d4b4b3f89fdc0a7f63df6dade7bc107b6fc5922 100644 --- a/lib/versioning/ruby/index.ts +++ b/lib/versioning/ruby/index.ts @@ -6,7 +6,7 @@ import { maxSatisfying, minSatisfying, } from '@snyk/ruby-semver'; -import { VersioningApi, RangeStrategy } from '../common'; +import { VersioningApi, NewValueConfig } from '../common'; import { logger } from '../../logger'; import { parse as parseVersion } from './version'; import { parse as parseRange, ltr } from './range'; @@ -66,12 +66,12 @@ const maxSatisfyingVersion = (versions: string[], range: string): string => const minSatisfyingVersion = (versions: string[], range: string): string => minSatisfying(versions.map(vtrim), vtrim(range)); -const getNewValue = ( - currentValue: string, - rangeStrategy: RangeStrategy, - fromVersion: string, - toVersion: string -): string => { +const getNewValue = ({ + currentValue, + rangeStrategy, + fromVersion, + toVersion, +}: NewValueConfig): string => { let result = null; if (isVersion(currentValue)) { return currentValue.startsWith('v') ? 'v' + toVersion : toVersion; diff --git a/lib/versioning/semver/index.ts b/lib/versioning/semver/index.ts index 9b068e357867d0ea3bee3cd96a91f206b0930dc1..389d81b4e556ed5aaadb276e2933bdb735f08fc2 100644 --- a/lib/versioning/semver/index.ts +++ b/lib/versioning/semver/index.ts @@ -1,6 +1,6 @@ import semver from 'semver'; import stable from 'semver-stable'; -import { RangeStrategy, VersioningApi } from '../common'; +import { NewValueConfig, VersioningApi } from '../common'; const { is: isStable } = stable; @@ -23,12 +23,7 @@ export const isVersion = (input: string): string => valid(input); export { isVersion as isValid, maxSatisfyingVersion }; -function getNewValue( - _currentValue: string, - _rangeStrategy: RangeStrategy, - _fromVersion: string, - toVersion: string -): string { +function getNewValue({ toVersion }: NewValueConfig): string { return toVersion; } diff --git a/lib/versioning/swift/range.ts b/lib/versioning/swift/range.ts index 9bfaa6a4a2ec0f585fc199396d152622527ef7d8..7f15bf564f659e22943f93df1e15a8fdade7628b 100644 --- a/lib/versioning/swift/range.ts +++ b/lib/versioning/swift/range.ts @@ -1,5 +1,5 @@ import semver from 'semver'; -import { RangeStrategy } from '../common'; +import { NewValueConfig } from '../common'; const fromParam = /^\s*from\s*:\s*"([^"]+)"\s*$/; const fromRange = /^\s*"([^"]+)"\s*\.\.\.\s*$/; @@ -34,12 +34,7 @@ function toSemverRange(range: string): string { return null; } -function getNewValue( - currentValue: string, - _rangeStrategy: RangeStrategy, - _fromVersion: string, - toVersion: string -): string { +function getNewValue({ currentValue, toVersion }: NewValueConfig): string { if (fromParam.test(currentValue)) { return toVersion; } diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 0be041a64d7639f9f63c8c1ed25a9757271fd45e..de6c5d8ddeb26907ef22a1193d2363021d3a59a5 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -239,12 +239,12 @@ export async function lookupUpdates( res.updates.push({ updateType: 'pin', isPin: true, - newValue: version.getNewValue( + newValue: version.getNewValue({ currentValue, rangeStrategy, fromVersion, - fromVersion - ), + toVersion: fromVersion, + }), newMajor: version.getMajor(fromVersion), }); } @@ -271,12 +271,12 @@ export async function lookupUpdates( for (const toVersion of filteredVersions) { const update: LookupUpdate = { fromVersion, toVersion } as any; try { - update.newValue = version.getNewValue( + update.newValue = version.getNewValue({ currentValue, rangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); } catch (err) /* istanbul ignore next */ { logger.warn( { err, currentValue, rangeStrategy, fromVersion, toVersion }, diff --git a/lib/workers/repository/process/lookup/rollback.ts b/lib/workers/repository/process/lookup/rollback.ts index 0972187068f5f14fca4af7945ad51bc127266f6b..a16a480647374af26c72539ceb8592664524a123 100644 --- a/lib/workers/repository/process/lookup/rollback.ts +++ b/lib/workers/repository/process/lookup/rollback.ts @@ -49,13 +49,11 @@ export function getRollbackUpdate( logger.info('No toVersion to roll back to'); return null; } - let fromVersion: string; - const newValue = version.getNewValue( + const newValue = version.getNewValue({ currentValue, - 'replace', - fromVersion, - toVersion - ); + rangeStrategy: 'replace', + toVersion, + }); return { updateType: 'rollback', branchName: diff --git a/test/versioning/cargo.spec.ts b/test/versioning/cargo.spec.ts index a1a1524477da39c2d8df4bebc7c5e963a9fd405b..cb1ceb79dfa33c251ad54a116737eee1360f6978 100644 --- a/test/versioning/cargo.spec.ts +++ b/test/versioning/cargo.spec.ts @@ -104,107 +104,262 @@ describe('semver.isSingleVersion()', () => { }); describe('semver.getNewValue()', () => { it('bumps equals', () => { - expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue(' =1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: ' =1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('bumps equals space', () => { - expect(semver.getNewValue('= 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '= 1.1.0' - ); - expect(semver.getNewValue(' = 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue(' = 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue('= 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '= 1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '= 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('= 1.1.0'); + expect( + semver.getNewValue({ + currentValue: ' = 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: ' = 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: '= 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('= 1.1.0'); }); it('bumps version range', () => { - expect(semver.getNewValue('1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.0'); }); it('bumps short caret to same', () => { - expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual( - '^1.0' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7', + }) + ).toEqual('^1.0'); }); it('replaces with newer', () => { - expect(semver.getNewValue('^1.0.0', 'replace', '1.0.0', '2.0.7')).toEqual( - '^2.0.0' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.0.7', + }) + ).toEqual('^2.0.0'); }); it('replaces with version range', () => { - expect(semver.getNewValue('1.0.0', 'replace', '1.0.0', '2.0.7')).toEqual( - '2.0.0' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.0.7', + }) + ).toEqual('2.0.0'); }); it('updates naked caret', () => { - expect(semver.getNewValue('^1', 'bump', '1.0.0', '2.1.7')).toEqual('^2'); + expect( + semver.getNewValue({ + currentValue: '^1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '2.1.7', + }) + ).toEqual('^2'); }); it('bumps naked tilde', () => { - expect(semver.getNewValue('~1', 'bump', '1.0.0', '1.1.7')).toEqual('~1'); + expect( + semver.getNewValue({ + currentValue: '~1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('~1'); }); it('bumps naked major', () => { - expect(semver.getNewValue('5', 'bump', '5.0.0', '5.1.7')).toEqual('5'); - expect(semver.getNewValue('5', 'bump', '5.0.0', '6.1.7')).toEqual('6'); + expect( + semver.getNewValue({ + currentValue: '5', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.1.7', + }) + ).toEqual('5'); + expect( + semver.getNewValue({ + currentValue: '5', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6'); }); it('bumps naked minor', () => { - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.0.7')).toEqual('5.0'); - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.1.7')).toEqual('5.1'); - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '6.1.7')).toEqual('6.1'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.0.7', + }) + ).toEqual('5.0'); + + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.1.7', + }) + ).toEqual('5.1'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6.1'); }); it('replaces minor', () => { - expect(semver.getNewValue('5.0', 'replace', '5.0.0', '6.1.7')).toEqual( - '6.1' - ); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'replace', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6.1'); }); it('replaces equals', () => { - expect(semver.getNewValue('=1.0.0', 'replace', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('handles long asterisk', () => { - expect(semver.getNewValue('1.0.*', 'replace', '1.0.0', '1.1.0')).toEqual( - '1.1.*' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.*', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.*'); }); it('handles short asterisk', () => { - expect(semver.getNewValue('1.*', 'replace', '1.0.0', '2.1.0')).toEqual( - '2.*' - ); + expect( + semver.getNewValue({ + currentValue: '1.*', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.1.0', + }) + ).toEqual('2.*'); }); it('handles updating from stable to unstable', () => { expect( - semver.getNewValue('~0.6.1', 'replace', '0.6.8', '0.7.0-rc.2') + semver.getNewValue({ + currentValue: '~0.6.1', + rangeStrategy: 'replace', + fromVersion: '0.6.8', + toVersion: '0.7.0-rc.2', + }) ).toEqual('~0.7.0-rc'); }); it('handles less than version requirements', () => { - expect(semver.getNewValue('<1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '<1.5.1' - ); - expect(semver.getNewValue('< 1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '< 1.5.1' - ); - expect( - semver.getNewValue('< 1.3.4', 'replace', '1.2.3', '1.5.0') + expect( + semver.getNewValue({ + currentValue: '<1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('<1.5.1'); + expect( + semver.getNewValue({ + currentValue: '< 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('< 1.5.1'); + expect( + semver.getNewValue({ + currentValue: '< 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) ).toEqual('< 1.5.1'); }); it('handles less than equals version requirements', () => { - expect(semver.getNewValue('<=1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '<=1.5.0' - ); - expect(semver.getNewValue('<= 1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '<= 1.5.0' - ); - expect( - semver.getNewValue('<= 1.3.4', 'replace', '1.2.3', '1.5.0') + expect( + semver.getNewValue({ + currentValue: '<=1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('<=1.5.0'); + expect( + semver.getNewValue({ + currentValue: '<= 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('<= 1.5.0'); + expect( + semver.getNewValue({ + currentValue: '<= 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) ).toEqual('<= 1.5.0'); }); }); diff --git a/test/versioning/composer.spec.ts b/test/versioning/composer.spec.ts index 6cee2aebadc23300e05fbbb82e8a60bc60299cb9..a7c3a70c631b454515d7e0df619cf6068fbb9975 100644 --- a/test/versioning/composer.spec.ts +++ b/test/versioning/composer.spec.ts @@ -107,60 +107,143 @@ describe('semver.matches()', () => { }); describe('semver.getNewValue()', () => { it('returns pinned toVersion', () => { - expect(semver.getNewValue('~1.0', 'pin', '1.0', 'V1.1')).toEqual('V1.1'); + expect( + semver.getNewValue({ + currentValue: '~1.0', + rangeStrategy: 'pin', + fromVersion: '1.0', + toVersion: 'V1.1', + }) + ).toEqual('V1.1'); }); it('returns toVersion', () => { - expect(semver.getNewValue('v1.0', 'replace', '1.0', '1.1')).toEqual('v1.1'); + expect( + semver.getNewValue({ + currentValue: 'v1.0', + rangeStrategy: 'replace', + fromVersion: '1.0', + toVersion: '1.1', + }) + ).toEqual('v1.1'); }); it('bumps short caret to same', () => { - expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual( - '^1.0' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7', + }) + ).toEqual('^1.0'); }); it('handles tilde zero', () => { - expect(semver.getNewValue('~0.2', 'replace', '0.2.0', '0.3.0')).toEqual( - '~0.3' - ); - expect(semver.getNewValue('~0.2', 'replace', '0.2.0', '1.1.0')).toEqual( - '~1.0' - ); + expect( + semver.getNewValue({ + currentValue: '~0.2', + rangeStrategy: 'replace', + fromVersion: '0.2.0', + toVersion: '0.3.0', + }) + ).toEqual('~0.3'); + expect( + semver.getNewValue({ + currentValue: '~0.2', + rangeStrategy: 'replace', + fromVersion: '0.2.0', + toVersion: '1.1.0', + }) + ).toEqual('~1.0'); }); it('handles tilde major', () => { - expect(semver.getNewValue('~4', 'replace', '4.0.0', '4.2.0')).toEqual('~4'); - expect(semver.getNewValue('~4', 'replace', '4.0.0', '5.1.0')).toEqual('~5'); + expect( + semver.getNewValue({ + currentValue: '~4', + rangeStrategy: 'replace', + fromVersion: '4.0.0', + toVersion: '4.2.0', + }) + ).toEqual('~4'); + expect( + semver.getNewValue({ + currentValue: '~4', + rangeStrategy: 'replace', + fromVersion: '4.0.0', + toVersion: '5.1.0', + }) + ).toEqual('~5'); }); it('handles tilde minor', () => { - expect(semver.getNewValue('~4.0', 'replace', '4.0.0', '5.1.0')).toEqual( - '~5.0' - ); - expect(semver.getNewValue('~4.0', 'replace', '4.0.0', '4.1.0')).toEqual( - '~4.1' - ); - expect( - semver.getNewValue('~1.2 || ~2.0', 'replace', '2.0.0', '3.1.0') + expect( + semver.getNewValue({ + currentValue: '~4.0', + rangeStrategy: 'replace', + fromVersion: '4.0.0', + toVersion: '5.1.0', + }) + ).toEqual('~5.0'); + expect( + semver.getNewValue({ + currentValue: '~4.0', + rangeStrategy: 'replace', + fromVersion: '4.0.0', + toVersion: '4.1.0', + }) + ).toEqual('~4.1'); + expect( + semver.getNewValue({ + currentValue: '~1.2 || ~2.0', + rangeStrategy: 'replace', + fromVersion: '2.0.0', + toVersion: '3.1.0', + }) ).toEqual('~3.0'); expect( - semver.getNewValue('~1.2 || ~2.0', 'widen', '2.0.0', '3.1.0') + semver.getNewValue({ + currentValue: '~1.2 || ~2.0', + rangeStrategy: 'widen', + fromVersion: '2.0.0', + toVersion: '3.1.0', + }) ).toEqual('~1.2 || ~2.0 || ~3.0'); }); it('returns toVersion if unsupported', () => { - expect(semver.getNewValue('+4.0.0', 'replace', '4.0.0', '4.2.0')).toEqual( - '4.2.0' - ); + expect( + semver.getNewValue({ + currentValue: '+4.0.0', + rangeStrategy: 'replace', + fromVersion: '4.0.0', + toVersion: '4.2.0', + }) + ).toEqual('4.2.0'); }); it('returns versioned toVersion', () => { - expect(semver.getNewValue('v4.0.0', 'replace', '4.0.0', '4.2.0')).toEqual( - 'v4.2.0' - ); + expect( + semver.getNewValue({ + currentValue: 'v4.0.0', + rangeStrategy: 'replace', + fromVersion: '4.0.0', + toVersion: '4.2.0', + }) + ).toEqual('v4.2.0'); }); it('bumps short caret with v', () => { - expect(semver.getNewValue('^v1.0', 'bump', '1.0.0', '1.1.7')).toEqual( - '^v1.1' - ); + expect( + semver.getNewValue({ + currentValue: '^v1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('^v1.1'); }); it('handles differing lengths', () => { - expect(semver.getNewValue('3.6.*', 'replace', '3.6.0', '3.7')).toEqual( - '3.7.*' - ); + expect( + semver.getNewValue({ + currentValue: '3.6.*', + rangeStrategy: 'replace', + fromVersion: '3.6.0', + toVersion: '3.7', + }) + ).toEqual('3.7.*'); }); }); diff --git a/test/versioning/docker.spec.ts b/test/versioning/docker.spec.ts index c4a656e09db4b8630d2d2ecf8c11e7ea3e959d40..c7a51985dc86d13527324abebdd2c74a5126f481 100644 --- a/test/versioning/docker.spec.ts +++ b/test/versioning/docker.spec.ts @@ -118,7 +118,14 @@ describe('docker.', () => { }); describe('getNewValue(', () => { it('returns toVersion', () => { - expect(docker.getNewValue(null, null, null, '1.2.3')).toBe('1.2.3'); + expect( + docker.getNewValue({ + currentValue: null, + rangeStrategy: null, + fromVersion: null, + toVersion: '1.2.3', + }) + ).toBe('1.2.3'); }); }); }); diff --git a/test/versioning/hashicorp.spec.ts b/test/versioning/hashicorp.spec.ts index 72e6d50396abe4a3341bb5eb5d41ef808abab58e..a1260bfd6a03ad02465ab6ba5fda080d0f539c3d 100644 --- a/test/versioning/hashicorp.spec.ts +++ b/test/versioning/hashicorp.spec.ts @@ -51,16 +51,31 @@ describe('semver.minSatisfyingVersion()', () => { }); describe('semver.getNewValue()', () => { it('handles tilde greater than', () => { - expect(semver.getNewValue('~> 1.2', 'replace', '1.2.3', '2.0.7')).toEqual( - '~> 2.0' - ); - expect(semver.getNewValue('~> 1.2.0', 'replace', '1.2.3', '2.0.7')).toEqual( - '~> 2.0.0' - ); + expect( + semver.getNewValue({ + currentValue: '~> 1.2', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) + ).toEqual('~> 2.0'); + expect( + semver.getNewValue({ + currentValue: '~> 1.2.0', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) + ).toEqual('~> 2.0.0'); }); it('handles comma dividers', () => { expect( - semver.getNewValue('>= 1.0.0, <= 2.0.0', 'widen', '1.2.3', '2.0.7') + semver.getNewValue({ + currentValue: '>= 1.0.0, <= 2.0.0', + rangeStrategy: 'widen', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('>= 1.0.0, <= 2.0.7'); }); }); diff --git a/test/versioning/hex.spec.ts b/test/versioning/hex.spec.ts index 6a218de89fa7762b24adfb81000e7a97da1fea41..f8766c11af6109f8e4f72b96b25fed45993280c8 100644 --- a/test/versioning/hex.spec.ts +++ b/test/versioning/hex.spec.ts @@ -71,50 +71,105 @@ describe('lib/versioning/hex', () => { describe('hexScheme.getNewValue()', () => { it('handles tilde greater than', () => { expect( - hexScheme.getNewValue('~> 1.2', 'replace', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '~> 1.2', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('~> 2.0'); - expect(hexScheme.getNewValue('~> 1.2', 'pin', '1.2.3', '2.0.7')).toEqual( - '2.0.7' - ); - expect(hexScheme.getNewValue('~> 1.2', 'bump', '1.2.3', '2.0.7')).toEqual( - '~> 2' - ); expect( - hexScheme.getNewValue('~> 1.2.0', 'replace', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '~> 1.2', + rangeStrategy: 'pin', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) + ).toEqual('2.0.7'); + expect( + hexScheme.getNewValue({ + currentValue: '~> 1.2', + rangeStrategy: 'bump', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) + ).toEqual('~> 2'); + expect( + hexScheme.getNewValue({ + currentValue: '~> 1.2.0', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('~> 2.0.0'); expect( - hexScheme.getNewValue('~> 1.2.0', 'pin', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '~> 1.2.0', + rangeStrategy: 'pin', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('2.0.7'); expect( - hexScheme.getNewValue('~> 1.2.0', 'bump', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '~> 1.2.0', + rangeStrategy: 'bump', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('~> 2.0.7'); }); }); it('handles and', () => { expect( - hexScheme.getNewValue('>= 1.0.0 and <= 2.0.0', 'widen', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '>= 1.0.0 and <= 2.0.0', + rangeStrategy: 'widen', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('>= 1.0.0 and <= 2.0.7'); expect( - hexScheme.getNewValue( - '>= 1.0.0 and <= 2.0.0', - 'replace', - '1.2.3', - '2.0.7' - ) + hexScheme.getNewValue({ + currentValue: '>= 1.0.0 and <= 2.0.0', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('<= 2.0.7'); expect( - hexScheme.getNewValue('>= 1.0.0 and <= 2.0.0', 'pin', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '>= 1.0.0 and <= 2.0.0', + rangeStrategy: 'pin', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('2.0.7'); }); it('handles or', () => { expect( - hexScheme.getNewValue('>= 1.0.0 or <= 2.0.0', 'widen', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '>= 1.0.0 or <= 2.0.0', + rangeStrategy: 'widen', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('>= 1.0.0 or <= 2.0.7'); expect( - hexScheme.getNewValue('>= 1.0.0 or <= 2.0.0', 'replace', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '>= 1.0.0 or <= 2.0.0', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('<= 2.0.7'); expect( - hexScheme.getNewValue('>= 1.0.0 or <= 2.0.0', 'pin', '1.2.3', '2.0.7') + hexScheme.getNewValue({ + currentValue: '>= 1.0.0 or <= 2.0.0', + rangeStrategy: 'pin', + fromVersion: '1.2.3', + toVersion: '2.0.7', + }) ).toEqual('2.0.7'); }); }); diff --git a/test/versioning/maven.spec.ts b/test/versioning/maven.spec.ts index e40d3fc534425c4b7f5eb1dd465305ce8144b6e4..dfe6d49e58c43d7f3b45f176d2c3bd7a6d44373c 100644 --- a/test/versioning/maven.spec.ts +++ b/test/versioning/maven.spec.ts @@ -348,8 +348,22 @@ describe('versioning/maven/index', () => { it('api', () => { expect(maven.isGreaterThan('1.1', '1')).toBe(true); expect(maven.maxSatisfyingVersion(['1'], '1')).toBe('1'); - expect(maven.getNewValue('1', null, null, '1.1')).toBe('1.1'); - expect(maven.getNewValue('[1.2.3,]', null, null, '1.2.4')).toBe('[1.2.3,]'); + expect( + maven.getNewValue({ + currentValue: '1', + rangeStrategy: null, + fromVersion: null, + toVersion: '1.1', + }) + ).toBe('1.1'); + expect( + maven.getNewValue({ + currentValue: '[1.2.3,]', + rangeStrategy: null, + fromVersion: null, + toVersion: '1.2.4', + }) + ).toBe('[1.2.3,]'); }); it('pins maven ranges', () => { const sample = [ @@ -366,9 +380,14 @@ describe('versioning/maven/index', () => { ['[1.2.3,[', '1.2.3', '1.2.4'], ]; sample.forEach(([currentValue, fromVersion, toVersion]) => { - expect(getNewValue(currentValue, 'pin', fromVersion, toVersion)).toEqual( - toVersion - ); + expect( + getNewValue({ + currentValue, + rangeStrategy: 'pin', + fromVersion, + toVersion, + }) + ).toEqual(toVersion); }); }); }); diff --git a/test/versioning/node.spec.ts b/test/versioning/node.spec.ts index 22923ffa18017d8d3261524bb12987ad30a50f6e..fa84c6b48ba5938e28fd5f4625b3e4e77f24e07d 100644 --- a/test/versioning/node.spec.ts +++ b/test/versioning/node.spec.ts @@ -2,13 +2,23 @@ import { api as nodever } from '../../lib/versioning/node'; describe('semver.getNewValue()', () => { it('returns normalized toVersion', () => { - expect(nodever.getNewValue('1.0.0', 'replace', '1.0.0', 'v1.1.0')).toEqual( - '1.1.0' - ); + expect( + nodever.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: 'v1.1.0', + }) + ).toEqual('1.1.0'); }); it('returns range', () => { - expect(nodever.getNewValue('~8.0.0', 'replace', '8.0.2', 'v8.2.0')).toEqual( - '~8.2.0' - ); + expect( + nodever.getNewValue({ + currentValue: '~8.0.0', + rangeStrategy: 'replace', + fromVersion: '8.0.2', + toVersion: 'v8.2.0', + }) + ).toEqual('~8.2.0'); }); }); diff --git a/test/versioning/npm.spec.ts b/test/versioning/npm.spec.ts index 5df9076edeed0928bf3d0c19c713b16d486e4a23..3a2e3dada561ed1f7e7191a95194ceb73923a9f9 100644 --- a/test/versioning/npm.spec.ts +++ b/test/versioning/npm.spec.ts @@ -41,86 +41,205 @@ describe('semver.isSingleVersion()', () => { }); describe('semver.getNewValue()', () => { it('bumps equals', () => { - expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('bumps short caret to same', () => { - expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual( - '^1.0' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7', + }) + ).toEqual('^1.0'); }); it('bumps caret to prerelease', () => { expect( - semver.getNewValue('^1', 'bump', '1.0.0', '1.0.7-prerelease.1') + semver.getNewValue({ + currentValue: '^1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7-prerelease.1', + }) ).toEqual('^1.0.7-prerelease.1'); }); it('replaces with newer', () => { - expect(semver.getNewValue('^1.0.0', 'replace', '1.0.0', '1.0.7')).toEqual( - '^1.0.7' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.0.7', + }) + ).toEqual('^1.0.7'); }); it('supports tilde greater than', () => { - expect(semver.getNewValue('~> 1.0.0', 'replace', '1.0.0', '1.1.7')).toEqual( - '~> 1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '~> 1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('~> 1.1.0'); }); it('bumps short caret to new', () => { - expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.1.7')).toEqual( - '^1.1' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('^1.1'); }); it('bumps short tilde', () => { - expect(semver.getNewValue('~1.0', 'bump', '1.0.0', '1.1.7')).toEqual( - '~1.1' - ); + expect( + semver.getNewValue({ + currentValue: '~1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('~1.1'); }); it('bumps tilde to prerelease', () => { expect( - semver.getNewValue('~1.0', 'bump', '1.0.0', '1.0.7-prerelease.1') + semver.getNewValue({ + currentValue: '~1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7-prerelease.1', + }) ).toEqual('~1.0.7-prerelease.1'); }); it('updates naked caret', () => { - expect(semver.getNewValue('^1', 'bump', '1.0.0', '2.1.7')).toEqual('^2'); + expect( + semver.getNewValue({ + currentValue: '^1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '2.1.7', + }) + ).toEqual('^2'); }); it('bumps naked tilde', () => { - expect(semver.getNewValue('~1', 'bump', '1.0.0', '1.1.7')).toEqual('~1'); + expect( + semver.getNewValue({ + currentValue: '~1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('~1'); }); it('bumps naked major', () => { - expect(semver.getNewValue('5', 'bump', '5.0.0', '5.1.7')).toEqual('5'); - expect(semver.getNewValue('5', 'bump', '5.0.0', '6.1.7')).toEqual('6'); + expect( + semver.getNewValue({ + currentValue: '5', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.1.7', + }) + ).toEqual('5'); + expect( + semver.getNewValue({ + currentValue: '5', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6'); }); it('bumps naked minor', () => { - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.0.7')).toEqual('5.0'); - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.1.7')).toEqual('5.1'); - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '6.1.7')).toEqual('6.1'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.0.7', + }) + ).toEqual('5.0'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.1.7', + }) + ).toEqual('5.1'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6.1'); }); it('bumps greater or equals', () => { - expect(semver.getNewValue('>=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '>=1.1.0' - ); - expect(semver.getNewValue('>= 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '>= 1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '>=1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('>=1.1.0'); + expect( + semver.getNewValue({ + currentValue: '>= 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('>= 1.1.0'); }); it('replaces equals', () => { - expect(semver.getNewValue('=1.0.0', 'replace', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('handles long asterisk', () => { - expect(semver.getNewValue('1.0.*', 'replace', '1.0.0', '1.1.0')).toEqual( - '1.1.*' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.*', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.*'); }); it('handles short asterisk', () => { - expect(semver.getNewValue('1.*', 'replace', '1.0.0', '2.1.0')).toEqual( - '2.*' - ); + expect( + semver.getNewValue({ + currentValue: '1.*', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.1.0', + }) + ).toEqual('2.*'); }); it('handles updating from stable to unstable', () => { expect( - semver.getNewValue('~0.6.1', 'replace', '0.6.8', '0.7.0-rc.2') + semver.getNewValue({ + currentValue: '~0.6.1', + rangeStrategy: 'replace', + fromVersion: '0.6.8', + toVersion: '0.7.0-rc.2', + }) ).toEqual('~0.7.0-rc'); }); }); diff --git a/test/versioning/pep440.spec.ts b/test/versioning/pep440.spec.ts index dc43bedff3c7aaabe3470a44dad64fd64549e779..7bdddca228565f44cad4b69e311ab2c1aecd76e0 100644 --- a/test/versioning/pep440.spec.ts +++ b/test/versioning/pep440.spec.ts @@ -117,19 +117,34 @@ describe('pep440.getNewValue()', () => { // impossible ['!=1.2.3', null], ].forEach(([currentValue, expectedBump]) => { - const bumped = getNewValue(currentValue, 'bump', '1.0.0', '1.2.3'); + const bumped = getNewValue({ + currentValue, + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.2.3', + }); it(`bumps '${currentValue}' to '${expectedBump}'`, () => { expect(bumped).toBe(expectedBump); }); - const replaced = getNewValue(currentValue, 'replace', '1.0.0', '1.2.3'); + const replaced = getNewValue({ + currentValue, + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.2.3', + }); const needReplace = pep440.matches('1.2.3', currentValue); const expectedReplace = needReplace ? currentValue : bumped; it(`replaces '${currentValue}' to '${expectedReplace}'`, () => { expect(replaced).toBe(expectedReplace); }); - const pinned = getNewValue(currentValue, 'pin', '1.0.0', '1.2.3'); + const pinned = getNewValue({ + currentValue, + rangeStrategy: 'pin', + fromVersion: '1.0.0', + toVersion: '1.2.3', + }); const expectedPin = '==1.2.3'; it(`pins '${currentValue}' to '${expectedPin}'`, () => { expect(pinned).toBe(expectedPin); @@ -137,7 +152,12 @@ describe('pep440.getNewValue()', () => { }); it('guards against unsupported rangeStrategy', () => { - const invalid = getNewValue('==1.0.0', 'update-lockfile', '1.0.0', '1.2.3'); + const invalid = getNewValue({ + currentValue: '==1.0.0', + rangeStrategy: 'update-lockfile', + fromVersion: '1.0.0', + toVersion: '1.2.3', + }); expect(invalid).toEqual('==1.2.3'); }); }); diff --git a/test/versioning/poetry.spec.ts b/test/versioning/poetry.spec.ts index b0e792c79ae816a343cc9c4459424f8b09456d2e..32a2a0ac1ba09be95f589359a2bbfe2a9321e099 100644 --- a/test/versioning/poetry.spec.ts +++ b/test/versioning/poetry.spec.ts @@ -108,145 +108,353 @@ describe('semver.maxSatisfyingVersion()', () => { describe('semver.getNewValue()', () => { it('bumps exact', () => { - expect(semver.getNewValue('1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '1.1.0' - ); - expect(semver.getNewValue(' 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '1.1.0' - ); - expect(semver.getNewValue('1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.0'); + expect( + semver.getNewValue({ + currentValue: ' 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.0'); + expect( + semver.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.0'); }); it('bumps equals', () => { - expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue('= 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: '= 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('bumps equals space', () => { - expect(semver.getNewValue('= 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue(' = 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue(' = 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); - expect(semver.getNewValue('= 1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '= 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: ' = 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: ' = 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); + expect( + semver.getNewValue({ + currentValue: '= 1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('bumps short caret to same', () => { - expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual( - '^1.0' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7', + }) + ).toEqual('^1.0'); }); it('replaces caret with newer', () => { - expect(semver.getNewValue('^1.0.0', 'replace', '1.0.0', '2.0.7')).toEqual( - '^2.0.0' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.0.7', + }) + ).toEqual('^2.0.0'); }); it('replaces naked version', () => { - expect(semver.getNewValue('1.0.0', 'replace', '1.0.0', '2.0.7')).toEqual( - '2.0.7' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.0.7', + }) + ).toEqual('2.0.7'); }); it('replaces with version range', () => { - expect(semver.getNewValue('1.0.0', 'replace', '1.0.0', '^2.0.7')).toEqual( - '^2.0.7' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '^2.0.7', + }) + ).toEqual('^2.0.7'); }); it('bumps naked caret', () => { - expect(semver.getNewValue('^1', 'bump', '1.0.0', '2.1.7')).toEqual('^2'); + expect( + semver.getNewValue({ + currentValue: '^1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '2.1.7', + }) + ).toEqual('^2'); }); it('bumps naked tilde', () => { - expect(semver.getNewValue('~1', 'bump', '1.0.0', '1.1.7')).toEqual('~1'); + expect( + semver.getNewValue({ + currentValue: '~1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('~1'); }); it('bumps naked major', () => { - expect(semver.getNewValue('5', 'bump', '5.0.0', '5.1.7')).toEqual('5'); - expect(semver.getNewValue('5', 'bump', '5.0.0', '6.1.7')).toEqual('6'); + expect( + semver.getNewValue({ + currentValue: '5', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.1.7', + }) + ).toEqual('5'); + expect( + semver.getNewValue({ + currentValue: '5', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6'); }); it('bumps naked minor', () => { - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.0.7')).toEqual('5.0'); - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '5.1.7')).toEqual('5.1'); - expect(semver.getNewValue('5.0', 'bump', '5.0.0', '6.1.7')).toEqual('6.1'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.0.7', + }) + ).toEqual('5.0'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '5.1.7', + }) + ).toEqual('5.1'); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'bump', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6.1'); }); it('replaces minor', () => { - expect(semver.getNewValue('5.0', 'replace', '5.0.0', '6.1.7')).toEqual( - '6.1' - ); + expect( + semver.getNewValue({ + currentValue: '5.0', + rangeStrategy: 'replace', + fromVersion: '5.0.0', + toVersion: '6.1.7', + }) + ).toEqual('6.1'); }); it('replaces equals', () => { - expect(semver.getNewValue('=1.0.0', 'replace', '1.0.0', '1.1.0')).toEqual( - '=1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('=1.1.0'); }); it('bumps caret to prerelease', () => { expect( - semver.getNewValue('^1', 'bump', '1.0.0', '1.0.7-prerelease.1') + semver.getNewValue({ + currentValue: '^1', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.0.7-prerelease.1', + }) ).toEqual('^1.0.7-prerelease.1'); }); it('replaces with newer', () => { - expect(semver.getNewValue('^1.0.0', 'replace', '1.0.0', '1.0.7')).toEqual( - '^1.0.7' - ); + expect( + semver.getNewValue({ + currentValue: '^1.0.0', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.0.7', + }) + ).toEqual('^1.0.7'); }); it('bumps short tilde', () => { - expect(semver.getNewValue('~1.0', 'bump', '1.0.0', '1.1.7')).toEqual( - '~1.1' - ); + expect( + semver.getNewValue({ + currentValue: '~1.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.7', + }) + ).toEqual('~1.1'); }); it('handles long asterisk', () => { - expect(semver.getNewValue('1.0.*', 'replace', '1.0.0', '1.1.0')).toEqual( - '1.1.*' - ); + expect( + semver.getNewValue({ + currentValue: '1.0.*', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.*'); }); it('handles short asterisk', () => { - expect(semver.getNewValue('1.*', 'replace', '1.0.0', '2.1.0')).toEqual( - '2.*' - ); + expect( + semver.getNewValue({ + currentValue: '1.*', + rangeStrategy: 'replace', + fromVersion: '1.0.0', + toVersion: '2.1.0', + }) + ).toEqual('2.*'); }); it('handles updating from stable to unstable', () => { expect( - semver.getNewValue('~0.6.1', 'replace', '0.6.8', '0.7.0-rc.2') + semver.getNewValue({ + currentValue: '~0.6.1', + rangeStrategy: 'replace', + fromVersion: '0.6.8', + toVersion: '0.7.0-rc.2', + }) ).toEqual('~0.7.0-rc'); }); it('handles less than version requirements', () => { - expect(semver.getNewValue('<1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '<1.5.1' - ); - expect(semver.getNewValue('< 1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '< 1.5.1' - ); - expect( - semver.getNewValue('< 1.3.4', 'replace', '1.2.3', '1.5.0') + expect( + semver.getNewValue({ + currentValue: '<1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('<1.5.1'); + expect( + semver.getNewValue({ + currentValue: '< 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('< 1.5.1'); + expect( + semver.getNewValue({ + currentValue: '< 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) ).toEqual('< 1.5.1'); }); it('handles less than equals version requirements', () => { - expect(semver.getNewValue('<=1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '<=1.5.0' - ); - expect(semver.getNewValue('<= 1.3.4', 'replace', '1.2.3', '1.5.0')).toEqual( - '<= 1.5.0' - ); - expect( - semver.getNewValue('<= 1.3.4', 'replace', '1.2.3', '1.5.0') + expect( + semver.getNewValue({ + currentValue: '<=1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('<=1.5.0'); + expect( + semver.getNewValue({ + currentValue: '<= 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) + ).toEqual('<= 1.5.0'); + expect( + semver.getNewValue({ + currentValue: '<= 1.3.4', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '1.5.0', + }) ).toEqual('<= 1.5.0'); }); it('handles replacing short caret versions', () => { - expect(semver.getNewValue('^1.2', 'replace', '1.2.3', '2.0.0')).toEqual( - '^2.0' - ); - expect(semver.getNewValue('^1', 'replace', '1.2.3', '2.0.0')).toEqual('^2'); + expect( + semver.getNewValue({ + currentValue: '^1.2', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.0', + }) + ).toEqual('^2.0'); + expect( + semver.getNewValue({ + currentValue: '^1', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.0', + }) + ).toEqual('^2'); }); it('handles replacing short tilde versions', () => { - expect(semver.getNewValue('~1.2', 'replace', '1.2.3', '2.0.0')).toEqual( - '~2.0' - ); - expect(semver.getNewValue('~1', 'replace', '1.2.3', '2.0.0')).toEqual('~2'); + expect( + semver.getNewValue({ + currentValue: '~1.2', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.0', + }) + ).toEqual('~2.0'); + expect( + semver.getNewValue({ + currentValue: '~1', + rangeStrategy: 'replace', + fromVersion: '1.2.3', + toVersion: '2.0.0', + }) + ).toEqual('~2'); }); }); diff --git a/test/versioning/regex.spec.ts b/test/versioning/regex.spec.ts index c1bf66f8b6939439e45bb2f2f87470a2866e8794..ea519f63c93d88197c3bcea40b94523427864a7a 100644 --- a/test/versioning/regex.spec.ts +++ b/test/versioning/regex.spec.ts @@ -328,7 +328,14 @@ describe('regex', () => { describe('.getNewValue', () => { it('returns toVersion', () => { - expect(regex.getNewValue(null, null, null, '1.2.3')).toBe('1.2.3'); + expect( + regex.getNewValue({ + currentValue: null, + rangeStrategy: null, + fromVersion: null, + toVersion: '1.2.3', + }) + ).toBe('1.2.3'); }); }); diff --git a/test/versioning/ruby.spec.ts b/test/versioning/ruby.spec.ts index 1bc303b860c00191d3976296ced521c5310f44f0..7b2b86f401eac0a950c16b271caa90ffb0c9a9ea 100644 --- a/test/versioning/ruby.spec.ts +++ b/test/versioning/ruby.spec.ts @@ -1,4 +1,5 @@ import { api as semverRuby } from '../../lib/versioning/ruby'; +import { RangeStrategy } from '../../lib/versioning'; describe('semverRuby', () => { describe('.equals', () => { @@ -365,11 +366,18 @@ describe('semverRuby', () => { ['1.2.3', '<= 1.0.3', 'pin', '1.0.3', '1.2.3'], ['1.2.3', '~> 1.0.3', 'pin', '1.0.4', '1.2.3'], ['4.7.8', '~> 4.7, >= 4.7.4', 'pin', '4.7.5', '4.7.8'], - ].forEach(([expected, current, range, from, to]) => { - expect(semverRuby.getNewValue(current, range as any, from, to)).toEqual( - expected - ); - }); + ].forEach( + ([expected, currentValue, rangeStrategy, fromVersion, toVersion]) => { + expect( + semverRuby.getNewValue({ + currentValue, + rangeStrategy: rangeStrategy as RangeStrategy, + fromVersion, + toVersion, + }) + ).toEqual(expected); + } + ); }); it('returns correct version for bump strategy', () => { @@ -391,49 +399,83 @@ describe('semverRuby', () => { ['~> 1.2.0', '~> 1.0.3', 'bump', '1.0.3', '1.2.3'], ['~> 1.0.0', '~> 1.0.3', 'bump', '1.0.3', '1.0.4'], ['~> 4.7.0, >= 4.7.9', '~> 4.7, >= 4.7.4', 'bump', '4.7.5', '4.7.9'], - ].forEach(([expected, current, range, from, to]) => { - expect(semverRuby.getNewValue(current, range as any, from, to)).toEqual( - expected - ); + ].forEach(([expected, currentValue, rangeStrategy, from, toVersion]) => { + expect( + semverRuby.getNewValue({ + currentValue, + rangeStrategy: rangeStrategy as RangeStrategy, + toVersion, + }) + ).toEqual(expected); }); }); it('does not error', () => { expect( - semverRuby.getNewValue('>= 3.2, < 5.0', 'replace', '4.0.2', '6.0.1') + semverRuby.getNewValue({ + currentValue: '>= 3.2, < 5.0', + rangeStrategy: 'replace', + fromVersion: '4.0.2', + toVersion: '6.0.1', + }) ).toMatchSnapshot(); }); it('handles updates to bundler common complex ranges major', () => { expect( - semverRuby.getNewValue('~> 5.2, >= 5.2.5', 'replace', '5.3.0', '6.0.1') + semverRuby.getNewValue({ + currentValue: '~> 5.2, >= 5.2.5', + rangeStrategy: 'replace', + fromVersion: '5.3.0', + toVersion: '6.0.1', + }) ).toEqual('~> 6.0, >= 6.0.1'); }); it('handles updates to bundler common complex ranges minor', () => { expect( - semverRuby.getNewValue( - '~> 5.2.0, >= 5.2.5', - 'replace', - '5.2.5', - '5.3.1' - ) + semverRuby.getNewValue({ + currentValue: '~> 5.2.0, >= 5.2.5', + rangeStrategy: 'replace', + fromVersion: '5.2.5', + toVersion: '5.3.1', + }) ).toEqual('~> 5.3.0, >= 5.3.1'); }); it('handles change in precision', () => { expect( - semverRuby.getNewValue('4.2.0', 'replace', '4.2.0', '4.2.5.1') + semverRuby.getNewValue({ + currentValue: '4.2.0', + rangeStrategy: 'replace', + fromVersion: '4.2.0', + toVersion: '4.2.5.1', + }) ).toEqual('4.2.5.1'); expect( - semverRuby.getNewValue('4.2.5.1', 'replace', '4.2.5.1', '4.3.0') + semverRuby.getNewValue({ + currentValue: '4.2.5.1', + rangeStrategy: 'replace', + fromVersion: '4.2.5.1', + toVersion: '4.3.0', + }) ).toEqual('4.3.0'); }); it('handles major ranges', () => { expect( - semverRuby.getNewValue('~> 1', 'replace', '1.2.0', '2.0.3') + semverRuby.getNewValue({ + currentValue: '~> 1', + rangeStrategy: 'replace', + fromVersion: '1.2.0', + toVersion: '2.0.3', + }) ).toEqual('~> 2'); }); it('handles explicit equals', () => { expect( - semverRuby.getNewValue('= 5.2.2', 'replace', '5.2.2', '5.2.2.1') + semverRuby.getNewValue({ + currentValue: '= 5.2.2', + rangeStrategy: 'replace', + fromVersion: '5.2.2', + toVersion: '5.2.2.1', + }) ).toEqual('= 5.2.2.1'); }); @@ -463,11 +505,18 @@ describe('semverRuby', () => { '2.20.1', ], ['~> 6.0.0', '~> 5.2.0', 'replace', '5.2.4.1', '6.0.2.1'], - ].forEach(([expected, current, range, from, to]) => { - expect(semverRuby.getNewValue(current, range as any, from, to)).toEqual( - expected - ); - }); + ].forEach( + ([expected, currentValue, rangeStrategy, fromVersion, toVersion]) => { + expect( + semverRuby.getNewValue({ + currentValue, + rangeStrategy: rangeStrategy as RangeStrategy, + fromVersion, + toVersion, + }) + ).toEqual(expected); + } + ); }); }); }); diff --git a/test/versioning/semver.spec.ts b/test/versioning/semver.spec.ts index c6493f8fec55ca15a966f793f1b9fc0f2138bb92..a8fa56c5c7b1fcac654597afc233a443bd7765e0 100644 --- a/test/versioning/semver.spec.ts +++ b/test/versioning/semver.spec.ts @@ -41,8 +41,13 @@ describe('semver.isSingleVersion()', () => { }); describe('semver.getNewValue()', () => { it('uses toVersion', () => { - expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual( - '1.1.0' - ); + expect( + semver.getNewValue({ + currentValue: '=1.0.0', + rangeStrategy: 'bump', + fromVersion: '1.0.0', + toVersion: '1.1.0', + }) + ).toEqual('1.1.0'); }); }); diff --git a/test/versioning/swift.spec.ts b/test/versioning/swift.spec.ts index 4809bf32abd16d15c469dc620a38276bc961f616..79a59835f076f570c443c49975f6704d8d1f6ffb 100644 --- a/test/versioning/swift.spec.ts +++ b/test/versioning/swift.spec.ts @@ -1,4 +1,5 @@ import swift from '../../lib/versioning/swift'; +import { RangeStrategy } from '../../lib/versioning'; const { getNewValue, @@ -79,13 +80,13 @@ describe('getNewValue()', () => { ['"1.2.3"..<"1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..<"1.2.5"'], ['..."1.2.4"', 'auto', '1.2.3', '1.2.5', '..."1.2.5"'], ['..<"1.2.4"', 'auto', '1.2.3', '1.2.5', '..<"1.2.5"'], - ].forEach(([range, strategy, fromVersion, toVersion, result]) => { - const newValue = getNewValue( - range, - strategy as any, + ].forEach(([range, rangeStrategy, fromVersion, toVersion, result]) => { + const newValue = getNewValue({ + currentValue: range, + rangeStrategy: rangeStrategy as RangeStrategy, fromVersion, - toVersion - ); + toVersion, + }); expect(newValue).toEqual(result); }); });