2019-12-22 08:12:21 +01:00
|
|
|
import {setupApphierarchy, basicAppHierarchyCreator_WithFields} from "./specHelpers";
|
2019-07-15 08:12:52 +02:00
|
|
|
import {includes, union} from "lodash";
|
|
|
|
import {joinKey} from "../src/common";
|
|
|
|
|
|
|
|
|
|
|
|
describe("collectionApi > getAllowedRecordTypes", () => {
|
|
|
|
|
|
|
|
it("should list names of a collection's children", async () => {
|
|
|
|
const {collectionApi} =
|
|
|
|
await setupApphierarchy(basicAppHierarchyCreator_WithFields);
|
|
|
|
|
|
|
|
const allowedTypes = collectionApi.getAllowedRecordTypes("/customers");
|
|
|
|
expect(allowedTypes).toEqual(["customer"]);
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
describe("collectionApi > allids", () => {
|
|
|
|
|
|
|
|
it("should add new record to comma separated, sharded allids file, then read back as id array", async () => {
|
|
|
|
const {collectionApi, recordApi, appHierarchy} =
|
|
|
|
await setupApphierarchy(basicAppHierarchyCreator_WithFields);
|
|
|
|
|
|
|
|
const customer1 = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer1.surname = "thedog";
|
|
|
|
|
|
|
|
await recordApi.save(customer1);
|
|
|
|
|
|
|
|
const customer2 = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer2.surname = "thedog";
|
|
|
|
|
|
|
|
await recordApi.save(customer2);
|
|
|
|
|
|
|
|
const allIdsIterator = await collectionApi.getAllIdsIterator("/customers");
|
|
|
|
let allIds = [];
|
|
|
|
|
|
|
|
let shardIds = await allIdsIterator();
|
|
|
|
while(shardIds.done === false) {
|
|
|
|
allIds = union(allIds, shardIds.result.ids);
|
|
|
|
shardIds = await allIdsIterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(allIds.length).toBe(2);
|
|
|
|
expect(includes(allIds, customer1.id)).toBeTruthy();
|
|
|
|
expect(includes(allIds, customer2.id)).toBeTruthy();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
it("delete record should remove id from allids shard", async () => {
|
|
|
|
const {collectionApi, recordApi, appHierarchy} =
|
|
|
|
await setupApphierarchy(basicAppHierarchyCreator_WithFields);
|
|
|
|
|
|
|
|
const customer1 = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer1.surname = "thedog";
|
|
|
|
|
|
|
|
await recordApi.save(customer1);
|
|
|
|
|
|
|
|
const customer2 = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer2.surname = "thedog";
|
|
|
|
|
|
|
|
await recordApi.save(customer2);
|
|
|
|
|
|
|
|
await recordApi.delete(customer1.key);
|
|
|
|
|
|
|
|
const allIdsIterator = await collectionApi.getAllIdsIterator("/customers");
|
|
|
|
let allIds = [];
|
|
|
|
|
|
|
|
let shardIds = await allIdsIterator();
|
|
|
|
while(shardIds.done === false) {
|
|
|
|
allIds = union(allIds, shardIds.result.ids);
|
|
|
|
shardIds = await allIdsIterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(allIds.length).toBe(1);
|
|
|
|
expect(includes(allIds, customer2.id)).toBeTruthy();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should add and read record, that starts with any allowed key char (testing correct sharding of allids)", async () => {
|
|
|
|
|
|
|
|
const allIdChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-".split("");
|
|
|
|
|
|
|
|
const {collectionApi, recordApi, appHierarchy} =
|
|
|
|
await setupApphierarchy(basicAppHierarchyCreator_WithFields);
|
|
|
|
|
|
|
|
for(let c of allIdChars) {
|
|
|
|
const customer = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer.surname = "thedog";
|
|
|
|
const id = `${appHierarchy.customerRecord.nodeId}-${c}${customer.id.replace("0-","")}`;
|
|
|
|
customer.id = id;
|
|
|
|
await recordApi.save(customer);
|
|
|
|
}
|
|
|
|
|
|
|
|
const allIdsIterator = await collectionApi.getAllIdsIterator("/customers");
|
|
|
|
let allIds = [];
|
|
|
|
|
|
|
|
let shardIds = await allIdsIterator();
|
|
|
|
while(shardIds.done === false) {
|
|
|
|
allIds = union(allIds, shardIds.result.ids);
|
|
|
|
shardIds = await allIdsIterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(allIds.length).toBe(64);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should add nested record and read back", async () => {
|
|
|
|
const {collectionApi, recordApi, appHierarchy} =
|
|
|
|
await setupApphierarchy(basicAppHierarchyCreator_WithFields);
|
|
|
|
|
|
|
|
const customer = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer.surname = "thedog";
|
|
|
|
|
|
|
|
await recordApi.save(customer);
|
|
|
|
|
|
|
|
const invoiceCollectionKey = joinKey(
|
|
|
|
customer.key, "invoices"
|
|
|
|
);
|
|
|
|
|
|
|
|
const invoice = await recordApi.getNew(
|
|
|
|
invoiceCollectionKey, "invoice");
|
|
|
|
|
|
|
|
await recordApi.save(invoice);
|
|
|
|
|
|
|
|
const allIdsIterator = await collectionApi.getAllIdsIterator(
|
|
|
|
appHierarchy.invoiceRecord.collectionNodeKey());
|
|
|
|
|
|
|
|
let allIds = [];
|
|
|
|
|
|
|
|
let shardIds = await allIdsIterator();
|
|
|
|
while(shardIds.done === false) {
|
|
|
|
allIds = union(allIds, shardIds.result.ids);
|
|
|
|
shardIds = await allIdsIterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(allIds.length).toBe(1);
|
|
|
|
expect(includes(allIds, invoice.id)).toBeTruthy();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should add double nested record, and read back", async () => {
|
|
|
|
const {collectionApi, recordApi, appHierarchy} =
|
|
|
|
await setupApphierarchy(basicAppHierarchyCreator_WithFields);
|
|
|
|
|
|
|
|
const customer = await recordApi.getNew(
|
|
|
|
appHierarchy.customerRecord.collectionNodeKey(), "customer");
|
|
|
|
customer.surname = "thedog";
|
|
|
|
|
|
|
|
await recordApi.save(customer);
|
|
|
|
|
|
|
|
const invoiceCollectionKey = joinKey(
|
|
|
|
customer.key, "invoices"
|
|
|
|
);
|
|
|
|
|
|
|
|
const invoice = await recordApi.getNew(
|
|
|
|
invoiceCollectionKey, "invoice");
|
|
|
|
|
|
|
|
await recordApi.save(invoice);
|
|
|
|
|
|
|
|
const chargeCollectionKey = joinKey(
|
|
|
|
invoice.key, "charges"
|
|
|
|
);
|
|
|
|
|
|
|
|
const charge = await recordApi.getNew(
|
|
|
|
chargeCollectionKey, "charge");
|
|
|
|
|
|
|
|
await recordApi.save(charge);
|
|
|
|
|
|
|
|
const allIdsIterator = await collectionApi.getAllIdsIterator(
|
|
|
|
appHierarchy.chargeRecord.collectionNodeKey());
|
|
|
|
|
|
|
|
let allIds = [];
|
|
|
|
|
|
|
|
let shardIds = await allIdsIterator();
|
|
|
|
while(shardIds.done === false) {
|
|
|
|
allIds = union(allIds, shardIds.result.ids);
|
|
|
|
shardIds = await allIdsIterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(allIds.length).toBe(1);
|
|
|
|
expect(includes(allIds, charge.id)).toBeTruthy();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|