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(); 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(); 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 }>(); 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(); }); });