jsoniq
Version:
JSONiq implementation for JavaScript
109 lines (96 loc) • 3.85 kB
text/typescript
/// <reference path="../../../typings/tsd.d.ts" />
require("jasmine2-pit");
import PUL from "../../../lib/updates/PUL";
import MemoryStore from "../../../lib/stores/memory/MemoryStore";
import MemoryTransaction from "../../../lib/stores/memory/MemoryTransaction";
declare function pit(expectation: string, assertion?: (done: () => void) => any): void;
describe("Invert Operator", () => {
pit("delete & insert", () => {
var todos = [{
id: 0,
title: "Write thesis",
complete: false
}];
var store = new MemoryStore();
var id = store.put(todos);
var pul = new PUL();
pul
.insertIntoArray(id, [], 1, [{ id: 1 }])
.insertIntoObject(id, ["0"], { title: "More figures" })
.deleteFromObject(id, ["0"], ["title"]);
var invert = pul.invert(new MemoryTransaction(store.snapshot));
return invert.then(invert => {
return store.commitWith(pul).then(() => {
var d1 = store.get(id);
expect(d1[0].id).toBe(0);
expect(d1[0].title).toBe("More figures");
expect(d1[1].id).toBe(1);
return store.commitWith(invert).then(() => {
var d0 = store.get(id);
expect(d0).toEqual(todos);
});
});
});
});
pit("replaceInObject", () => {
var todos = [{
id: 0,
title: "Write thesis",
complete: false
}];
var store = new MemoryStore();
var id = store.put(todos);
var pul = new PUL();
pul.replaceInObject(id, ["0"], "complete", true);
pul.renameInObject(id, ["0"], "complete", "completed");
var invert = pul.invert(new MemoryTransaction(store.snapshot));
return invert.then(invert => {
return store.commitWith(pul).then(() => {
var d1 = store.get(id);
expect(d1[0].completed).toBe(true);
return store.commitWith(invert).then(() => {
var d0 = store.get(id);
expect(d0).toEqual(todos);
});
});
});
});
pit("example 1", () => {
var todos = [{
id: 0,
title: "Write thesis",
complete: false
}];
var store = new MemoryStore();
var id = store.put(todos);
var ref = store.put({ user: "bar" });
var pul = new PUL();
pul
.insertIntoArray(id, [], 1, [{ id: 1 }])
.replaceInObject(id, ["0"], "complete", true)
.renameInObject(id, ["0"], "complete", "completed")
.insertIntoObject(id, ["0"], { title: "More figures" })
.deleteFromObject(id, ["0"], ["title"]);
pul.insert("hello", { user: "foo" });
pul.remove(ref);
var invert = pul.invert(new MemoryTransaction(store.snapshot));
return invert.then(invert => {
return store.commitWith(pul).then(() => {
var d1 = store.get(id);
expect(d1[0]["completed"]).toBe(true);
expect(d1[0].complete).toBe(undefined);
expect(d1[0].id).toBe(0);
expect(d1[0].title).toBe("More figures");
expect(d1[1].id).toBe(1);
expect(store.get("hello")).toEqual({ user: "foo" });
expect(() => { store.get(ref); }).toThrow();
return store.commitWith(invert).then(() => {
var d0 = store.get(id);
expect(d0).toEqual(todos);
expect(() => { store.get("hello"); }).toThrow();
expect(store.get(ref)).toEqual({ user: "bar" });
});
});
});
});
});