aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts')
-rw-r--r--packages/contracts/test/exchange/transactions.ts42
1 files changed, 38 insertions, 4 deletions
diff --git a/packages/contracts/test/exchange/transactions.ts b/packages/contracts/test/exchange/transactions.ts
index 697fb70e2..62bba0ab8 100644
--- a/packages/contracts/test/exchange/transactions.ts
+++ b/packages/contracts/test/exchange/transactions.ts
@@ -51,7 +51,8 @@ describe('Exchange transactions', () => {
let signedOrder: SignedOrder;
let order: OrderStruct;
let orderFactory: OrderFactory;
- let transactionFactory: TransactionFactory;
+ let makerTransactionFactory: TransactionFactory;
+ let takerTransactionFactory: TransactionFactory;
let exchangeWrapper: ExchangeWrapper;
let erc20Wrapper: ERC20Wrapper;
@@ -98,7 +99,8 @@ describe('Exchange transactions', () => {
const makerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)];
const takerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(takerAddress)];
orderFactory = new OrderFactory(makerPrivateKey, defaultOrderParams);
- transactionFactory = new TransactionFactory(takerPrivateKey, exchange.address);
+ makerTransactionFactory = new TransactionFactory(makerPrivateKey, exchange.address);
+ takerTransactionFactory = new TransactionFactory(takerPrivateKey, exchange.address);
});
beforeEach(async () => {
await blockchainLifecycle.startAsync();
@@ -115,6 +117,19 @@ describe('Exchange transactions', () => {
order = orderUtils.getOrderStruct(signedOrder);
});
+ it('should throw if not called by specified sender', async () => {
+ const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
+ const data = exchange.fillOrder.getABIEncodedTransactionData(
+ order,
+ takerAssetFillAmount,
+ signedOrder.signature,
+ );
+ const signedTx = takerTransactionFactory.newSignedTransaction(data);
+ return expect(exchangeWrapper.executeTransactionAsync(signedTx, takerAddress)).to.be.rejectedWith(
+ constants.REVERT,
+ );
+ });
+
it('should transfer the correct amounts when signed by taker and called by sender', async () => {
const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
const data = exchange.fillOrder.getABIEncodedTransactionData(
@@ -122,8 +137,8 @@ describe('Exchange transactions', () => {
takerAssetFillAmount,
signedOrder.signature,
);
- const signedTx = transactionFactory.newSignedTransaction(data);
- const res = await exchangeWrapper.executeTransactionAsync(signedTx, senderAddress);
+ const signedTx = takerTransactionFactory.newSignedTransaction(data);
+ await exchangeWrapper.executeTransactionAsync(signedTx, senderAddress);
const newBalances = await erc20Wrapper.getBalancesAsync();
const makerAssetFillAmount = takerAssetFillAmount
.times(signedOrder.makerAssetAmount)
@@ -157,5 +172,24 @@ describe('Exchange transactions', () => {
);
});
});
+
+ describe('cancelOrder', () => {
+ it('should throw if not called by specified sender', async () => {
+ const data = exchange.cancelOrder.getABIEncodedTransactionData(order);
+ const signedTx = makerTransactionFactory.newSignedTransaction(data);
+ return expect(exchangeWrapper.executeTransactionAsync(signedTx, makerAddress)).to.be.rejectedWith(
+ constants.REVERT,
+ );
+ });
+
+ it('should cancel the order when signed by maker and called by sender', async () => {
+ const data = exchange.cancelOrder.getABIEncodedTransactionData(order);
+ const signedTx = makerTransactionFactory.newSignedTransaction(data);
+ await exchangeWrapper.executeTransactionAsync(signedTx, senderAddress);
+ const res = await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
+ const newBalances = await erc20Wrapper.getBalancesAsync();
+ expect(newBalances).to.deep.equal(erc20Balances);
+ });
+ });
});
});