minimongo
Version:
Client-side mongo database with server sync over http
96 lines (85 loc) • 2.75 kB
text/typescript
// TODO: This file was created by bulk-decaffeinate.
// Sanity-check the conversion and remove this comment.
import { assert } from "chai"
import MemoryDb from "../src/MemoryDb"
import db_queries from "./db_queries"
import db_caching from "./db_caching"
import _ from "lodash"
describe("MemoryDb", function () {
before(function (done: any) {
this.reset = (done: any) => {
this.db = new MemoryDb()
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)
})
describe("passes caching", function (this: any) {
return db_caching.call(this)
})
return describe("safety", function () {
before(function (this: any) {
return (this.setupSafety = function (type: any) {
this.db = new MemoryDb({ safety: type })
this.db.addCollection("scratch")
return (this.col = this.db.scratch)
})
})
describe("default (clone)", function () {
beforeEach(function (this: any) {
return this.setupSafety()
})
it("find returns different copy", function (done: any) {
const row = { _id: "1", a: "apple" }
return this.col.cache([row], {}, {}, () => {
return this.col.find({}).fetch(function (results: any) {
assert(row !== results[0])
done()
})
})
})
return it("upsert is a clone", function (done: any) {
const row = { _id: "1", a: "apple" }
return this.col.upsert([row], () => {
row.a = "banana"
return this.col.find({}).fetch(function (results: any) {
assert.equal(results[0].a, "apple")
done()
})
})
})
})
return describe("freeze", function () {
beforeEach(function (this: any) {
return this.setupSafety("freeze")
})
it("upsert is a clone", function (done: any) {
const row = { _id: "1", a: "apple" }
return this.col.upsert([row], () => {
row.a = "banana"
assert.equal(row.a, "banana")
return this.col.find({}).fetch(function (results: any) {
assert.equal(results[0].a, "apple")
done()
})
})
})
return it("find returns frozen", function (done: any) {
const row = { _id: "1", a: "apple" }
return this.col.upsert([row], () => {
return this.col.find({}).fetch(function (results: any) {
assert(row !== results[0], "Different row")
assert.throws(() => {
results[0].a = "banana"
})
done()
})
})
})
})
})
})