mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Actually fix tests for lens protocol router main
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
3664306ac7
commit
571a5e360f
@ -63,9 +63,9 @@ export function foldAttemptResults(mainAttempt: RouteAttempt, rendererAttempt: R
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
export interface LensProtocolRouterDependencies {
|
||||||
extensionLoader: ExtensionLoader;
|
readonly extensionLoader: ExtensionLoader;
|
||||||
extensionsStore: ExtensionsStore;
|
readonly extensionsStore: ExtensionsStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
export abstract class LensProtocolRouter {
|
export abstract class LensProtocolRouter {
|
||||||
@ -76,7 +76,7 @@ export abstract class LensProtocolRouter {
|
|||||||
|
|
||||||
static readonly ExtensionUrlSchema = `/:${EXTENSION_PUBLISHER_MATCH}(@[A-Za-z0-9_]+)?/:${EXTENSION_NAME_MATCH}`;
|
static readonly ExtensionUrlSchema = `/:${EXTENSION_PUBLISHER_MATCH}(@[A-Za-z0-9_]+)?/:${EXTENSION_NAME_MATCH}`;
|
||||||
|
|
||||||
constructor(protected dependencies: Dependencies) {}
|
constructor(protected readonly dependencies: LensProtocolRouterDependencies) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to route the given URL to all internal routes that have been registered
|
* Attempts to route the given URL to all internal routes that have been registered
|
||||||
|
|||||||
@ -17,6 +17,11 @@ export interface LensExtensionState {
|
|||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IsEnabledExtensionDescriptor {
|
||||||
|
id: string;
|
||||||
|
isBundled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
||||||
readonly displayName = "ExtensionsStore";
|
readonly displayName = "ExtensionsStore";
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -36,7 +41,7 @@ export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
|||||||
|
|
||||||
protected state = observable.map<LensExtensionId, LensExtensionState>();
|
protected state = observable.map<LensExtensionId, LensExtensionState>();
|
||||||
|
|
||||||
isEnabled({ id, isBundled }: { id: string; isBundled: boolean }): boolean {
|
isEnabled({ id, isBundled }: IsEnabledExtensionDescriptor): boolean {
|
||||||
// By default false, so that copied extensions are disabled by default.
|
// By default false, so that copied extensions are disabled by default.
|
||||||
// If user installs the extension from the UI, the Extensions component will specifically enable it.
|
// If user installs the extension from the UI, the Extensions component will specifically enable it.
|
||||||
return isBundled || Boolean(this.state.get(id)?.enabled);
|
return isBundled || Boolean(this.state.get(id)?.enabled);
|
||||||
|
|||||||
@ -6,11 +6,10 @@
|
|||||||
import * as uuid from "uuid";
|
import * as uuid from "uuid";
|
||||||
|
|
||||||
import { broadcastMessage } from "../../../common/ipc";
|
import { broadcastMessage } from "../../../common/ipc";
|
||||||
import { ProtocolHandlerExtension, ProtocolHandlerInternal } from "../../../common/protocol-handler";
|
import { ProtocolHandlerExtension, ProtocolHandlerInternal, ProtocolHandlerInvalid } from "../../../common/protocol-handler";
|
||||||
import { delay, noop } from "../../../common/utils";
|
import { delay, noop } from "../../../common/utils";
|
||||||
import { ExtensionsStore } from "../../../extensions/extensions-store/extensions-store";
|
import type { ExtensionsStore, IsEnabledExtensionDescriptor } from "../../../extensions/extensions-store/extensions-store";
|
||||||
import type { LensProtocolRouterMain } from "../lens-protocol-router-main/lens-protocol-router-main";
|
import type { LensProtocolRouterMain } from "../lens-protocol-router-main/lens-protocol-router-main";
|
||||||
import mockFs from "mock-fs";
|
|
||||||
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
import lensProtocolRouterMainInjectable from "../lens-protocol-router-main/lens-protocol-router-main.injectable";
|
import lensProtocolRouterMainInjectable from "../lens-protocol-router-main/lens-protocol-router-main.injectable";
|
||||||
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
||||||
@ -33,16 +32,16 @@ function throwIfDefined(val: any): void {
|
|||||||
describe("protocol router tests", () => {
|
describe("protocol router tests", () => {
|
||||||
let extensionInstances: ObservableMap<LensExtensionId, LensExtension>;
|
let extensionInstances: ObservableMap<LensExtensionId, LensExtension>;
|
||||||
let lpr: LensProtocolRouterMain;
|
let lpr: LensProtocolRouterMain;
|
||||||
let extensionsStore: ExtensionsStore;
|
let enabledExtensions: Set<string>;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
mockFs({
|
enabledExtensions = new Set();
|
||||||
"tmp": {},
|
|
||||||
});
|
|
||||||
|
|
||||||
di.override(extensionsStoreInjectable, () => ExtensionsStore.createInstance());
|
di.override(extensionsStoreInjectable, () => ({
|
||||||
|
isEnabled: ({ id, isBundled }: IsEnabledExtensionDescriptor) => isBundled || enabledExtensions.has(id),
|
||||||
|
} as unknown as ExtensionsStore));
|
||||||
|
|
||||||
di.permitSideEffects(getConfigurationFileModelInjectable);
|
di.permitSideEffects(getConfigurationFileModelInjectable);
|
||||||
di.permitSideEffects(appVersionInjectable);
|
di.permitSideEffects(appVersionInjectable);
|
||||||
@ -50,24 +49,19 @@ describe("protocol router tests", () => {
|
|||||||
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
|
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
|
||||||
|
|
||||||
extensionInstances = di.inject(extensionInstancesInjectable);
|
extensionInstances = di.inject(extensionInstancesInjectable);
|
||||||
extensionsStore = di.inject(extensionsStoreInjectable);
|
|
||||||
lpr = di.inject(lensProtocolRouterMainInjectable);
|
lpr = di.inject(lensProtocolRouterMainInjectable);
|
||||||
|
|
||||||
lpr.rendererLoaded = true;
|
lpr.rendererLoaded = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.clearAllMocks();
|
|
||||||
|
|
||||||
mockFs.restore();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should throw on non-lens URLS", async () => {
|
it("should throw on non-lens URLS", async () => {
|
||||||
expect(lpr.route("https://google.ca")).rejects.toBeDefined();
|
await lpr.route("https://google.ca");
|
||||||
|
expect(broadcastMessage).toBeCalledWith(ProtocolHandlerInvalid, "invalid protocol", "https://google.ca");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should throw when host not internal or extension", async () => {
|
it("should throw when host not internal or extension", async () => {
|
||||||
expect(lpr.route("lens://foobar")).rejects.toBeDefined();
|
await lpr.route("lens://foobar");
|
||||||
|
expect(broadcastMessage).toBeCalledWith(ProtocolHandlerInvalid, "invalid host", "lens://foobar");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should not throw when has valid host", async () => {
|
it("should not throw when has valid host", async () => {
|
||||||
@ -92,7 +86,7 @@ describe("protocol router tests", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
extensionInstances.set(extId, ext);
|
extensionInstances.set(extId, ext);
|
||||||
extensionsStore.mergeState([[extId, { enabled: true, name: "@mirantis/minikube" }]]);
|
enabledExtensions.add(extId);
|
||||||
|
|
||||||
lpr.addInternalHandler("/", noop);
|
lpr.addInternalHandler("/", noop);
|
||||||
|
|
||||||
@ -172,7 +166,7 @@ describe("protocol router tests", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
extensionInstances.set(extId, ext);
|
extensionInstances.set(extId, ext);
|
||||||
extensionsStore.mergeState([[extId, { enabled: true, name: "@foobar/icecream" }]]);
|
enabledExtensions.add(extId);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
expect(await lpr.route("lens://extension/@foobar/icecream/page/foob")).toBeUndefined();
|
expect(await lpr.route("lens://extension/@foobar/icecream/page/foob")).toBeUndefined();
|
||||||
@ -211,7 +205,7 @@ describe("protocol router tests", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
extensionInstances.set(extId, ext);
|
extensionInstances.set(extId, ext);
|
||||||
extensionsStore.mergeState([[extId, { enabled: true, name: "@foobar/icecream" }]]);
|
enabledExtensions.add(extId);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -237,13 +231,11 @@ describe("protocol router tests", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
extensionInstances.set(extId, ext);
|
extensionInstances.set(extId, ext);
|
||||||
extensionsStore.mergeState([[extId, { enabled: true, name: "icecream" }]]);
|
enabledExtensions.add(extId);
|
||||||
}
|
}
|
||||||
|
|
||||||
extensionsStore.mergeState([
|
enabledExtensions.add("@foobar/icecream");
|
||||||
["@foobar/icecream", { enabled: true, name: "@foobar/icecream" }],
|
enabledExtensions.add("icecream");
|
||||||
["icecream", { enabled: true, name: "icecream" }],
|
|
||||||
]);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
expect(await lpr.route("lens://extension/icecream/page")).toBeUndefined();
|
expect(await lpr.route("lens://extension/icecream/page")).toBeUndefined();
|
||||||
|
|||||||
@ -9,11 +9,9 @@ import URLParse from "url-parse";
|
|||||||
import type { LensExtension } from "../../../extensions/lens-extension";
|
import type { LensExtension } from "../../../extensions/lens-extension";
|
||||||
import { broadcastMessage } from "../../../common/ipc";
|
import { broadcastMessage } from "../../../common/ipc";
|
||||||
import { observable, when, makeObservable } from "mobx";
|
import { observable, when, makeObservable } from "mobx";
|
||||||
import type { RouteAttempt } from "../../../common/protocol-handler";
|
import type { LensProtocolRouterDependencies, RouteAttempt } from "../../../common/protocol-handler";
|
||||||
import { ProtocolHandlerInvalid } from "../../../common/protocol-handler";
|
import { ProtocolHandlerInvalid } from "../../../common/protocol-handler";
|
||||||
import { disposer, noop } from "../../../common/utils";
|
import { disposer, noop } from "../../../common/utils";
|
||||||
import type { ExtensionLoader } from "../../../extensions/extension-loader";
|
|
||||||
import type { ExtensionsStore } from "../../../extensions/extensions-store/extensions-store";
|
|
||||||
|
|
||||||
export interface FallbackHandler {
|
export interface FallbackHandler {
|
||||||
(name: string): Promise<boolean>;
|
(name: string): Promise<boolean>;
|
||||||
@ -36,9 +34,7 @@ function checkHost<Query>(url: URLParse<Query>): boolean {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
export interface LensProtocolRouterMainDependencies extends LensProtocolRouterDependencies {
|
||||||
extensionLoader: ExtensionLoader;
|
|
||||||
extensionsStore: ExtensionsStore;
|
|
||||||
showApplicationWindow: () => Promise<void>;
|
showApplicationWindow: () => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +46,7 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter {
|
|||||||
|
|
||||||
protected disposers = disposer();
|
protected disposers = disposer();
|
||||||
|
|
||||||
constructor(protected dependencies: Dependencies) {
|
constructor(protected readonly dependencies: LensProtocolRouterMainDependencies) {
|
||||||
super(dependencies);
|
super(dependencies);
|
||||||
|
|
||||||
makeObservable(this);
|
makeObservable(this);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user