@irrelon/forerunnerdb-core
Version:
ForerunnerDB core utilities for operating on JSON data.
216 lines (188 loc) • 5.52 kB
JavaScript
import assert from "assert";
import {remove} from "./remove";
describe("remove", () => {
describe("Modes of operation", () => {
it("By query", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"_id": "1",
"foo": true
});
assert.strictEqual(removeResult.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr[0]._id, "2", "Number of documents is correct");
assert.strictEqual(dataArr[0].foo, true, "Correct value");
assert.deepStrictEqual(dataArr, [{
"_id": "2",
"foo": true
}], "Correct value");
});
it("Using $one", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"foo": true,
}, {
"$one": true
});
assert.strictEqual(removeResult.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr[0]._id, "2", "Number of documents is correct");
assert.deepStrictEqual(dataArr, [{
"_id": "2",
"foo": true
}], "Correct value");
});
it("Using $skipAssignment", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"_id": "1"
}, {
"$skipAssignment": true
});
assert.strictEqual(removeResult.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
assert.notStrictEqual(dataArr, removeResult, "Data has been immutably removed");
assert.notStrictEqual(dataArr[0], removeResult[0], "Data has been immutably removed");
assert.deepStrictEqual(dataArr, [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}], "Correct value");
assert.deepStrictEqual(removeResult, [{
"_id": "1",
"foo": true
}], "Correct value");
});
it("Using $preFlight() false result", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"_id": "1"
}, {
"$preFlight": (doc) => {
return doc._id !== "1";
}
});
assert.strictEqual(removeResult.length, 0, "Number of documents is correct");
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
assert.strictEqual(dataArr[0]._id, "1", "Number of documents is correct");
assert.strictEqual(dataArr[0].foo, true, "Correct value");
assert.deepStrictEqual(dataArr, [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}], "Correct value");
});
it("Using $preFlight() true result", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"_id": "1"
}, {
"$preFlight": (doc) => {
return doc._id === "1";
}
});
assert.strictEqual(removeResult.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr.length, 1, "Number of documents is correct");
assert.deepStrictEqual(dataArr, [{
"_id": "2",
"foo": true
}], "Correct value");
});
it("Using $preFlight() true result, $postFlight() false result", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"_id": "1"
}, {
"$preFlight": (doc) => {
return doc._id === "1";
},
"$postFlight": (removedDoc, originalDoc) => {
return removedDoc._id !== "1";
}
});
assert.strictEqual(removeResult.length, 0, "Number of documents is correct");
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
assert.strictEqual(dataArr[0]._id, "1", "Number of documents is correct");
assert.strictEqual(dataArr[0].foo, true, "Correct value");
assert.deepStrictEqual(dataArr, [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}], "Correct value");
});
it("Using $preFlight() true result, $postFlight() true result", async () => {
const dataArr = [{
"_id": "1",
"foo": true
}, {
"_id": "2",
"foo": true
}];
assert.strictEqual(dataArr.length, 2, "Number of documents is correct");
const removeResult = await remove(dataArr, {
"_id": "1"
}, {
"$preFlight": (doc) => {
return doc._id === "1";
},
"$postFlight": (removedDoc, originalDoc) => {
return removedDoc._id === "1";
}
});
assert.strictEqual(removeResult.length, 1, "Number of documents is correct");
assert.strictEqual(dataArr.length, 1, "Number of documents is correct");
assert.deepStrictEqual(dataArr, [{
"_id": "2",
"foo": true
}], "Correct value");
});
});
});