98 lines
2.9 KiB
TypeScript
98 lines
2.9 KiB
TypeScript
import "jasmine";
|
|
import { MapStore } from "../../../src/Stores/Utils/MapStore";
|
|
import type { Readable, Writable } from "svelte/store";
|
|
import { get, writable } from "svelte/store";
|
|
|
|
describe("Main store", () => {
|
|
it("Set / delete / clear triggers main store updates", () => {
|
|
const mapStore = new MapStore<string, string>();
|
|
|
|
let triggered = false;
|
|
|
|
mapStore.subscribe((map) => {
|
|
triggered = true;
|
|
expect(map).toBe(mapStore);
|
|
});
|
|
|
|
expect(triggered).toBeTrue();
|
|
triggered = false;
|
|
mapStore.set("foo", "bar");
|
|
expect(triggered).toBeTrue();
|
|
|
|
triggered = false;
|
|
mapStore.delete("baz");
|
|
expect(triggered).toBe(false);
|
|
mapStore.delete("foo");
|
|
expect(triggered).toBe(true);
|
|
|
|
triggered = false;
|
|
mapStore.clear();
|
|
expect(triggered).toBe(true);
|
|
});
|
|
|
|
it("generates stores for keys with getStore", () => {
|
|
const mapStore = new MapStore<string, string>();
|
|
|
|
let valueReceivedInStoreForFoo: string | undefined;
|
|
let valueReceivedInStoreForBar: string | undefined;
|
|
|
|
mapStore.set("foo", "someValue");
|
|
|
|
mapStore.getStore("foo").subscribe((value) => {
|
|
valueReceivedInStoreForFoo = value;
|
|
});
|
|
const unsubscribeBar = mapStore.getStore("bar").subscribe((value) => {
|
|
valueReceivedInStoreForBar = value;
|
|
});
|
|
|
|
expect(valueReceivedInStoreForFoo).toBe("someValue");
|
|
expect(valueReceivedInStoreForBar).toBe(undefined);
|
|
mapStore.set("foo", "someOtherValue");
|
|
expect(valueReceivedInStoreForFoo).toBe("someOtherValue");
|
|
mapStore.delete("foo");
|
|
expect(valueReceivedInStoreForFoo).toBe(undefined);
|
|
mapStore.set("bar", "baz");
|
|
expect(valueReceivedInStoreForBar).toBe("baz");
|
|
mapStore.clear();
|
|
expect(valueReceivedInStoreForBar).toBe(undefined);
|
|
unsubscribeBar();
|
|
mapStore.set("bar", "fiz");
|
|
expect(valueReceivedInStoreForBar).toBe(undefined);
|
|
});
|
|
|
|
it("generates stores with getStoreByAccessor", () => {
|
|
const mapStore = new MapStore<
|
|
string,
|
|
{
|
|
foo: string;
|
|
store: Writable<string>;
|
|
}
|
|
>();
|
|
|
|
const fooStore = mapStore.getNestedStore("foo", (value) => {
|
|
return value.store;
|
|
});
|
|
|
|
mapStore.set("foo", {
|
|
foo: "bar",
|
|
store: writable("init"),
|
|
});
|
|
|
|
expect(get(fooStore)).toBe("init");
|
|
|
|
mapStore.get("foo")?.store.set("newVal");
|
|
|
|
expect(get(fooStore)).toBe("newVal");
|
|
|
|
mapStore.set("foo", {
|
|
foo: "bar",
|
|
store: writable("anotherVal"),
|
|
});
|
|
|
|
expect(get(fooStore)).toBe("anotherVal");
|
|
|
|
mapStore.delete("foo");
|
|
|
|
expect(get(fooStore)).toBeUndefined();
|
|
});
|
|
});
|