budibase/packages/core/test/collectionApi.spec.js

190 lines
6.4 KiB
JavaScript
Raw Normal View History

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();
});
});