2024-05-03 06:19:55 +08:00
|
|
|
/*
|
2024-09-09 21:57:16 +08:00
|
|
|
Copyright 2024 New Vector Ltd.
|
2024-05-03 06:19:55 +08:00
|
|
|
Copyright 2024 The Matrix.org Foundation C.I.C.
|
|
|
|
|
2024-09-09 21:57:16 +08:00
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
|
|
|
|
Please see LICENSE files in the repository root for full details.
|
2024-05-03 06:19:55 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
import "core-js/stable/structured-clone"; // for idb access
|
|
|
|
import "fake-indexeddb/auto";
|
|
|
|
|
2024-10-15 21:57:26 +08:00
|
|
|
import { idbDelete, idbLoad, idbSave } from "../../../src/utils/StorageAccess";
|
2024-05-03 06:19:55 +08:00
|
|
|
|
|
|
|
const NONEXISTENT_TABLE = "this_is_not_a_table_we_use_ever_and_so_we_can_use_it_in_tests";
|
|
|
|
const KNOWN_TABLES = ["account", "pickleKey"];
|
|
|
|
|
|
|
|
describe("StorageAccess", () => {
|
|
|
|
it.each(KNOWN_TABLES)("should save, load, and delete from known table '%s'", async (tableName: string) => {
|
|
|
|
const key = ["a", "b"];
|
|
|
|
const data = { hello: "world" };
|
|
|
|
|
|
|
|
// Should start undefined
|
|
|
|
let loaded = await idbLoad(tableName, key);
|
|
|
|
expect(loaded).toBeUndefined();
|
|
|
|
|
|
|
|
// ... then define a value
|
|
|
|
await idbSave(tableName, key, data);
|
|
|
|
|
|
|
|
// ... then check that value
|
|
|
|
loaded = await idbLoad(tableName, key);
|
|
|
|
expect(loaded).toEqual(data);
|
|
|
|
|
|
|
|
// ... then set it back to undefined
|
|
|
|
await idbDelete(tableName, key);
|
|
|
|
|
|
|
|
// ... which we then check again
|
|
|
|
loaded = await idbLoad(tableName, key);
|
|
|
|
expect(loaded).toBeUndefined();
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should fail to save, load, and delete from a non-existent table", async () => {
|
|
|
|
// Regardless of validity on the key/data, or write order, these should all fail.
|
|
|
|
await expect(() => idbSave(NONEXISTENT_TABLE, "whatever", "value")).rejects.toThrow();
|
|
|
|
await expect(() => idbLoad(NONEXISTENT_TABLE, "whatever")).rejects.toThrow();
|
|
|
|
await expect(() => idbDelete(NONEXISTENT_TABLE, "whatever")).rejects.toThrow();
|
|
|
|
});
|
|
|
|
});
|