From a4e4125cca8644703d7cff527a39c1a5a9842eba Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 21 Jun 2019 19:18:36 +0200 Subject: idb: tests working --- packages/idb-bridge/src/MemoryBackend.test.ts | 123 +++++++++++++++++++++++--- 1 file changed, 109 insertions(+), 14 deletions(-) (limited to 'packages/idb-bridge/src/MemoryBackend.test.ts') diff --git a/packages/idb-bridge/src/MemoryBackend.test.ts b/packages/idb-bridge/src/MemoryBackend.test.ts index 3d2d0fbc9..213bff750 100644 --- a/packages/idb-bridge/src/MemoryBackend.test.ts +++ b/packages/idb-bridge/src/MemoryBackend.test.ts @@ -1,31 +1,126 @@ -import test from 'ava'; -import MemoryBackend from './MemoryBackend'; -import BridgeIDBFactory from './BridgeIDBFactory'; +import test from "ava"; +import MemoryBackend from "./MemoryBackend"; +import BridgeIDBFactory from "./BridgeIDBFactory"; +import BridgeIDBRequest from "./BridgeIDBRequest"; +import BridgeIDBDatabase from "./BridgeIDBDatabase"; +import BridgeIDBTransaction from "./BridgeIDBTransaction"; -test.cb("basics", (t) => { +function promiseFromRequest(request: BridgeIDBRequest): Promise { + return new Promise((resolve, reject) => { + request.onsuccess = () => { + resolve(request.result); + }; + request.onerror = () => { + reject(request.error); + }; + }); +} + +function promiseFromTransaction(transaction: BridgeIDBTransaction): Promise { + return new Promise((resolve, reject) => { + console.log("attaching event handlers"); + transaction.oncomplete = () => { + console.log("oncomplete was called from promise") + resolve(); + }; + transaction.onerror = () => { + reject(); + }; + }); +} + +test("Spec: Example 1 Part 1", async t => { const backend = new MemoryBackend(); const idb = new BridgeIDBFactory(backend); const request = idb.open("library"); request.onupgradeneeded = () => { const db = request.result; - const store = db.createObjectStore("books", {keyPath: "isbn"}); - const titleIndex = store.createIndex("by_title", "title", {unique: true}); + const store = db.createObjectStore("books", { keyPath: "isbn" }); + const titleIndex = store.createIndex("by_title", "title", { unique: true }); const authorIndex = store.createIndex("by_author", "author"); - + // Populate with initial data. - store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); - store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); - store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); + store.put({ title: "Quarry Memories", author: "Fred", isbn: 123456 }); + store.put({ title: "Water Buffaloes", author: "Fred", isbn: 234567 }); + store.put({ title: "Bedrock Nights", author: "Barney", isbn: 345678 }); + }; + + await promiseFromRequest(request); + t.pass(); +}); + + +test("Spec: Example 1 Part 2", async t => { + const backend = new MemoryBackend(); + const idb = new BridgeIDBFactory(backend); + + const request = idb.open("library"); + request.onupgradeneeded = () => { + const db = request.result; + const store = db.createObjectStore("books", { keyPath: "isbn" }); + const titleIndex = store.createIndex("by_title", "title", { unique: true }); + const authorIndex = store.createIndex("by_author", "author"); + }; + + const db: BridgeIDBDatabase = await promiseFromRequest(request); + + t.is(db.name, "library"); + + const tx = db.transaction("books", "readwrite"); + tx.oncomplete = () => { + console.log("oncomplete called") }; - request.onsuccess = () => { - t.end(); + const store = tx.objectStore("books"); + + store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); + store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); + store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); + + await promiseFromTransaction(tx); + + t.pass(); +}); + + +test("Spec: Example 1 Part 3", async t => { + const backend = new MemoryBackend(); + const idb = new BridgeIDBFactory(backend); + + const request = idb.open("library"); + request.onupgradeneeded = () => { + const db = request.result; + const store = db.createObjectStore("books", { keyPath: "isbn" }); + const titleIndex = store.createIndex("by_title", "title", { unique: true }); + const authorIndex = store.createIndex("by_author", "author"); }; - request.onerror = () => { - t.fail(); + const db: BridgeIDBDatabase = await promiseFromRequest(request); + + t.is(db.name, "library"); + + const tx = db.transaction("books", "readwrite"); + tx.oncomplete = () => { + console.log("oncomplete called") }; + const store = tx.objectStore("books"); + + store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); + store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); + store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); + + await promiseFromTransaction(tx); + + const tx2 = db.transaction("books", "readonly"); + const store2 = tx2.objectStore("books"); + var index2 = store2.index("by_title"); + const request2 = index2.get("Bedrock Nights"); + const result2: any = await promiseFromRequest(request2); + + t.is(result2.author, "Barney"); + + t.pass(); }); -- cgit v1.2.3