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