1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Refactoring extension-app compatibility checks (#5389)

This commit is contained in:
Roman 2022-05-13 23:14:37 +03:00 committed by GitHub
parent e0df7e9d20
commit 381d77c633
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,108 +9,61 @@ import {
} from "../extension-discovery/is-compatible-extension/is-compatible-extension"; } from "../extension-discovery/is-compatible-extension/is-compatible-extension";
import type { LensExtensionManifest } from "../lens-extension"; import type { LensExtensionManifest } from "../lens-extension";
describe("Extension/App versions compatibility check", () => { describe("Extension/App versions compatibility checks", () => {
it("is compatible with exact version matching", () => { it("is compatible with exact version matching", () => {
expect(isCompatibleExtension({ expect(isCompatible({ extLensEngineVersion: "5.5.0", appVersion: "5.5.0" })).toBeTruthy();
appSemVer: semver.coerce("5.5.0"),
})(getExtensionManifestMock({
lensEngine: "5.5.0",
}))).toBeTruthy();
}); });
it("is compatible with upper %PATCH versions of base app", () => { it("is compatible with upper %PATCH versions of base app", () => {
expect(isCompatibleExtension({ expect(isCompatible({ extLensEngineVersion: "5.5.0", appVersion: "5.5.5" })).toBeTruthy();
appSemVer: semver.coerce("5.5.5"),
})(getExtensionManifestMock({
lensEngine: "5.5.0",
}))).toBeTruthy();
}); });
it("is compatible with upper %MINOR version of base app", () => { it("is compatible with higher %MINOR version of base app", () => {
expect(isCompatibleExtension({ expect(isCompatible({ extLensEngineVersion: "5.5.0", appVersion: "5.6.0" })).toBeTruthy();
appSemVer: semver.coerce("5.6.0"),
})(getExtensionManifestMock({
lensEngine: "5.5.0",
}))).toBeTruthy();
expect(isCompatibleExtension({
appSemVer: semver.coerce("5.5.0-alpha.0"),
})(getExtensionManifestMock({
lensEngine: "^5.5.0",
}))).toBeTruthy();
expect(isCompatibleExtension({
appSemVer: semver.coerce("5.5"),
})(getExtensionManifestMock({
lensEngine: "^5.6.0",
}))).toBeFalsy();
}); });
it("is not compatible with upper %MAJOR version of base app", () => { it("is not compatible with higher %MAJOR version of base app", () => {
expect(isCompatibleExtension({ expect(isCompatible({ extLensEngineVersion: "5.6.0", appVersion: "6.0.0" })).toBeFalsy(); // extension for lens@5 not compatible with lens@6
appSemVer: semver.coerce("5.5.0"), // current lens-version expect(isCompatible({ extLensEngineVersion: "6.0.0", appVersion: "5.6.0" })).toBeFalsy();
})(getExtensionManifestMock({
lensEngine: "6.0.0",
}))).toBeFalsy(); // extension with lens@6.0 is not compatible with app@5.5
expect(isCompatibleExtension({
appSemVer: semver.coerce("6.0.0"), // current lens-version
})(getExtensionManifestMock({
lensEngine: "5.5.0",
}))).toBeFalsy(); // extension with lens@5.5 is not compatible with app@6.0
}); });
it("is compatible with lensEngine with prerelease", () => { it("is compatible with lensEngine with prerelease", () => {
expect(isCompatibleExtension({ expect(isCompatible({
appSemVer: semver.parse("5.5.0-alpha.0"), extLensEngineVersion: "^5.4.0-alpha.0",
})(getExtensionManifestMock({ appVersion: "5.5.0-alpha.0",
lensEngine: "^5.4.0-alpha.0", })).toBeTruthy();
}))).toBeTruthy();
}); });
describe("supported formats for manifest.engines.lens", () => { it("supports short version format for manifest.engines.lens", () => {
it("short version format for engines.lens", () => { expect(isCompatible({ extLensEngineVersion: "5.5", appVersion: "5.5.1" })).toBeTruthy();
expect(isCompatibleExtension({
appSemVer: semver.coerce("5.5.0"),
})(getExtensionManifestMock({
lensEngine: "5.5",
}))).toBeTruthy();
}); });
it("validates version and throws if incorrect format", () => { it("throws for incorrect or not supported version format", () => {
expect(() => isCompatibleExtension({ expect(() => isCompatible({
appSemVer: semver.coerce("1.0.0"), extLensEngineVersion: ">=2.0",
})(getExtensionManifestMock({ appVersion: "2.0",
lensEngine: "1.0", })).toThrow(/Invalid format/i);
}))).not.toThrow();
expect(() => isCompatibleExtension({ expect(() => isCompatible({
appSemVer: semver.coerce("1.0.0"), extLensEngineVersion: "~2.0",
})(getExtensionManifestMock({ appVersion: "2.0",
lensEngine: "^1.0", })).toThrow(/Invalid format/i);
}))).not.toThrow();
expect(() => isCompatibleExtension({ expect(() => isCompatible({
appSemVer: semver.coerce("1.0.0"), extLensEngineVersion: "*",
})(getExtensionManifestMock({ appVersion: "1.0",
lensEngine: ">=2.0", })).toThrow(/Invalid format/i);
}))).toThrow(/Invalid format/i);
});
it("'*' cannot be used for any version matching (at least in the prefix)", () => {
expect(() => isCompatibleExtension({
appSemVer: semver.coerce("1.0.0"),
})(getExtensionManifestMock({
lensEngine: "*",
}))).toThrowError(/Invalid format/i);
});
}); });
}); });
function getExtensionManifestMock( function isCompatible({ extLensEngineVersion = "^1.0", appVersion = "1.0" } = {}): boolean {
{ const appSemVer = semver.coerce(appVersion);
lensEngine = "1.0", const extensionManifestMock = getExtensionManifestMock(extLensEngineVersion);
} = {}): LensExtensionManifest {
return isCompatibleExtension({ appSemVer })(extensionManifestMock);
}
function getExtensionManifestMock(lensEngine = "1.0"): LensExtensionManifest {
return { return {
name: "some-extension", name: "some-extension",
version: "1.0", version: "1.0",