102 lines
3.1 KiB
TypeScript
102 lines
3.1 KiB
TypeScript
import { IndexedDb, IndexedDbTable } from "@effect/platform-browser"
|
|
import { assert, describe, it } from "@effect/vitest"
|
|
import { Schema } from "effect"
|
|
|
|
describe("IndexedDbTable", () => {
|
|
it("make", () => {
|
|
class Table extends IndexedDbTable.make({
|
|
name: "todo",
|
|
schema: Schema.Struct({
|
|
id: Schema.Number,
|
|
title: Schema.String,
|
|
completed: Schema.Boolean
|
|
}),
|
|
keyPath: "id"
|
|
}) {}
|
|
|
|
assert.equal(Table.tableName, "todo")
|
|
assert.equal(Table.autoIncrement, false)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.id, Schema.Number)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.title, Schema.String)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.completed, Schema.Boolean)
|
|
assert.equal(Table.keyPath, "id")
|
|
})
|
|
|
|
it("autoIncrement", () => {
|
|
class Table1 extends IndexedDbTable.make({
|
|
name: "todo",
|
|
schema: Schema.Struct({
|
|
id: IndexedDb.AutoIncrement,
|
|
title: Schema.String
|
|
}),
|
|
keyPath: "id",
|
|
autoIncrement: true
|
|
}) {}
|
|
|
|
class Table2 extends IndexedDbTable.make({
|
|
name: "todo",
|
|
schema: Schema.Struct({
|
|
id: IndexedDb.AutoIncrement,
|
|
title: Schema.String
|
|
}),
|
|
keyPath: "id",
|
|
autoIncrement: false
|
|
}) {}
|
|
|
|
assert.equal(Table1.tableName, "todo")
|
|
assert.equal(Table1.autoIncrement, true)
|
|
assert.deepStrictEqual(
|
|
Table1.tableSchema.fields.id,
|
|
IndexedDb.AutoIncrement
|
|
)
|
|
assert.deepStrictEqual(Table1.tableSchema.fields.title, Schema.String)
|
|
assert.equal(Table1.keyPath, "id")
|
|
|
|
assert.equal(Table2.tableName, "todo")
|
|
assert.equal(Table2.autoIncrement, false)
|
|
assert.deepStrictEqual(
|
|
Table2.tableSchema.fields.id,
|
|
IndexedDb.AutoIncrement
|
|
)
|
|
assert.deepStrictEqual(Table2.tableSchema.fields.title, Schema.String)
|
|
assert.equal(Table2.keyPath, "id")
|
|
})
|
|
|
|
it("multiple keyPath", () => {
|
|
const Table = IndexedDbTable.make({
|
|
name: "todo",
|
|
schema: Schema.Struct({
|
|
id: Schema.Number,
|
|
title: Schema.String,
|
|
completed: Schema.Boolean
|
|
}),
|
|
keyPath: ["id", "title"]
|
|
})
|
|
|
|
assert.equal(Table.tableName, "todo")
|
|
assert.equal(Table.autoIncrement, false)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.id, Schema.Number)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.title, Schema.String)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.completed, Schema.Boolean)
|
|
assert.deepStrictEqual(Table.keyPath, ["id", "title"])
|
|
})
|
|
|
|
it("no keyPath", () => {
|
|
const Table = IndexedDbTable.make({
|
|
name: "todo",
|
|
schema: Schema.Struct({
|
|
id: Schema.Number,
|
|
title: Schema.String,
|
|
completed: Schema.Boolean
|
|
})
|
|
})
|
|
|
|
assert.equal(Table.tableName, "todo")
|
|
assert.equal(Table.autoIncrement, false)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.id, Schema.Number)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.title, Schema.String)
|
|
assert.deepStrictEqual(Table.tableSchema.fields.completed, Schema.Boolean)
|
|
assert.deepStrictEqual(Table.keyPath, undefined)
|
|
})
|
|
})
|