60 lines
2.6 KiB
TypeScript
60 lines
2.6 KiB
TypeScript
import { orderFactory } from '@0x/order-utils/lib/src/order_factory';
|
|
import * as chai from 'chai';
|
|
import * as _ from 'lodash';
|
|
import 'mocha';
|
|
|
|
import { calldataOptimizationUtils } from '../src/utils/calldata_optimization_utils';
|
|
import { constants } from '../src/utils/constants';
|
|
|
|
import { chaiSetup } from './utils/chai_setup';
|
|
|
|
chaiSetup.configure();
|
|
const expect = chai.expect;
|
|
|
|
// utility for generating a set of order objects with mostly NULL values
|
|
// except for a specified makerAssetData and takerAssetData
|
|
const FAKE_ORDERS_COUNT = 5;
|
|
const generateFakeOrders = (makerAssetData: string, takerAssetData: string) =>
|
|
_.map(_.range(FAKE_ORDERS_COUNT), index => {
|
|
const order = orderFactory.createOrder(
|
|
constants.NULL_ADDRESS,
|
|
constants.ZERO_AMOUNT,
|
|
makerAssetData,
|
|
constants.ZERO_AMOUNT,
|
|
takerAssetData,
|
|
constants.NULL_ADDRESS,
|
|
);
|
|
return {
|
|
...order,
|
|
signature: 'dummy signature',
|
|
};
|
|
});
|
|
|
|
describe('calldataOptimizationUtils', () => {
|
|
const fakeMakerAssetData = 'fakeMakerAssetData';
|
|
const fakeTakerAssetData = 'fakeTakerAssetData';
|
|
const orders = generateFakeOrders(fakeMakerAssetData, fakeTakerAssetData);
|
|
describe('#optimizeForwarderOrders', () => {
|
|
it('should make makerAssetData `0x` unless first order', () => {
|
|
const optimizedOrders = calldataOptimizationUtils.optimizeForwarderOrders(orders);
|
|
expect(optimizedOrders[0].makerAssetData).to.equal(fakeMakerAssetData);
|
|
const ordersWithoutHead = _.slice(optimizedOrders, 1);
|
|
_.forEach(ordersWithoutHead, order => expect(order.makerAssetData).to.equal(constants.NULL_BYTES));
|
|
});
|
|
it('should make all takerAssetData `0x`', () => {
|
|
const optimizedOrders = calldataOptimizationUtils.optimizeForwarderOrders(orders);
|
|
_.forEach(optimizedOrders, order => expect(order.takerAssetData).to.equal(constants.NULL_BYTES));
|
|
});
|
|
});
|
|
describe('#optimizeForwarderFeeOrders', () => {
|
|
it('should make all makerAssetData `0x`', () => {
|
|
const optimizedOrders = calldataOptimizationUtils.optimizeForwarderFeeOrders(orders);
|
|
_.forEach(optimizedOrders, order => expect(order.makerAssetData).to.equal(constants.NULL_BYTES));
|
|
});
|
|
it('should make all takerAssetData `0x`', () => {
|
|
const optimizedOrders = calldataOptimizationUtils.optimizeForwarderFeeOrders(orders);
|
|
_.forEach(optimizedOrders, order => expect(order.takerAssetData).to.equal(constants.NULL_BYTES));
|
|
});
|
|
});
|
|
});
|