budibase/packages/datastores/tests/records.js

97 lines
2.8 KiB
JavaScript

import { action, iterateActionTimes, iterateCollection } from "./helpers"
import { isUndefined, union, takeRight } from "lodash"
const createClient = (apis, getState) => async i => {
const client = apis.recordApi.getNew("/clients", "client")
client.FamilyName = "Humperdink"
client.Address1 = `${i} Mainitucetts Avenue`
client.Address2 = "Longerton Road South"
client.Address3 = "Chalico City"
client.Address4 = "Northern Humranistan"
client.Postcode = "BY71 5FR"
client.CreatedDate = new Date()
const state = getState()
if (isUndefined(state.clientKeys)) state.clientKeys = []
state.clientKeys.push(client.key())
await apis.recordApi.save(client)
return client.key()
}
const getClient = (apis, getState) => async k => {
const state = getState()
if (isUndefined(state.clients)) state.clients = []
const client = await apis.recordApi.load(k)
state.clients.push(client)
return `key: ${k} , add1: ${client.Address1} , count: ${state.clients.length}`
}
const listClients = (apis, getState) => async () => {
const clients = await apis.viewApi.listItems("/clients/default")
const state = getState()
if (state.clientKeys.length !== clients.length) {
throw new Error(
"list CLients, expected " +
state.clientKeys.length.toString() +
" clients, actual " +
clients.length.toString()
)
}
}
const deleteClient = (apis, getState) => async k => {
await apis.recordApi.delete(k)
const state = getState()
state.clientKeys = state.clientKeys.filter(key => key !== k)
}
export default apis => {
const state = {}
const getState = () => state
const noOfRecords = 10000
const recordsPerIteration = 10
const noOfIterations = noOfRecords / recordsPerIteration
const actionsInOneIteration = () => [
action(
"Create client",
createClient(apis, getState),
iterateActionTimes(recordsPerIteration)
),
/*action("Get client", getClient(apis, getState),
iterateCollection(() => takeRight(getState().clientKeys, recordsPerIteration))),*/
action("List Clients", listClients(apis, getState)),
]
let actions = []
for (let index = 0; index < noOfIterations; index++) {
actions = union(actions, actionsInOneIteration())
}
/*
for (let index = 0; index < noOfIterations; index++) {
actions.push(
action("Delete Clients", deleteClient(apis, getState),
iterateCollection(() => takeRight(getState().clientKeys, recordsPerIteration))),
action("List Clients", listClients(apis, getState))
);
}*/
let actionIndex = 0
return () => {
if (actionIndex == actions.length) {
return { done: true }
}
const result = { action: actions[actionIndex], done: false }
actionIndex++
return result
}
}