1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
- import { DataStoreSerializer } from "./DataStoreSerializer.js";
- import { DataStore } from "./DataStore.js";
- import { beforeEach } from "node:test";
- import { compress, decompress } from "./crypto.js";
- const store1 = new DataStore({
- id: "dss-test-1",
- defaultData: { a: 1, b: 2 },
- formatVersion: 1,
- storageMethod: "sessionStorage",
- });
- const store2 = new DataStore({
- id: "dss-test-2",
- defaultData: { c: 1, d: 2 },
- formatVersion: 1,
- storageMethod: "sessionStorage",
- encodeData: async (data) => await compress(data, "deflate-raw", "string"),
- decodeData: async (data) => await decompress(data, "deflate-raw", "string"),
- });
- const getStores = () => [
- store1,
- store2,
- ];
- describe("DataStoreSerializer", () => {
- beforeEach(async () => {
- const ser = new DataStoreSerializer(getStores());
- await ser.deleteStoresData();
- await ser.resetStoresData();
- await ser.loadStoresData();
- });
- afterAll(async () => {
- await new DataStoreSerializer(getStores()).deleteStoresData();
- });
- it("Serialization", async () => {
- const ser = new DataStoreSerializer(getStores());
- await ser.loadStoresData();
- const full = await ser.serialize();
- expect(full).toEqual(`[{"id":"dss-test-1","data":"{\\"a\\":1,\\"b\\":2}","formatVersion":1,"encoded":false,"checksum":"43258cff783fe7036d8a43033f830adfc60ec037382473548ac742b888292777"},{"id":"dss-test-2","data":"q1ZKVrIy1FFKUbIyqgUA","formatVersion":1,"encoded":true,"checksum":"b1020c3faac493009494fa622f701b831657c11ea53f8c8236f0689089c7e2d3"}]`);
- const partial = await ser.serializePartial(["dss-test-1"]);
- expect(partial).toEqual(`[{"id":"dss-test-1","data":"{\\"a\\":1,\\"b\\":2}","formatVersion":1,"encoded":false,"checksum":"43258cff783fe7036d8a43033f830adfc60ec037382473548ac742b888292777"}]`);
- const unencoded = await ser.serializePartial(["dss-test-2"], false);
- expect(unencoded).toEqual(`[{"id":"dss-test-2","data":"{\\"c\\":1,\\"d\\":2}","formatVersion":1,"encoded":false,"checksum":"86cada6157f4b726bf413e0371a2f461a82d2809e6eb3c095ec796fcfd8d72ee"}]`);
- const notStringified = await ser.serializePartial(["dss-test-2"], false, false);
- expect(DataStoreSerializer.isSerializedDataStoreObjArray(notStringified)).toBe(true);
- expect(DataStoreSerializer.isSerializedDataStoreObj(notStringified?.[0])).toBe(true);
- expect(notStringified).toEqual([
- {
- id: "dss-test-2",
- data: "{\"c\":1,\"d\":2}",
- encoded: false,
- formatVersion: 1,
- checksum: "86cada6157f4b726bf413e0371a2f461a82d2809e6eb3c095ec796fcfd8d72ee",
- },
- ]);
- });
- it("Deserialization", async () => {
- const stores = getStores();
- const ser = new DataStoreSerializer(stores);
- await ser.deserialize(`[{"id":"dss-test-2","data":"{\\"c\\":420,\\"d\\":420}","formatVersion":1,"encoded":false}]`);
- expect(store2.getData().c).toBe(420);
- await ser.resetStoresData();
- expect(store1.getData().a).toBe(1);
- expect(store2.getData().c).toBe(1);
- await ser.resetStoresData();
- await ser.deserializePartial(["dss-test-1"], `[{"id":"dss-test-1","data":"{\\"a\\":421,\\"b\\":421}","checksum":"ad33b8f6a1d18c781a80390496b1b7dfaf56d73cf25a9497cb156ba83214357d","formatVersion":1,"encoded":false}, {"id":"dss-test-2","data":"{\\"c\\":421,\\"d\\":421}","formatVersion":1,"encoded":false}]`);
- expect(store1.getData().a).toBe(421);
- expect(store2.getData().c).toBe(1);
- await ser.resetStoresData();
- await ser.deserializePartial(["dss-test-2"], `[{"id":"dss-test-1","data":"{\\"a\\":422,\\"b\\":422}","formatVersion":1,"encoded":false}, {"id":"dss-test-2","data":"{\\"c\\":422,\\"d\\":422}","checksum":"ab1d18cf13554369cea6bb517a9034e3d6548f19a40d176b16ac95c8e02d65bb","formatVersion":1,"encoded":false}]`);
- expect(store1.getData().a).toBe(1);
- expect(store2.getData().c).toBe(422);
- await ser.resetStoresData(() => false);
- expect(store1.getData().a).toBe(1);
- expect(store2.getData().c).toBe(422);
- });
- });
|