Skip to content

Commit fd257dc

Browse files
Merge pull request #198 from oliver-oloughlin/async-id-generator-tests
chore: added async id generator tests
2 parents 77b799b + 46c8dd4 commit fd257dc

File tree

6 files changed

+111
-3
lines changed

6 files changed

+111
-3
lines changed

deno.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"name": "@olli/kvdex",
3-
"version": "0.35.2",
3+
"version": "0.35.3",
44
"exports": {
55
".": "./mod.ts",
66
"./ext/zod": "./ext/zod.ts",
77
"./ext/migrate": "./ext/migrate.ts"
88
},
99
"tasks": {
1010
"check": "deno check mod.ts src/*.ts ext/*.ts tests/*.ts tests/**/*.ts benchmarks/**/*ts",
11-
"test": "deno test --allow-write --allow-read --unstable-kv --trace-ops",
11+
"test": "deno test --allow-write --allow-read --unstable-kv --trace-leaks",
1212
"bench": "deno bench --unstable-kv",
1313
"prep": "deno task check && deno fmt && deno lint && deno publish --dry-run && deno task test",
1414
"cache": "deno cache -r mod.ts && deno cache -r ext/zod.ts && deno cache -r ext/migrate.ts"

src/atomic_builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ export class AtomicBuilder<
423423
)
424424
)
425425
) {
426-
// Ff collisions are detected, return commit error
426+
// If collisions are detected, return commit error
427427
return {
428428
ok: false,
429429
}

tests/collection/properties.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,4 +279,32 @@ Deno.test("collection - properties", async (t) => {
279279
})
280280
},
281281
)
282+
283+
await t.step("Should successfully generate id asynchronously", async () => {
284+
await useKv(async (kv) => {
285+
const db = kvdex(kv, {
286+
test: collection(model<User>(), {
287+
idGenerator: async (user) => {
288+
const buffer = await crypto.subtle.digest(
289+
"SHA-256",
290+
new ArrayBuffer(user.age),
291+
)
292+
return Math.random() * buffer.byteLength
293+
},
294+
}),
295+
})
296+
297+
const cr1 = await db.test.add(mockUser1)
298+
const cr2 = await db.atomic((s) => s.test).add(mockUser2).commit()
299+
const doc2 = await db.test.getOne({
300+
filter: (doc) => doc.value.username === mockUser2.username,
301+
})
302+
303+
assert(cr1.ok)
304+
assert(typeof cr1.id === "number")
305+
assert(cr2.ok)
306+
assert(doc2 !== null)
307+
assert(typeof doc2.id === "number")
308+
})
309+
})
282310
})

tests/indexable_collection/properties.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,4 +882,36 @@ Deno.test("indexable_collection - properties", async (t) => {
882882
assert(bySecondary26.length === 1)
883883
})
884884
})
885+
886+
await t.step("Should successfully generate id asynchronously", async () => {
887+
await useKv(async (kv) => {
888+
const db = kvdex(kv, {
889+
test: collection(model<User>(), {
890+
indices: {
891+
username: "primary",
892+
age: "secondary",
893+
},
894+
idGenerator: async (user) => {
895+
const buffer = await crypto.subtle.digest(
896+
"SHA-256",
897+
new ArrayBuffer(user.age),
898+
)
899+
return Math.random() * buffer.byteLength
900+
},
901+
}),
902+
})
903+
904+
const cr1 = await db.test.add(mockUser1)
905+
const cr2 = await db.atomic((s) => s.test).add(mockUser2).commit()
906+
const doc2 = await db.test.getOne({
907+
filter: (doc) => doc.value.username === mockUser2.username,
908+
})
909+
910+
assert(cr1.ok)
911+
assert(typeof cr1.id === "number")
912+
assert(cr2.ok)
913+
assert(doc2 !== null)
914+
assert(typeof doc2.id === "number")
915+
})
916+
})
885917
})

tests/serialized_collection/properties.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,4 +285,26 @@ Deno.test("serialized_collection - properties", async (t) => {
285285
})
286286
},
287287
)
288+
289+
await t.step("Should successfully generate id asynchronously", async () => {
290+
await useKv(async (kv) => {
291+
const db = kvdex(kv, {
292+
test: collection(model<User>(), {
293+
serialize: "json",
294+
idGenerator: async (user) => {
295+
const buffer = await crypto.subtle.digest(
296+
"SHA-256",
297+
new ArrayBuffer(user.age),
298+
)
299+
return Math.random() * buffer.byteLength
300+
},
301+
}),
302+
})
303+
304+
const cr1 = await db.test.add(mockUser1)
305+
306+
assert(cr1.ok)
307+
assert(typeof cr1.id === "number")
308+
})
309+
})
288310
})

tests/serialized_indexable_collection/properties.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -914,4 +914,30 @@ Deno.test("serialized_indexable_collection - properties", async (t) => {
914914
assert(bySecondary26.length === 1)
915915
})
916916
})
917+
918+
await t.step("Should successfully generate id asynchronously", async () => {
919+
await useKv(async (kv) => {
920+
const db = kvdex(kv, {
921+
test: collection(model<User>(), {
922+
serialize: "json",
923+
indices: {
924+
username: "primary",
925+
age: "secondary",
926+
},
927+
idGenerator: async (user) => {
928+
const buffer = await crypto.subtle.digest(
929+
"SHA-256",
930+
new ArrayBuffer(user.age),
931+
)
932+
return Math.random() * buffer.byteLength
933+
},
934+
}),
935+
})
936+
937+
const cr1 = await db.test.add(mockUser1)
938+
939+
assert(cr1.ok)
940+
assert(typeof cr1.id === "number")
941+
})
942+
})
917943
})

0 commit comments

Comments
 (0)