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

Get tests to pass

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-07-07 15:29:51 -04:00
parent 70a9a2476d
commit 8e2c535bd3
7 changed files with 32 additions and 15 deletions

View File

@ -35,6 +35,7 @@ import writeFileInjectable from "../fs/write-file.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable from "../get-configuration-file-model/app-version/app-version.injectable";
import fsInjectable from "../fs/fs.injectable";
console = new Console(stdout, stderr);
@ -49,8 +50,9 @@ describe("user store tests", () => {
di.override(writeFileInjectable, () => () => Promise.resolve());
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
di.permitSideEffects(getConfigurationFileModelInjectable);
di.permitSideEffects(getConfigurationFileModelInjectable);
di.permitSideEffects(fsInjectable);
di.permitSideEffects(appVersionInjectable);
di.permitSideEffects(userStoreInjectable);

View File

@ -18,11 +18,12 @@ import type { DiContainer } from "@ogre-tools/injectable";
import { parse } from "url";
import loggerInjectable from "../../common/logger.injectable";
import type { Logger } from "../../common/logger";
import assert from "assert";
import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import normalizedPlatformInjectable from "../../common/vars/normalized-platform.injectable";
import kubectlBinaryNameInjectable from "../kubectl/binary-name.injectable";
import kubectlDownloadingNormalizedArchInjectable from "../kubectl/normalized-arch.injectable";
import readFileInjectable from "../../common/fs/read-file.injectable";
import fsInjectable from "../../common/fs/fs.injectable";
console = new Console(process.stdout, process.stderr); // fix mockFS
@ -30,7 +31,7 @@ const clusterServerUrl = "https://192.168.64.3:8443";
describe("kubeconfig manager tests", () => {
let clusterFake: Cluster;
let createKubeconfigManager: (cluster: Cluster) => KubeconfigManager | undefined;
let createKubeconfigManager: (cluster: Cluster) => KubeconfigManager;
let di: DiContainer;
let loggerMock: jest.Mocked<Logger>;
@ -43,6 +44,9 @@ describe("kubeconfig manager tests", () => {
di.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
di.override(normalizedPlatformInjectable, () => "darwin");
di.unoverride(readFileInjectable);
di.permitSideEffects(fsInjectable);
loggerMock = {
warn: jest.fn(),
debug: jest.fn(),
@ -110,11 +114,17 @@ describe("kubeconfig manager tests", () => {
it("should create 'temp' kube config with proxy", async () => {
const kubeConfManager = createKubeconfigManager(clusterFake);
let kubeConfigPath: string;
assert(kubeConfManager, "should actually create one");
try {
kubeConfigPath = await kubeConfManager.getPath();
} catch (error) {
console.error(error);
fail(error);
}
expect(loggerMock.error).not.toBeCalled();
expect(await kubeConfManager.getPath()).toBe(`some-directory-for-temp${path.sep}kubeconfig-foo`);
expect(kubeConfigPath).toBe(`some-directory-for-temp${path.sep}kubeconfig-foo`);
// this causes an intermittent "ENXIO: no such device or address, read" error
// const file = await fse.readFile(await kubeConfManager.getPath());
const file = fse.readFileSync(await kubeConfManager.getPath());
@ -127,9 +137,6 @@ describe("kubeconfig manager tests", () => {
it("should remove 'temp' kube config on unlink and remove reference from inside class", async () => {
const kubeConfManager = createKubeconfigManager(clusterFake);
assert(kubeConfManager, "should actually create one");
const configPath = await kubeConfManager.getPath();
expect(await fse.pathExists(configPath)).toBe(true);

View File

@ -15,6 +15,7 @@ import listNamespacesInjectable from "../../common/cluster/list-namespaces.injec
import loggerInjectable from "../../common/logger.injectable";
import detectorRegistryInjectable from "../cluster-detectors/detector-registry.injectable";
import createVersionDetectorInjectable from "../cluster-detectors/create-version-detector.injectable";
import readFileInjectable from "../../common/fs/read-file.injectable";
const createClusterInjectable = getInjectable({
id: "create-cluster",
@ -30,6 +31,7 @@ const createClusterInjectable = getInjectable({
logger: di.inject(loggerInjectable),
detectorRegistry: di.inject(detectorRegistryInjectable),
createVersionDetector: di.inject(createVersionDetectorInjectable),
readFile: di.inject(readFileInjectable),
};
return (model, configData) => new Cluster(dependencies, model, configData);

View File

@ -16,7 +16,7 @@ import type { Logger } from "../../common/logger";
export interface KubeconfigManagerDependencies {
readonly directoryForTemp: string;
readonly logger: Logger;
lensProxyPort: { get: () => number };
readonly lensProxyPort: { get: () => number };
}
export class KubeconfigManager {
@ -78,7 +78,7 @@ export class KubeconfigManager {
return this.tempFilePath = await this.createProxyKubeconfig();
} catch (error) {
throw Object.assign(new Error("Failed to creat temp config for auth-proxy"), { cause: error });
throw new Error("Failed to creat temp config for auth-proxy", { cause: error as Error });
}
}

View File

@ -8,6 +8,7 @@
import joinMigrationsInjectable from "../join.injectable";
import { getInjectable } from "@ogre-tools/injectable";
import { clusterStoreMigrationDeclarationInjectionToken } from "./migration";
import { clusterStoreMigrationsInjectionToken } from "../../../common/cluster-store/migrations";
const clusterStoreMigrationsInjectable = getInjectable({
id: "cluster-store-migrations",
@ -17,6 +18,7 @@ const clusterStoreMigrationsInjectable = getInjectable({
return joinMigrations(migrationDeclarations);
},
injectionToken: clusterStoreMigrationsInjectionToken,
});
export default clusterStoreMigrationsInjectable;

View File

@ -8,7 +8,7 @@ import path from "path";
import os from "os";
import type { ClusterStoreModel } from "../../../common/cluster-store/cluster-store";
import type { KubeconfigSyncEntry } from "../../../common/user-store";
import { hasTypedProperty, isErrnoException, isLogicalChildPath } from "../../../common/utils";
import { hasOptionalTypedProperty, isErrnoException, isLogicalChildPath } from "../../../common/utils";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import { getInjectable } from "@ogre-tools/injectable";
@ -39,17 +39,20 @@ const userStoreV503Beta1MigrationInjectable = getInjectable({
return;
}
if (!hasTypedProperty(preferences, "syncKubeconfigEntries", Array.isArray)) {
if (!hasOptionalTypedProperty(preferences, "syncKubeconfigEntries", Array.isArray)) {
delete (preferences as any).syncKubeconfigEntries;
store.set("preferences", preferences);
return;
}
const { syncKubeconfigEntries } = preferences;
const { syncKubeconfigEntries = [] } = preferences;
const { clusters = [] }: ClusterStoreModel = JSON.parse(readFileSync(joinPaths(userDataPath, "lens-cluster-store.json"))) ?? {};
const extensionDataDir = joinPaths(userDataPath, "extension_data");
const syncPaths = new Set(syncKubeconfigEntries.map(s => s.filePath));
syncPaths.add(path.join(os.homedir(), ".kube"));
syncPaths.add(joinPaths(os.homedir(), ".kube"));
for (const cluster of clusters) {
if (!cluster.kubeConfigPath) {

View File

@ -26,6 +26,7 @@ const createClusterInjectable = getInjectable({
createListNamespaces: () => { throw new Error("Tried to access back-end feature in front-end."); },
detectorRegistry: undefined as never,
createVersionDetector: () => { throw new Error("Tried to access back-end feature in front-end."); },
readFile: () => { throw new Error("Tried to access back-end feature in front-end."); },
};
return (model, configData) => new Cluster(dependencies, model, configData);