import { Order, OrderRelevantState, SignedOrder } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; import * as _ from 'lodash'; import { constants, orderFactory } from '../../src'; const BASE_TEST_ORDER: Order = orderFactory.createOrder( constants.NULL_ADDRESS, constants.NULL_ADDRESS, constants.NULL_ADDRESS, constants.ZERO_AMOUNT, constants.ZERO_AMOUNT, constants.ZERO_AMOUNT, constants.NULL_BYTES, constants.ZERO_AMOUNT, constants.NULL_BYTES, constants.NULL_ADDRESS, constants.NULL_ADDRESS, ); const BASE_TEST_SIGNED_ORDER: SignedOrder = { ...BASE_TEST_ORDER, signature: constants.NULL_BYTES, }; const BASE_TEST_ORDER_RELEVANT_STATE: OrderRelevantState = { makerBalance: constants.ZERO_AMOUNT, makerProxyAllowance: constants.ZERO_AMOUNT, makerFeeBalance: constants.ZERO_AMOUNT, makerFeeProxyAllowance: constants.ZERO_AMOUNT, filledTakerAssetAmount: constants.ZERO_AMOUNT, remainingFillableMakerAssetAmount: constants.ZERO_AMOUNT, remainingFillableTakerAssetAmount: constants.ZERO_AMOUNT, }; export const testOrderFactory = { generateTestSignedOrder(partialOrder: Partial): SignedOrder { return transformObject(BASE_TEST_SIGNED_ORDER, partialOrder); }, generateTestSignedOrders(partialOrder: Partial, numOrders: number): SignedOrder[] { const baseTestOrders = generateArrayOfInput(BASE_TEST_SIGNED_ORDER, numOrders); return transformObjects(baseTestOrders, partialOrder); }, generateTestOrderRelevantState(partialOrderRelevantState: Partial): OrderRelevantState { return transformObject(BASE_TEST_ORDER_RELEVANT_STATE, partialOrderRelevantState); }, generateTestOrderRelevantStates( partialOrderRelevantState: Partial, numOrderStates: number, ): OrderRelevantState[] { const baseTestOrderStates = generateArrayOfInput(BASE_TEST_ORDER_RELEVANT_STATE, numOrderStates); return transformObjects(baseTestOrderStates, partialOrderRelevantState); }, }; function generateArrayOfInput(input: T, rangeLength: number): T[] { return _.map(_.range(rangeLength), () => input); } function transformObject(input: T, transformation: Partial): T { const copy = _.cloneDeep(input); return _.assign(copy, transformation); } function transformObjects(inputs: T[], transformation: Partial): T[] { return _.map(inputs, input => transformObject(input, transformation)); }