diff options
author | Fabio Berger <me@fabioberger.com> | 2017-11-12 22:40:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-12 22:40:47 +0800 |
commit | 4e194d7766adc46215f3adfbc54542fd504e7035 (patch) | |
tree | 7b29b467cb4c1e8151766fc1a9d7248552de0747 /test | |
parent | 4262ac3c8966468b343c6467e0e9da85ef25be05 (diff) | |
parent | d34ea79d939beaf677c6730fe6e84e25a687d59f (diff) | |
download | dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.tar dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.tar.gz dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.tar.bz2 dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.tar.lz dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.tar.xz dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.tar.zst dexon-sol-tools-4e194d7766adc46215f3adfbc54542fd504e7035.zip |
Merge pull request #208 from dekz/fixUnhandledPromiseBug
Clean up subscription state.
Diffstat (limited to 'test')
-rw-r--r-- | test/subscription_test.ts | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/test/subscription_test.ts b/test/subscription_test.ts new file mode 100644 index 000000000..985fdc1d6 --- /dev/null +++ b/test/subscription_test.ts @@ -0,0 +1,95 @@ +import 'mocha'; +import * as _ from 'lodash'; +import * as chai from 'chai'; +import * as Sinon from 'sinon'; +import {chaiSetup} from './utils/chai_setup'; +import * as Web3 from 'web3'; +import BigNumber from 'bignumber.js'; +import promisify = require('es6-promisify'); +import {web3Factory} from './utils/web3_factory'; +import { + ZeroEx, + ZeroExError, + Token, + ApprovalContractEventArgs, + TokenEvents, + LogEvent, +} from '../src'; +import {BlockchainLifecycle} from './utils/blockchain_lifecycle'; +import {TokenUtils} from './utils/token_utils'; +import {DoneCallback, BlockParamLiteral} from '../src/types'; + +chaiSetup.configure(); +const expect = chai.expect; +const blockchainLifecycle = new BlockchainLifecycle(); + +describe('SubscriptionTest', () => { + let web3: Web3; + let zeroEx: ZeroEx; + let userAddresses: string[]; + let tokens: Token[]; + let tokenUtils: TokenUtils; + let coinbase: string; + let addressWithoutFunds: string; + before(async () => { + web3 = web3Factory.create(); + zeroEx = new ZeroEx(web3.currentProvider); + userAddresses = await zeroEx.getAvailableAddressesAsync(); + tokens = await zeroEx.tokenRegistry.getTokensAsync(); + tokenUtils = new TokenUtils(tokens); + coinbase = userAddresses[0]; + addressWithoutFunds = userAddresses[1]; + }); + beforeEach(async () => { + await blockchainLifecycle.startAsync(); + }); + afterEach(async () => { + await blockchainLifecycle.revertAsync(); + }); + describe('#subscribe', () => { + const indexFilterValues = {}; + const shouldThrowOnInsufficientBalanceOrAllowance = true; + let tokenAddress: string; + const transferAmount = new BigNumber(42); + const allowanceAmount = new BigNumber(42); + let stubs: Sinon.SinonStub[] = []; + before(() => { + const token = tokens[0]; + tokenAddress = token.address; + }); + afterEach(() => { + zeroEx.token.unsubscribeAll(); + _.each(stubs, s => s.restore()); + stubs = []; + }); + it('Should receive the Error when an error occurs', (done: DoneCallback) => { + (async () => { + const callback = (err: Error, logEvent: LogEvent<ApprovalContractEventArgs>) => { + expect(err).to.not.be.null(); + expect(logEvent).to.be.undefined(); + done(); + }; + stubs = [ + Sinon.stub((zeroEx as any)._web3Wrapper, 'getBlockAsync') + .throws("JSON RPC error") + ] + zeroEx.token.subscribe( + tokenAddress, TokenEvents.Approval, indexFilterValues, callback); + await zeroEx.token.setAllowanceAsync(tokenAddress, coinbase, addressWithoutFunds, allowanceAmount); + })().catch(done); + }); + it('Should allow unsubscribeAll to be called successfully after an error', (done: DoneCallback) => { + (async () => { + const callback = (err: Error, logEvent: LogEvent<ApprovalContractEventArgs>) => { }; + zeroEx.token.subscribe( + tokenAddress, TokenEvents.Approval, indexFilterValues, callback); + stubs = [ + Sinon.stub((zeroEx as any)._web3Wrapper, 'getBlockAsync') + .throws("JSON RPC error") + ] + zeroEx.token.unsubscribeAll(); + done(); + })().catch(done); + }); + }) + })
\ No newline at end of file |