90 lines
2.3 KiB
TypeScript
90 lines
2.3 KiB
TypeScript
// deno-lint-ignore-file no-explicit-any
|
|
import { BearMetalStore } from "./store.ts";
|
|
import { assertEquals } from "@std/assert";
|
|
import {
|
|
assertSpyCall,
|
|
assertSpyCallArgs,
|
|
spy,
|
|
type SpyLike,
|
|
} from "@std/testing/mock";
|
|
import { beforeAll } from "@std/testing/bdd";
|
|
|
|
beforeAll(() => {
|
|
let store = "{}";
|
|
Deno.readTextFileSync = spy(() => store);
|
|
Deno.writeTextFileSync = spy((_, string) => store = string);
|
|
|
|
globalThis.addEventListener = spy(globalThis.addEventListener);
|
|
globalThis.removeEventListener = spy(globalThis.removeEventListener);
|
|
});
|
|
|
|
Deno.test("BearMetalStore Traditional", async (t) => {
|
|
const store = new BearMetalStore();
|
|
|
|
const listener = spy();
|
|
globalThis.addEventListener(store.EVENT_NAME, listener);
|
|
|
|
await t.step("set and get", () => {
|
|
store.set("key", "value");
|
|
assertEquals(store.get("key"), "value");
|
|
});
|
|
|
|
await t.step("write file called", () => {
|
|
assertSpyCall(Deno.writeTextFileSync as SpyLike, 0);
|
|
});
|
|
|
|
await t.step("event listener called", () => {
|
|
assertSpyCall(listener, 0);
|
|
});
|
|
|
|
await t.step("delete and get", () => {
|
|
store.delete("key");
|
|
assertEquals(store.get("key"), undefined);
|
|
});
|
|
|
|
await t.step("event listeners removed", () => {
|
|
store[Symbol.dispose]();
|
|
assertSpyCallArgs(globalThis.removeEventListener as SpyLike, 0, [
|
|
store.EVENT_NAME,
|
|
(store as any).readIn,
|
|
]);
|
|
});
|
|
});
|
|
Deno.test("BearMetalStore `using` syntax", async (t) => {
|
|
let eventName = "";
|
|
let readIn = () => {};
|
|
{
|
|
using store = new BearMetalStore();
|
|
eventName = store.EVENT_NAME;
|
|
readIn = (store as any).readIn;
|
|
|
|
const listener = spy();
|
|
globalThis.addEventListener(store.EVENT_NAME, listener);
|
|
|
|
await t.step("set and get", () => {
|
|
store.set("key", "value");
|
|
assertEquals(store.get("key"), "value");
|
|
});
|
|
|
|
await t.step("write file called", () => {
|
|
assertSpyCall(Deno.writeTextFileSync as SpyLike, 0);
|
|
});
|
|
|
|
await t.step("event listener called", () => {
|
|
assertSpyCall(listener, 0);
|
|
});
|
|
|
|
await t.step("delete and get", () => {
|
|
store.delete("key");
|
|
assertEquals(store.get("key"), undefined);
|
|
});
|
|
}
|
|
|
|
await t.step("event listeners removed", () => {
|
|
assertSpyCallArgs(globalThis.removeEventListener as SpyLike, 0, [
|
|
eventName,
|
|
readIn,
|
|
]);
|
|
});
|
|
});
|