minimongo
Version:
Client-side mongo database with server sync over http
94 lines (86 loc) • 2.97 kB
text/typescript
// TODO: This file was created by bulk-decaffeinate.
// Sanity-check the conversion and remove this comment.
import chai from "chai"
const { assert } = chai
import IndexedDb from "../src/IndexedDb"
import db_queries from "./db_queries"
import db_caching from "./db_caching"
import _ from "lodash"
describe("IndexedDb", function () {
before(function (done: any) {
this.reset = (done: any) => {
return (this.db = new IndexedDb({ namespace: "db.scratch" }, () => {
return this.db.removeCollection("scratch", () => {
return this.db.addCollection("scratch", () => {
this.col = this.db.scratch
done()
})
})
}))
}
return this.reset(done)
})
describe("passes queries", function (this: any) {
return db_queries.call(this)
})
return describe("passes caching", function (this: any) {
return db_caching.call(this)
})
})
describe("IndexedDb storage", function () {
beforeEach(function (done: any) {
return (this.db = new IndexedDb({ namespace: "db.scratch" }, () => {
return this.db.removeCollection("scratch", () => {
return this.db.addCollection("scratch", () => done())
})
}))
})
it("retains items", function (done: any) {
return this.db.scratch.upsert({ _id: "1", a: "Alice" }, function () {
let db2: any
return (db2 = new IndexedDb({ namespace: "db.scratch" }, () =>
db2.addCollection("scratch", () =>
db2.scratch.find({}).fetch(function (results: any) {
assert.equal(results[0].a, "Alice")
done()
})
)
))
})
})
it("retains upserts", function (done: any) {
return this.db.scratch.cacheOne({ _id: "1", a: "Alice" }, () => {
return this.db.scratch.upsert({ _id: "1", a: "Bob" }, function () {
let db2: any
return (db2 = new IndexedDb({ namespace: "db.scratch" }, () =>
db2.addCollection("scratch", () =>
db2.scratch.find({}).fetch(function (results: any) {
assert.deepEqual(results, [{ _id: "1", a: "Bob" }])
return db2.scratch.pendingUpserts(function (upserts: any) {
assert.equal(upserts.length, 1)
assert.deepEqual(upserts[0].doc, { _id: "1", a: "Bob" })
assert.deepEqual(upserts[0].base, { _id: "1", a: "Alice" })
done()
})
})
)
))
})
})
})
return it("retains removes", function (done: any) {
return this.db.scratch.seed({ _id: "1", a: "Alice" }, () => {
return this.db.scratch.remove("1", function () {
let db2: any
return (db2 = new IndexedDb({ namespace: "db.scratch" }, () =>
db2.addCollection("scratch", () =>
db2.scratch.pendingRemoves(function (removes: any) {
assert.deepEqual(removes, ["1"])
done()
})
)
))
})
})
})
})