aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-01-12 16:04:19 +0100
committerFlorian Dold <florian@dold.me>2022-01-12 16:04:19 +0100
commitdd66e43b3ceb3e393f399ac5544941de8912c59d (patch)
treeb6c0369056f65d751944707453edaedd274cd892
parentdc596f1f4d494c3bf9e57253d773205dc0479179 (diff)
idb-bridge: add test for updating the same record with/without index key
-rw-r--r--packages/idb-bridge/src/MemoryBackend.test.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/idb-bridge/src/MemoryBackend.test.ts b/packages/idb-bridge/src/MemoryBackend.test.ts
index ac1a9d908..3c5e13dff 100644
--- a/packages/idb-bridge/src/MemoryBackend.test.ts
+++ b/packages/idb-bridge/src/MemoryBackend.test.ts
@@ -356,6 +356,59 @@ test("export", async (t) => {
t.pass();
});
+test("update with non-existent index values", async (t) => {
+ const backend = new MemoryBackend();
+ backend.enableTracing = true;
+ const idb = new BridgeIDBFactory(backend);
+ const request = idb.open("mydb");
+ request.onupgradeneeded = () => {
+ const db = request.result;
+ const store = db.createObjectStore("bla", { keyPath: "x" });
+ store.createIndex("by_y", "y");
+ store.createIndex("by_z", "z");
+ };
+
+ const db: BridgeIDBDatabase = await promiseFromRequest(request);
+
+ t.is(db.name, "mydb");
+
+ {
+ const tx = db.transaction("bla", "readwrite");
+ const store = tx.objectStore("bla");
+ store.put({ x: 0, y: "a", z: 42 });
+ const index = store.index("by_z");
+ const indRes = await promiseFromRequest(index.get(42));
+ t.is(indRes.x, 0);
+ const res = await promiseFromRequest(store.get(0));
+ t.is(res.z, 42);
+ await promiseFromTransaction(tx);
+ }
+
+ {
+ const tx = db.transaction("bla", "readwrite");
+ const store = tx.objectStore("bla");
+ store.put({ x: 0, y: "a" });
+ const res = await promiseFromRequest(store.get(0));
+ t.is(res.z, undefined);
+ await promiseFromTransaction(tx);
+ }
+
+ {
+ const tx = db.transaction("bla", "readwrite");
+ const store = tx.objectStore("bla");
+ const index = store.index("by_z");
+ {
+ const indRes = await promiseFromRequest(index.get(42));
+ t.is(indRes, undefined);
+ }
+ const res = await promiseFromRequest(store.get(0));
+ t.is(res.z, undefined);
+ await promiseFromTransaction(tx);
+ }
+
+ t.pass();
+});
+
test("range queries", async (t) => {
const backend = new MemoryBackend();
backend.enableTracing = true;