import {setupApphierarchy, basicAppHierarchyCreator_WithFields} from "./specHelpers"; 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(); }); });