2020-02-03 10:24:25 +01:00
|
|
|
import {
|
|
|
|
setupApphierarchy,
|
|
|
|
basicAppHierarchyCreator_WithFields,
|
|
|
|
} from "./specHelpers"
|
|
|
|
import { includes, union } from "lodash"
|
|
|
|
import { joinKey } from "../src/common"
|
2019-07-15 08:12:52 +02:00
|
|
|
|
|
|
|
describe("collectionApi > getAllowedRecordTypes", () => {
|
2020-02-03 10:24:25 +01:00
|
|
|
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"])
|
|
|
|
})
|
|
|
|
})
|
2019-07-15 08:12:52 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
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 = []
|
2019-07-15 08:12:52 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
let shardIds = await allIdsIterator()
|
|
|
|
while (shardIds.done === false) {
|
|
|
|
allIds = union(allIds, shardIds.result.ids)
|
|
|
|
shardIds = await allIdsIterator()
|
|
|
|
}
|
2019-07-15 08:12:52 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(allIds.length).toBe(1)
|
|
|
|
expect(includes(allIds, customer2.id)).toBeTruthy()
|
|
|
|
})
|
2019-07-15 08:12:52 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should add and read record, that starts with any allowed key char (testing correct sharding of allids)", async () => {
|
|
|
|
const allIdChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-".split(
|
|
|
|
""
|
|
|
|
)
|
2019-07-15 08:12:52 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
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()
|
|
|
|
}
|
2019-07-15 08:12:52 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(allIds.length).toBe(1)
|
|
|
|
expect(includes(allIds, charge.id)).toBeTruthy()
|
|
|
|
})
|
|
|
|
})
|