Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding baseVersionForMinCompat for min compat version testing #20060

Merged
merged 6 commits into from
Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions packages/test/test-version-utils/src/baseVersion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ export const baseVersion = resolveVersion(
false,
);

/**
* Base version used for N min compat versions calculations. Decoupled from baseVersion or codeVersion to avoid
* running with issues while bumping a new version or releasing.
*
* @internal
*/
export const baseVersionForMinCompat = "2.0.0-rc.2.0.0";
/**
* The problem with just using the code version, is that the current version in the test is actually 0.0.0-xyz-test
* we want to tell the test to use 0.0.0-xyz-test as the current version. If we are asking for an N-1 version, that
Expand Down
9 changes: 7 additions & 2 deletions packages/test/test-version-utils/src/compatConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ import {
} from "../compatOptions.cjs";
import { ensurePackageInstalled } from "./testApi.js";
import { pkgVersion } from "./packageVersion.js";
import { baseVersion, codeVersion, testBaseVersion } from "./baseVersion.js";
import {
baseVersion,
baseVersionForMinCompat,
codeVersion,
testBaseVersion,
} from "./baseVersion.js";
import { getRequestedVersion } from "./versionUtils.js";

/**
Expand Down Expand Up @@ -252,7 +257,7 @@ export function isCompatVersionBelowMinVersion(minVersion: string, config: Compa
? (config.loadVersion as string)
: config.compatVersion;
}
const compatVersion = getRequestedVersion(testBaseVersion(lowerVersion), lowerVersion);
const compatVersion = getRequestedVersion(baseVersionForMinCompat, lowerVersion);
const minReqVersion = getRequestedVersion(testBaseVersion(minVersion), minVersion);
return semver.compare(compatVersion, minReqVersion) < 0;
}
Expand Down
75 changes: 39 additions & 36 deletions packages/test/test-version-utils/src/test/minCompatVersion.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,15 @@
import { strict as assert } from "assert";
import { CompatKind } from "../../compatOptions.cjs";
import { isCompatVersionBelowMinVersion } from "../compatConfig.js";
import { pkgVersion } from "../packageVersion.js";
import { getRequestedVersion } from "../versionUtils.js";
import { testBaseVersion } from "../baseVersion.js";

function transformVersion(version: string): string {
const regex = /(\d+)\.(\d+)\.(\d+)-dev-(\w+)\.(\d+)\.(\d+)\.(\d+)\.\d+/;
const matches = version.match(regex);

if (matches) {
const [, major, minor, patch, label, num1, num2, num3] = matches;
return `${major}.${minor}.${patch}-${label}.${num1}.${num2}.${num3}`;
} else {
return version;
}
}
import { baseVersionForMinCompat } from "../baseVersion.js";

describe("Minimum Compat Version", () => {
const minTestVersion = transformVersion(pkgVersion);
const numCompatVersions = 9;
const oldVersion = "1.3.7";
// for cross compat unit testing
const greaterVersion = "2.0.0-rc.1.0.0";
const lowerVersion = "1.3.7";

it("bad min compat string", () => {
const invalidString = "invalid string";
assert.throws(
Expand All @@ -45,67 +35,80 @@ describe("Minimum Compat Version", () => {
);
});

// Making sure all previous versions get filtered.
for (let i = 1; i < numCompatVersions; i++) {
it(`compatVersion N-${i} < ${minTestVersion}`, () => {
it(`compatVersion N-${i} < ${baseVersionForMinCompat}`, () => {
assert.strictEqual(
isCompatVersionBelowMinVersion(minTestVersion, {
isCompatVersionBelowMinVersion(baseVersionForMinCompat, {
name: `test`,
kind: CompatKind.None,
compatVersion: -i,
}),
true,
`N-${i} version: "${getRequestedVersion(
testBaseVersion(-i),
-i,
)}" is not lower than min version: ${minTestVersion}`,
`N-${i} version is not lower than min version: ${baseVersionForMinCompat}`,
);
});
}

// Making sure compatConfigs with old min compat don't get filtered.
for (let i = 1; i < numCompatVersions; i++) {
it(`compatVersion N-${i} > ${oldVersion}`, () => {
assert.strictEqual(
isCompatVersionBelowMinVersion(oldVersion, {
name: `test`,
kind: CompatKind.None,
compatVersion: -i,
}),
false,
`N-${i} version: is lower than min version: ${oldVersion}`,
);
});
}

it("cross compat. filters out if loadVersion is lower than minVersion", () => {
assert.strictEqual(
isCompatVersionBelowMinVersion(minTestVersion, {
isCompatVersionBelowMinVersion(greaterVersion, {
name: "test",
kind: CompatKind.CrossVersion,
compatVersion: minTestVersion,
loadVersion: "1.3.7",
compatVersion: greaterVersion,
loadVersion: lowerVersion,
}),
true,
);
});

it("cross compat. filters out if compatVersion is lower than minVersion", () => {
assert.strictEqual(
isCompatVersionBelowMinVersion(minTestVersion, {
isCompatVersionBelowMinVersion(greaterVersion, {
name: "test",
kind: CompatKind.CrossVersion,
compatVersion: "1.3.7",
loadVersion: minTestVersion,
compatVersion: lowerVersion,
loadVersion: greaterVersion,
}),
true,
);
});

it("cross compat. does not filter out valid versions", () => {
assert.strictEqual(
isCompatVersionBelowMinVersion("1.3.7", {
isCompatVersionBelowMinVersion(lowerVersion, {
name: "test",
kind: CompatKind.CrossVersion,
compatVersion: minTestVersion,
loadVersion: "1.3.7",
compatVersion: greaterVersion,
loadVersion: lowerVersion,
}),
false,
`fails with minVersion: 1.3.7 compatversion: ${minTestVersion} loadVersion: 1.3.7`,
`fails with minVersion: ${lowerVersion} compatversion: ${greaterVersion} loadVersion: ${lowerVersion}`,
);
assert.strictEqual(
isCompatVersionBelowMinVersion("1.3.7", {
isCompatVersionBelowMinVersion(lowerVersion, {
name: "test",
kind: CompatKind.CrossVersion,
compatVersion: "1.3.7",
loadVersion: minTestVersion,
compatVersion: lowerVersion,
loadVersion: greaterVersion,
}),
false,
`fails with minVersion: 1.3.7 compatversion: 1.3.7 loadVersion: ${minTestVersion}`,
`fails with minVersion: ${lowerVersion} compatversion: ${lowerVersion} loadVersion: ${greaterVersion}`,
);
});
});
Loading