mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Wip
Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
parent
077b2089b3
commit
289251cdec
137
src/main/utils/persisted-value/persisted-value.test.ts
Normal file
137
src/main/utils/persisted-value/persisted-value.test.ts
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
import { getInjectionToken, getInjectable } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token";
|
||||||
|
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
|
||||||
|
import getAbsolutePathInjectable from "../../../common/path/get-absolute-path.injectable";
|
||||||
|
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
|
import { pipeline } from "@ogre-tools/fp";
|
||||||
|
import { forEach, map } from "lodash/fp";
|
||||||
|
import { overrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes";
|
||||||
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
|
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
|
||||||
|
|
||||||
|
interface PersistedValue {
|
||||||
|
id: string;
|
||||||
|
get: () => string;
|
||||||
|
set: (arg: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const persistedValueInjectionToken = getInjectionToken<PersistedValue>({
|
||||||
|
id: "persisted-value",
|
||||||
|
});
|
||||||
|
|
||||||
|
const fetchInitialPersistedValuesInjectable = getInjectable({
|
||||||
|
id: "fetch-initial-persisted-values",
|
||||||
|
|
||||||
|
instantiate: (di) => {
|
||||||
|
const statesForPersistedValues = di.injectMany(
|
||||||
|
persistedValueInjectionToken,
|
||||||
|
);
|
||||||
|
|
||||||
|
const readJsonFile = di.inject(readJsonFileInjectable);
|
||||||
|
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
||||||
|
const directoryForUserData = di.inject(directoryForUserDataInjectable);
|
||||||
|
|
||||||
|
return {
|
||||||
|
run: async () => {
|
||||||
|
await pipeline(
|
||||||
|
statesForPersistedValues,
|
||||||
|
|
||||||
|
map(async (state) => ({
|
||||||
|
state,
|
||||||
|
|
||||||
|
persisted: await readJsonFile(
|
||||||
|
getAbsolutePath(
|
||||||
|
directoryForUserData,
|
||||||
|
"persisted-values",
|
||||||
|
`${state.id}.json`,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
})),
|
||||||
|
|
||||||
|
(x) => Promise.all(x),
|
||||||
|
|
||||||
|
forEach((x) => {
|
||||||
|
x.state.set(x.persisted.value);
|
||||||
|
console.log(x);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
injectionToken: onLoadOfApplicationInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("persisted-value", () => {
|
||||||
|
let di: DiContainer;
|
||||||
|
let somePersistedValue: PersistedValue;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
|
di.override(directoryForUserDataInjectable, () => "/some-directory");
|
||||||
|
|
||||||
|
overrideFsWithFakes(di);
|
||||||
|
|
||||||
|
di.register(
|
||||||
|
somePersistedValueInjectable,
|
||||||
|
fetchInitialPersistedValuesInjectable,
|
||||||
|
);
|
||||||
|
|
||||||
|
somePersistedValue = di.inject(somePersistedValueInjectable);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("given a persisted value exists, when initial persisted values are fetched", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
const writeJsonFile = di.inject(writeJsonFileInjectable);
|
||||||
|
|
||||||
|
await writeJsonFile("/some-directory/persisted-values/janne.json", {
|
||||||
|
value: {
|
||||||
|
someProperty: "some-existing-persisted-value",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const { run: fetchInitialPersistedValues } = di.inject(
|
||||||
|
fetchInitialPersistedValuesInjectable,
|
||||||
|
);
|
||||||
|
|
||||||
|
await fetchInitialPersistedValues();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("sets initial value for the persisted value", () => {
|
||||||
|
expect(somePersistedValue.get()).toEqual({
|
||||||
|
someProperty: "some-existing-persisted-value",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
interface SomeState {
|
||||||
|
someProperty: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const somePersistedValueInjectable = getInjectable({
|
||||||
|
id: "some-persisted-value",
|
||||||
|
|
||||||
|
instantiate: () => {
|
||||||
|
let state: SomeState;
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: "janne",
|
||||||
|
get: () => state,
|
||||||
|
|
||||||
|
set: (value: SomeState) => {
|
||||||
|
state = value;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
injectionToken: persistedValueInjectionToken,
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user