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

Add migration to new type of key

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
Juho Heikka 2023-02-21 09:25:14 +02:00
parent 169bb1b8f6
commit 8d9d710463
2 changed files with 49 additions and 28 deletions

View File

@ -6,7 +6,7 @@
import type { ObservableMap } from "mobx";
import { getInjectable } from "@ogre-tools/injectable";
import { getOrInsertWithAsync } from "../../../common/utils";
import { getOrInsert } from "../../../common/utils";
import randomBytesInjectable from "../../../common/utils/random-bytes.injectable";
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable";
@ -35,14 +35,16 @@ const ensureHashedDirectoryForExtensionInjectable = getInjectable({
const hashedDirectoryForLegacyDirPath = registeredExtensions.get(legacyDirPath);
if (hashedDirectoryForLegacyDirPath) {
registeredExtensions.set(extensionName, hashedDirectoryForLegacyDirPath);
registeredExtensions.delete(legacyDirPath);
dirPath = hashedDirectoryForLegacyDirPath;
} else {
dirPath = await getOrInsertWithAsync(registeredExtensions, extensionName, async () => {
const salt = (await randomBytes(32)).toString("hex");
const hashedName = getHash(`${extensionName}/${salt}`);
const salt = randomBytes(32).toString("hex");
const hashedName = getHash(`${extensionName}/${salt}`);
return joinPaths(directoryForExtensionData, hashedName);
});
const hashedExtensionDirectory = joinPaths(directoryForExtensionData, hashedName);
dirPath = getOrInsert(registeredExtensions, extensionName, hashedExtensionDirectory);
}
await ensureDirectory(dirPath);

View File

@ -51,32 +51,51 @@ describe("ensure-hashed-directory-for-extension", () => {
registeredExtensions,
);
expect(actual).not.toBe("some-directory");
expect(actual).toBe("some-directory-for-extension-data/12a427eae86fd78610c0404c3c1ef42cb28d8af1605552ed7cf30beaee21e876");
});
it("given extension directory was saved based on extension's package.json path, returns existing directory", async () => {
runInAction(() => {
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
});
const actual = await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(actual).toBe("some-directory");
});
it("given extension directory was saved based on extension's package.json path, ensure dir is called with right parameter", async () => {
runInAction(() => {
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
describe("given extension directory was saved based on extension's package.json path", () => {
beforeEach(() => {
runInAction(() => {
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
});
ensureDirMock.mockClear();
});
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
it("returns existing directory", async () => {
const actual = await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(ensureDirMock).toHaveBeenCalledWith("some-directory");
expect(actual).toBe("some-directory");
});
it("ensure dir is called with some directory", async () => {
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(ensureDirMock).toHaveBeenCalledWith("some-directory");
});
it("is migrated to use the extension name as key", async () => {
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(registeredExtensions.get("some-extension-name")).toEqual("some-directory");
});
it("old key is removed", async () => {
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(registeredExtensions.has("/some-directory-for-user-data/node_modules/some-extension-name/package.json")).toEqual(false);
});
});
});