From de0e436aad5d6b1c8a9425f075dbc3074b2fe31f Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 26 Jun 2017 19:33:49 -0700 Subject: Allow multiple exchange versions t be functional at the same time --- test/0x.js_test.ts | 18 +++++--- test/artifacts_test.ts | 8 +++- test/exchange_wrapper_test.ts | 98 ++++++++++++++++++++++++++++++------------- test/utils/fill_scenarios.ts | 7 +++- test/utils/order_factory.ts | 2 + 5 files changed, 95 insertions(+), 38 deletions(-) (limited to 'test') diff --git a/test/0x.js_test.ts b/test/0x.js_test.ts index 9ec0a0c8e..3ddb5db1d 100644 --- a/test/0x.js_test.ts +++ b/test/0x.js_test.ts @@ -16,10 +16,11 @@ describe('ZeroEx library', () => { it('overrides provider in nested web3s and invalidates contractInstances', async () => { const web3 = web3Factory.create(); const zeroEx = new ZeroEx(web3.currentProvider); + const [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressedAsync(); // Instantiate the contract instances with the current provider - await (zeroEx.exchange as any)._getExchangeContractAsync(); + await (zeroEx.exchange as any)._getExchangeContractAsync(exchangeContractAddress); await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync(); - expect((zeroEx.exchange as any)._exchangeContractIfExists).to.not.be.undefined(); + expect((zeroEx.exchange as any)._exchangeContractByAddress[exchangeContractAddress]).to.not.be.undefined(); expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.not.be.undefined(); const newProvider = web3Factory.getRpcProvider(); @@ -28,7 +29,7 @@ describe('ZeroEx library', () => { await zeroEx.setProviderAsync(newProvider); // Check that contractInstances with old provider are removed after provider update - expect((zeroEx.exchange as any)._exchangeContractIfExists).to.be.undefined(); + expect((zeroEx.exchange as any)._exchangeContractByAddress[exchangeContractAddress]).to.be.undefined(); expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.be.undefined(); // Check that all nested web3 instances return the updated provider @@ -52,6 +53,10 @@ describe('ZeroEx library', () => { const address = '0x5409ed021d9299bf6814279a6a1411a7e866a631'; const web3 = web3Factory.create(); const zeroEx = new ZeroEx(web3.currentProvider); + let exchangeContractAddress: string; + before(async () => { + [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressedAsync(); + }); it('should return false if the data doesn\'t pertain to the signature & address', async () => { expect(ZeroEx.isValidSignature('0x0', signature, address)).to.be.false(); return expect( @@ -77,7 +82,7 @@ describe('ZeroEx library', () => { const isValidSignatureLocal = ZeroEx.isValidSignature(dataHex, signature, address); expect(isValidSignatureLocal).to.be.true(); const isValidSignatureOnContract = await (zeroEx.exchange as any) - ._isValidSignatureUsingContractCallAsync(dataHex, signature, address); + ._isValidSignatureUsingContractCallAsync(dataHex, signature, address, exchangeContractAddress); return expect(isValidSignatureOnContract).to.be.true(); }); }); @@ -126,14 +131,15 @@ describe('ZeroEx library', () => { }); }); describe('#getOrderHashHexAsync', () => { - const exchangeContractAddress = constants.NULL_ADDRESS; - const expectedOrderHash = '0x103a5e97dab5dbeb8f385636f86a7d1e458a7ccbe1bd194727f0b2f85ab116c7'; + const expectedOrderHash = '0x39da987067a3c9e5f1617694f1301326ba8c8b0498ebef5df4863bed394e3c83'; + const exchangeContractAddress = '0xb69e673309512a9d726f87304c6984054f87a93b'; const order: Order = { maker: constants.NULL_ADDRESS, taker: constants.NULL_ADDRESS, feeRecipient: constants.NULL_ADDRESS, makerTokenAddress: constants.NULL_ADDRESS, takerTokenAddress: constants.NULL_ADDRESS, + exchangeContractAddress, salt: new BigNumber(0), makerFee: new BigNumber(0), takerFee: new BigNumber(0), diff --git a/test/artifacts_test.ts b/test/artifacts_test.ts index d71b45567..8bc110b21 100644 --- a/test/artifacts_test.ts +++ b/test/artifacts_test.ts @@ -1,9 +1,14 @@ import * as fs from 'fs'; +import * as chai from 'chai'; +import {chaiSetup} from './utils/chai_setup'; import HDWalletProvider = require('truffle-hdwallet-provider'); import {ZeroEx} from '../src'; import {web3Factory} from './utils/web3_factory'; import {constants} from './utils/constants'; +chaiSetup.configure(); +const expect = chai.expect; + // Those tests are slower cause they're talking to a remote node const TIMEOUT = 10000; @@ -22,7 +27,8 @@ describe('Artifacts', () => { await (zeroEx.token as any)._getProxyAddressAsync(); }).timeout(TIMEOUT); it('exchange contract is deployed', async () => { - await (zeroEx.exchange as any)._getExchangeContractAsync(); + const exchangeContractAddresses = await zeroEx.exchange.getAvailableContractAddressedAsync(); + expect(exchangeContractAddresses).to.have.lengthOf.above(0); }).timeout(TIMEOUT); }); }); diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index 211c2819c..168d20e97 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -1,4 +1,5 @@ import 'mocha'; +import * as _ from 'lodash'; import * as chai from 'chai'; import * as Web3 from 'web3'; import * as BigNumber from 'bignumber.js'; @@ -37,14 +38,16 @@ describe('ExchangeWrapper', () => { let userAddresses: string[]; let zrxTokenAddress: string; let fillScenarios: FillScenarios; + let exchangeContractAddress: string; before(async () => { web3 = web3Factory.create(); zeroEx = new ZeroEx(web3.currentProvider); + [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressedAsync(); userAddresses = await promisify(web3.eth.getAccounts)(); tokens = await zeroEx.tokenRegistry.getTokensAsync(); tokenUtils = new TokenUtils(tokens); zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address; - fillScenarios = new FillScenarios(zeroEx, userAddresses, tokens, zrxTokenAddress); + fillScenarios = new FillScenarios(zeroEx, userAddresses, tokens, zrxTokenAddress, exchangeContractAddress); }); beforeEach(async () => { await blockchainLifecycle.startAsync(); @@ -413,8 +416,12 @@ describe('ExchangeWrapper', () => { }); it('should successfully fill multiple orders', async () => { await zeroEx.exchange.batchFillOrderAsync(orderFillBatch, shouldCheckTransfer, takerAddress); - const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex); - const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex); + const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync( + signedOrderHashHex, exchangeContractAddress, + ); + const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync( + anotherOrderHashHex, exchangeContractAddress, + ); expect(filledAmount).to.be.bignumber.equal(fillTakerAmount); expect(anotherFilledAmount).to.be.bignumber.equal(fillTakerAmount); }); @@ -446,8 +453,12 @@ describe('ExchangeWrapper', () => { await zeroEx.exchange.fillOrdersUpToAsync( signedOrders, fillUpToAmount, shouldCheckTransfer, takerAddress, ); - const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex); - const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex); + const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync( + signedOrderHashHex, exchangeContractAddress, + ); + const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync( + anotherOrderHashHex, exchangeContractAddress, + ); expect(filledAmount).to.be.bignumber.equal(fillableAmount); const remainingFillAmount = fillableAmount.minus(1); expect(anotherFilledAmount).to.be.bignumber.equal(remainingFillAmount); @@ -507,7 +518,9 @@ describe('ExchangeWrapper', () => { describe('successful cancels', () => { it('should cancel an order', async () => { await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmount); - const cancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync(orderHashHex); + const cancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync( + orderHashHex, exchangeContractAddress, + ); expect(cancelledAmount).to.be.bignumber.equal(cancelAmount); }); it('should return cancelled amount', async () => { @@ -553,9 +566,12 @@ describe('ExchangeWrapper', () => { describe('successful batch cancels', () => { it('should cancel a batch of orders', async () => { await zeroEx.exchange.batchCancelOrderAsync(cancelBatch); - const cancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync(orderHashHex); + const cancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync( + orderHashHex, exchangeContractAddress, + ); const anotherCancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync( - anotherOrderHashHex); + anotherOrderHashHex, exchangeContractAddress, + ); expect(cancelledAmount).to.be.bignumber.equal(cancelAmount); expect(anotherCancelledAmount).to.be.bignumber.equal(cancelAmount); }); @@ -587,48 +603,68 @@ describe('ExchangeWrapper', () => { describe('#getUnavailableTakerAmountAsync', () => { it ('should throw if passed an invalid orderHash', async () => { const invalidOrderHashHex = '0x123'; - return expect(zeroEx.exchange.getUnavailableTakerAmountAsync(invalidOrderHashHex)).to.be.rejected(); + return expect(zeroEx.exchange.getUnavailableTakerAmountAsync( + invalidOrderHashHex, exchangeContractAddress, + )).to.be.rejected(); }); it ('should return zero if passed a valid but non-existent orderHash', async () => { - const unavailableValueT = await zeroEx.exchange.getUnavailableTakerAmountAsync(NON_EXISTENT_ORDER_HASH); + const unavailableValueT = await zeroEx.exchange.getUnavailableTakerAmountAsync( + NON_EXISTENT_ORDER_HASH, exchangeContractAddress, + ); expect(unavailableValueT).to.be.bignumber.equal(0); }); it ('should return the unavailableValueT for a valid and partially filled orderHash', async () => { - const unavailableValueT = await zeroEx.exchange.getUnavailableTakerAmountAsync(orderHash); + const unavailableValueT = await zeroEx.exchange.getUnavailableTakerAmountAsync( + orderHash, exchangeContractAddress, + ); expect(unavailableValueT).to.be.bignumber.equal(partialFillAmount); }); }); describe('#getFilledTakerAmountAsync', () => { it ('should throw if passed an invalid orderHash', async () => { const invalidOrderHashHex = '0x123'; - return expect(zeroEx.exchange.getFilledTakerAmountAsync(invalidOrderHashHex)).to.be.rejected(); + return expect(zeroEx.exchange.getFilledTakerAmountAsync( + invalidOrderHashHex, exchangeContractAddress, + )).to.be.rejected(); }); it ('should return zero if passed a valid but non-existent orderHash', async () => { - const filledValueT = await zeroEx.exchange.getFilledTakerAmountAsync(NON_EXISTENT_ORDER_HASH); + const filledValueT = await zeroEx.exchange.getFilledTakerAmountAsync( + NON_EXISTENT_ORDER_HASH, exchangeContractAddress, + ); expect(filledValueT).to.be.bignumber.equal(0); }); it ('should return the filledValueT for a valid and partially filled orderHash', async () => { - const filledValueT = await zeroEx.exchange.getFilledTakerAmountAsync(orderHash); + const filledValueT = await zeroEx.exchange.getFilledTakerAmountAsync( + orderHash, exchangeContractAddress, + ); expect(filledValueT).to.be.bignumber.equal(partialFillAmount); }); }); describe('#getCanceledTakerAmountAsync', () => { it ('should throw if passed an invalid orderHash', async () => { const invalidOrderHashHex = '0x123'; - return expect(zeroEx.exchange.getCanceledTakerAmountAsync(invalidOrderHashHex)).to.be.rejected(); + return expect(zeroEx.exchange.getCanceledTakerAmountAsync( + invalidOrderHashHex, exchangeContractAddress, + )).to.be.rejected(); }); it ('should return zero if passed a valid but non-existent orderHash', async () => { - const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync(NON_EXISTENT_ORDER_HASH); + const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync( + NON_EXISTENT_ORDER_HASH, exchangeContractAddress, + ); expect(cancelledValueT).to.be.bignumber.equal(0); }); it ('should return the cancelledValueT for a valid and partially filled orderHash', async () => { - const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync(orderHash); + const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync( + orderHash, exchangeContractAddress, + ); expect(cancelledValueT).to.be.bignumber.equal(0); }); it ('should return the cancelledValueT for a valid and cancelled orderHash', async () => { const cancelAmount = fillableAmount.minus(partialFillAmount); await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmount); - const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync(orderHash); + const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync( + orderHash, exchangeContractAddress, + ); expect(cancelledValueT).to.be.bignumber.equal(cancelAmount); }); }); @@ -669,8 +705,9 @@ describe('ExchangeWrapper', () => { fromBlock: 0, toBlock: 'latest', }; - const zeroExEvent = await zeroEx.exchange.subscribeAsync(ExchangeEvents.LogFill, subscriptionOpts, - indexFilterValues); + const zeroExEvent = await zeroEx.exchange.subscribeAsync( + ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, exchangeContractAddress, + ); zeroExEvent.watch((err: Error, event: ContractEvent) => { expect(err).to.be.null(); expect(event).to.not.be.undefined(); @@ -688,8 +725,9 @@ describe('ExchangeWrapper', () => { fromBlock: 0, toBlock: 'latest', }; - const zeroExEvent = await zeroEx.exchange.subscribeAsync(ExchangeEvents.LogCancel, subscriptionOpts, - indexFilterValues); + const zeroExEvent = await zeroEx.exchange.subscribeAsync( + ExchangeEvents.LogCancel, subscriptionOpts, indexFilterValues, exchangeContractAddress, + ); zeroExEvent.watch((err: Error, event: ContractEvent) => { expect(err).to.be.null(); expect(event).to.not.be.undefined(); @@ -706,7 +744,7 @@ describe('ExchangeWrapper', () => { toBlock: 'latest', }; const eventSubscriptionToBeCancelled = await zeroEx.exchange.subscribeAsync( - ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, + ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, exchangeContractAddress, ); eventSubscriptionToBeCancelled.watch((err: Error, event: ContractEvent) => { done(new Error('Expected this subscription to have been cancelled')); @@ -716,7 +754,7 @@ describe('ExchangeWrapper', () => { await zeroEx.setProviderAsync(newProvider); const eventSubscriptionToStay = await zeroEx.exchange.subscribeAsync( - ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, + ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, exchangeContractAddress, ); eventSubscriptionToStay.watch((err: Error, event: ContractEvent) => { expect(err).to.be.null(); @@ -737,7 +775,7 @@ describe('ExchangeWrapper', () => { toBlock: 'latest', }; const eventSubscriptionToBeStopped = await zeroEx.exchange.subscribeAsync( - ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, + ExchangeEvents.LogFill, subscriptionOpts, indexFilterValues, exchangeContractAddress, ); eventSubscriptionToBeStopped.watch((err: Error, event: ContractEvent) => { done(new Error('Expected this subscription to have been stopped')); @@ -773,10 +811,12 @@ describe('ExchangeWrapper', () => { expect(orderHash).to.equal(orderHashFromContract); }); }); - describe('#getContractAddressAsync', () => { - it('returns the exchange contract address', async () => { - const exchangeAddress = await zeroEx.exchange.getContractAddressAsync(); - assert.isETHAddressHex('exchangeAddress', exchangeAddress); + describe('#getAvailableContractAddressedAsync', () => { + it('returns the exchange contract addresses', async () => { + const exchangeAddresses = await zeroEx.exchange.getAvailableContractAddressedAsync(); + _.map(exchangeAddresses, exchangeAddress => { + assert.isETHAddressHex('exchangeAddress', exchangeAddress); + }); }); }); }); diff --git a/test/utils/fill_scenarios.ts b/test/utils/fill_scenarios.ts index b8ad7eb12..65a912955 100644 --- a/test/utils/fill_scenarios.ts +++ b/test/utils/fill_scenarios.ts @@ -9,12 +9,15 @@ export class FillScenarios { private tokens: Token[]; private coinbase: string; private zrxTokenAddress: string; - constructor(zeroEx: ZeroEx, userAddresses: string[], tokens: Token[], zrxTokenAddress: string) { + private exchangeContractAddress: string; + constructor(zeroEx: ZeroEx, userAddresses: string[], + tokens: Token[], zrxTokenAddress: string, exchangeContractAddress: string) { this.zeroEx = zeroEx; this.userAddresses = userAddresses; this.tokens = tokens; this.coinbase = userAddresses[0]; this.zrxTokenAddress = zrxTokenAddress; + this.exchangeContractAddress = exchangeContractAddress; } public async createFillableSignedOrderAsync(makerTokenAddress: string, takerTokenAddress: string, makerAddress: string, takerAddress: string, @@ -103,7 +106,7 @@ export class FillScenarios { const signedOrder = await orderFactory.createSignedOrderAsync(this.zeroEx, makerAddress, takerAddress, makerFee, takerFee, makerFillableAmount, makerTokenAddress, takerFillableAmount, takerTokenAddress, - feeRecepient, expirationUnixTimestampSec); + this.exchangeContractAddress, feeRecepient, expirationUnixTimestampSec); return signedOrder; } } diff --git a/test/utils/order_factory.ts b/test/utils/order_factory.ts index ef19f2c4c..0ac430dfe 100644 --- a/test/utils/order_factory.ts +++ b/test/utils/order_factory.ts @@ -13,6 +13,7 @@ export const orderFactory = { makerTokenAddress: string, takerTokenAmount: BigNumber.BigNumber, takerTokenAddress: string, + exchangeContractAddress: string, feeRecipient: string, expirationUnixTimestampSec?: BigNumber.BigNumber): Promise { const defaultExpirationUnixTimestampSec = new BigNumber(2524604400); // Close to infinite @@ -29,6 +30,7 @@ export const orderFactory = { makerTokenAddress, takerTokenAddress, salt: ZeroEx.generatePseudoRandomSalt(), + exchangeContractAddress, feeRecipient, expirationUnixTimestampSec, }; -- cgit v1.2.3 From e9db5327278c8015f8e091ae8de6e6cf95caa126 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 10:34:49 -0700 Subject: Make getOrderHashHex a non-async function --- test/0x.js_test.ts | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'test') diff --git a/test/0x.js_test.ts b/test/0x.js_test.ts index 3ddb5db1d..f4d13886b 100644 --- a/test/0x.js_test.ts +++ b/test/0x.js_test.ts @@ -130,7 +130,7 @@ describe('ZeroEx library', () => { expect(baseUnitAmount).to.be.bignumber.equal(expectedUnitAmount); }); }); - describe('#getOrderHashHexAsync', () => { + describe('#getOrderHashHex', () => { const expectedOrderHash = '0x39da987067a3c9e5f1617694f1301326ba8c8b0498ebef5df4863bed394e3c83'; const exchangeContractAddress = '0xb69e673309512a9d726f87304c6984054f87a93b'; const order: Order = { @@ -147,22 +147,11 @@ describe('ZeroEx library', () => { takerTokenAmount: new BigNumber(0), expirationUnixTimestampSec: new BigNumber(0), }; - let stubs: Sinon.SinonStub[] = []; - afterEach(() => { - // clean up any stubs after the test has completed - _.each(stubs, s => s.restore()); - stubs = []; - }); it('calculates the order hash', async () => { const web3 = web3Factory.create(); const zeroEx = new ZeroEx(web3.currentProvider); - stubs = [ - Sinon.stub((zeroEx as any), '_getExchangeAddressAsync') - .returns(Promise.resolve(exchangeContractAddress)), - ]; - - const orderHash = await zeroEx.getOrderHashHexAsync(order); + const orderHash = zeroEx.getOrderHashHex(order); expect(orderHash).to.be.equal(expectedOrderHash); }); }); -- cgit v1.2.3 From 91e2857645d790e0c847414b3676eef59aa59b9c Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 10:53:11 -0700 Subject: Fix a typo in a name --- test/0x.js_test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/0x.js_test.ts b/test/0x.js_test.ts index f4d13886b..7e350c8f4 100644 --- a/test/0x.js_test.ts +++ b/test/0x.js_test.ts @@ -16,7 +16,7 @@ describe('ZeroEx library', () => { it('overrides provider in nested web3s and invalidates contractInstances', async () => { const web3 = web3Factory.create(); const zeroEx = new ZeroEx(web3.currentProvider); - const [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressedAsync(); + const [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressesAsync(); // Instantiate the contract instances with the current provider await (zeroEx.exchange as any)._getExchangeContractAsync(exchangeContractAddress); await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync(); @@ -55,7 +55,7 @@ describe('ZeroEx library', () => { const zeroEx = new ZeroEx(web3.currentProvider); let exchangeContractAddress: string; before(async () => { - [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressedAsync(); + [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressesAsync(); }); it('should return false if the data doesn\'t pertain to the signature & address', async () => { expect(ZeroEx.isValidSignature('0x0', signature, address)).to.be.false(); -- cgit v1.2.3 From 83bc740911b522078481382bc1657e127994e8fa Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 11:25:58 -0700 Subject: Make it clear that we are using a fake address in tests --- test/0x.js_test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/0x.js_test.ts b/test/0x.js_test.ts index 7e350c8f4..50db402c4 100644 --- a/test/0x.js_test.ts +++ b/test/0x.js_test.ts @@ -132,14 +132,14 @@ describe('ZeroEx library', () => { }); describe('#getOrderHashHex', () => { const expectedOrderHash = '0x39da987067a3c9e5f1617694f1301326ba8c8b0498ebef5df4863bed394e3c83'; - const exchangeContractAddress = '0xb69e673309512a9d726f87304c6984054f87a93b'; + const fakeExchangeContractAddress = '0xb69e673309512a9d726f87304c6984054f87a93b'; const order: Order = { maker: constants.NULL_ADDRESS, taker: constants.NULL_ADDRESS, feeRecipient: constants.NULL_ADDRESS, makerTokenAddress: constants.NULL_ADDRESS, takerTokenAddress: constants.NULL_ADDRESS, - exchangeContractAddress, + exchangeContractAddress: fakeExchangeContractAddress, salt: new BigNumber(0), makerFee: new BigNumber(0), takerFee: new BigNumber(0), -- cgit v1.2.3 From e1e79519b9430427dd6cbe2bfa9ced246ff14fbc Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 12:54:03 -0700 Subject: Fix typo in getAvailableContractAddressesAsync --- test/artifacts_test.ts | 2 +- test/exchange_wrapper_test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/artifacts_test.ts b/test/artifacts_test.ts index 8bc110b21..22d55a2ee 100644 --- a/test/artifacts_test.ts +++ b/test/artifacts_test.ts @@ -27,7 +27,7 @@ describe('Artifacts', () => { await (zeroEx.token as any)._getProxyAddressAsync(); }).timeout(TIMEOUT); it('exchange contract is deployed', async () => { - const exchangeContractAddresses = await zeroEx.exchange.getAvailableContractAddressedAsync(); + const exchangeContractAddresses = await zeroEx.exchange.getAvailableContractAddressesAsync(); expect(exchangeContractAddresses).to.have.lengthOf.above(0); }).timeout(TIMEOUT); }); diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index 168d20e97..6c81bcb49 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -42,7 +42,7 @@ describe('ExchangeWrapper', () => { before(async () => { web3 = web3Factory.create(); zeroEx = new ZeroEx(web3.currentProvider); - [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressedAsync(); + [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressesAsync(); userAddresses = await promisify(web3.eth.getAccounts)(); tokens = await zeroEx.tokenRegistry.getTokensAsync(); tokenUtils = new TokenUtils(tokens); @@ -813,7 +813,7 @@ describe('ExchangeWrapper', () => { }); describe('#getAvailableContractAddressedAsync', () => { it('returns the exchange contract addresses', async () => { - const exchangeAddresses = await zeroEx.exchange.getAvailableContractAddressedAsync(); + const exchangeAddresses = await zeroEx.exchange.getAvailableContractAddressesAsync(); _.map(exchangeAddresses, exchangeAddress => { assert.isETHAddressHex('exchangeAddress', exchangeAddress); }); -- cgit v1.2.3 From fa3963199eb875fdd6a70235cee263c39c317baa Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 12:54:41 -0700 Subject: Make zeroEx.getOrderHashHex non-async --- test/exchange_wrapper_test.ts | 18 +++++++++--------- test/utils/order_factory.ts | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'test') diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index 6c81bcb49..cf828bd8d 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -394,11 +394,11 @@ describe('ExchangeWrapper', () => { signedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - signedOrderHashHex = await zeroEx.getOrderHashHexAsync(signedOrder); + signedOrderHashHex = zeroEx.getOrderHashHex(signedOrder); anotherSignedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - anotherOrderHashHex = await zeroEx.getOrderHashHexAsync(anotherSignedOrder); + anotherOrderHashHex = zeroEx.getOrderHashHex(anotherSignedOrder); orderFillBatch = [ { signedOrder, @@ -438,11 +438,11 @@ describe('ExchangeWrapper', () => { signedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - signedOrderHashHex = await zeroEx.getOrderHashHexAsync(signedOrder); + signedOrderHashHex = zeroEx.getOrderHashHex(signedOrder); anotherSignedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - anotherOrderHashHex = await zeroEx.getOrderHashHexAsync(anotherSignedOrder); + anotherOrderHashHex = zeroEx.getOrderHashHex(anotherSignedOrder); signedOrders = [signedOrder, anotherSignedOrder]; }); describe('successful batch fills', () => { @@ -490,7 +490,7 @@ describe('ExchangeWrapper', () => { signedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - orderHashHex = await zeroEx.getOrderHashHexAsync(signedOrder); + orderHashHex = zeroEx.getOrderHashHex(signedOrder); }); describe('#cancelOrderAsync', () => { describe('failed cancels', () => { @@ -505,7 +505,7 @@ describe('ExchangeWrapper', () => { makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, expirationInPast, ); - orderHashHex = await zeroEx.getOrderHashHexAsync(expiredSignedOrder); + orderHashHex = zeroEx.getOrderHashHex(expiredSignedOrder); return expect(zeroEx.exchange.cancelOrderAsync(expiredSignedOrder, cancelAmount)) .to.be.rejectedWith(ExchangeContractErrs.ORDER_CANCEL_EXPIRED); }); @@ -537,7 +537,7 @@ describe('ExchangeWrapper', () => { anotherSignedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - anotherOrderHashHex = await zeroEx.getOrderHashHexAsync(anotherSignedOrder); + anotherOrderHashHex = zeroEx.getOrderHashHex(anotherSignedOrder); cancelBatch = [ { order: signedOrder, @@ -598,7 +598,7 @@ describe('ExchangeWrapper', () => { signedOrder = await fillScenarios.createPartiallyFilledSignedOrderAsync( makerTokenAddress, takerTokenAddress, takerAddress, fillableAmount, partialFillAmount, ); - orderHash = await zeroEx.getOrderHashHexAsync(signedOrder); + orderHash = zeroEx.getOrderHashHex(signedOrder); }); describe('#getUnavailableTakerAmountAsync', () => { it ('should throw if passed an invalid orderHash', async () => { @@ -805,7 +805,7 @@ describe('ExchangeWrapper', () => { const signedOrder = await fillScenarios.createFillableSignedOrderAsync( makerTokenAddress, takerTokenAddress, makerAddress, takerAddress, fillableAmount, ); - const orderHash = await zeroEx.getOrderHashHexAsync(signedOrder); + const orderHash = zeroEx.getOrderHashHex(signedOrder); const orderHashFromContract = await (zeroEx.exchange as any) ._getOrderHashHexUsingContractCallAsync(signedOrder); expect(orderHash).to.equal(orderHashFromContract); diff --git a/test/utils/order_factory.ts b/test/utils/order_factory.ts index 0ac430dfe..22bf44c0f 100644 --- a/test/utils/order_factory.ts +++ b/test/utils/order_factory.ts @@ -34,7 +34,7 @@ export const orderFactory = { feeRecipient, expirationUnixTimestampSec, }; - const orderHash = await zeroEx.getOrderHashHexAsync(order); + const orderHash = zeroEx.getOrderHashHex(order); const ecSignature = await zeroEx.signOrderHashAsync(orderHash, maker); const signedOrder: SignedOrder = _.assign(order, {ecSignature}); return signedOrder; -- cgit v1.2.3 From 7ca113b59bc5a755f878825353e2d66b2b51324b Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 13:11:50 -0700 Subject: Add a test for a ProxyWrapper --- test/proxy_wrapper_test.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/proxy_wrapper_test.ts (limited to 'test') diff --git a/test/proxy_wrapper_test.ts b/test/proxy_wrapper_test.ts new file mode 100644 index 000000000..98c5d1c31 --- /dev/null +++ b/test/proxy_wrapper_test.ts @@ -0,0 +1,35 @@ +import * as _ from 'lodash'; +import 'mocha'; +import * as chai from 'chai'; +import {chaiSetup} from './utils/chai_setup'; +import {web3Factory} from './utils/web3_factory'; +import {ZeroEx} from '../src'; +import {BlockchainLifecycle} from './utils/blockchain_lifecycle'; +import {SchemaValidator} from '../src/utils/schema_validator'; +import {tokenSchema} from '../src/schemas/token_schema'; +import {ProxyWrapper} from '../src/contract_wrappers/proxy_wrapper'; + +chaiSetup.configure(); +const expect = chai.expect; +const blockchainLifecycle = new BlockchainLifecycle(); + +describe('ProxyWrapper', () => { + let zeroEx: ZeroEx; + before(async () => { + const web3 = web3Factory.create(); + zeroEx = new ZeroEx(web3.currentProvider); + }); + beforeEach(async () => { + await blockchainLifecycle.startAsync(); + }); + afterEach(async () => { + await blockchainLifecycle.revertAsync(); + }); + describe('#isAuthorizedAsync', () => { + it('should return false if the address is not authorized', async () => { + const proxyWrapper = (zeroEx as any)._proxyWrapper as ProxyWrapper; + const isAuthorized = await proxyWrapper.isAuthorizedAsync(ZeroEx.NULL_ADDRESS); + expect(isAuthorized).to.be.false(); + }); + }); +}); -- cgit v1.2.3 From 1321ea5beb530ca301ff4c7408ada66c44759b12 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 13:15:20 -0700 Subject: Remove unused code from test/proxy_wrapper_test.ts --- test/proxy_wrapper_test.ts | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'test') diff --git a/test/proxy_wrapper_test.ts b/test/proxy_wrapper_test.ts index 98c5d1c31..29b5776c6 100644 --- a/test/proxy_wrapper_test.ts +++ b/test/proxy_wrapper_test.ts @@ -1,17 +1,11 @@ -import * as _ from 'lodash'; -import 'mocha'; import * as chai from 'chai'; import {chaiSetup} from './utils/chai_setup'; import {web3Factory} from './utils/web3_factory'; import {ZeroEx} from '../src'; -import {BlockchainLifecycle} from './utils/blockchain_lifecycle'; -import {SchemaValidator} from '../src/utils/schema_validator'; -import {tokenSchema} from '../src/schemas/token_schema'; import {ProxyWrapper} from '../src/contract_wrappers/proxy_wrapper'; chaiSetup.configure(); const expect = chai.expect; -const blockchainLifecycle = new BlockchainLifecycle(); describe('ProxyWrapper', () => { let zeroEx: ZeroEx; @@ -19,12 +13,6 @@ describe('ProxyWrapper', () => { const web3 = web3Factory.create(); zeroEx = new ZeroEx(web3.currentProvider); }); - beforeEach(async () => { - await blockchainLifecycle.startAsync(); - }); - afterEach(async () => { - await blockchainLifecycle.revertAsync(); - }); describe('#isAuthorizedAsync', () => { it('should return false if the address is not authorized', async () => { const proxyWrapper = (zeroEx as any)._proxyWrapper as ProxyWrapper; -- cgit v1.2.3 From 6aa37ad3e489f717ddba84118d1e6805816840d6 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 29 Jun 2017 13:41:35 -0700 Subject: Add tests for getProxyAuthorizedContractAddressesAsync --- test/exchange_wrapper_test.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'test') diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index cf828bd8d..dc68e44bd 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -23,6 +23,7 @@ import {DoneCallback} from '../src/types'; import {FillScenarios} from './utils/fill_scenarios'; import {TokenUtils} from './utils/token_utils'; import {assert} from '../src/utils/assert'; +import {ProxyWrapper} from '../src/contract_wrappers/proxy_wrapper'; chaiSetup.configure(); const expect = chai.expect; @@ -819,4 +820,15 @@ describe('ExchangeWrapper', () => { }); }); }); + describe('#getProxyAuthorizedContractAddressesAsync', () => { + it('returns the Proxy authorized exchange contract addresses', async () => { + const exchangeAddresses = await zeroEx.exchange.getProxyAuthorizedContractAddressesAsync(); + for (const exchangeAddress of exchangeAddresses) { + assert.isETHAddressHex('exchangeAddress', exchangeAddress); + const proxyWrapper = (zeroEx as any)._proxyWrapper as ProxyWrapper; + const isAuthorized = await proxyWrapper.isAuthorizedAsync(exchangeAddress); + expect(isAuthorized).to.be.true(); + } + }); + }); }); -- cgit v1.2.3 From c5a93b094584e4e5953cbe179d5cdf756f42c640 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Fri, 30 Jun 2017 14:21:58 -0700 Subject: Fix comment --- test/exchange_wrapper_test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test') diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index dc68e44bd..5136e2e88 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -812,7 +812,7 @@ describe('ExchangeWrapper', () => { expect(orderHash).to.equal(orderHashFromContract); }); }); - describe('#getAvailableContractAddressedAsync', () => { + describe('#getAvailableContractAddressesAsync', () => { it('returns the exchange contract addresses', async () => { const exchangeAddresses = await zeroEx.exchange.getAvailableContractAddressesAsync(); _.map(exchangeAddresses, exchangeAddress => { -- cgit v1.2.3 From c0d4b30828c3b525ad47f51444dee8f4e7177459 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Sat, 1 Jul 2017 08:39:57 -0700 Subject: Assert correct event names in subscribeAsync tests --- test/exchange_wrapper_test.ts | 3 +++ 1 file changed, 3 insertions(+) (limited to 'test') diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index 211c2819c..f40fdb874 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -674,6 +674,7 @@ describe('ExchangeWrapper', () => { zeroExEvent.watch((err: Error, event: ContractEvent) => { expect(err).to.be.null(); expect(event).to.not.be.undefined(); + expect(event.event).to.be.equal('LogFill'); done(); }); const fillTakerAmountInBaseUnits = new BigNumber(1); @@ -693,6 +694,7 @@ describe('ExchangeWrapper', () => { zeroExEvent.watch((err: Error, event: ContractEvent) => { expect(err).to.be.null(); expect(event).to.not.be.undefined(); + expect(event.event).to.be.equal('LogCancel'); done(); }); const cancelTakerAmountInBaseUnits = new BigNumber(1); @@ -721,6 +723,7 @@ describe('ExchangeWrapper', () => { eventSubscriptionToStay.watch((err: Error, event: ContractEvent) => { expect(err).to.be.null(); expect(event).to.not.be.undefined(); + expect(event.event).to.be.equal('LogFill'); done(); }); -- cgit v1.2.3