aboutsummaryrefslogtreecommitdiffstats
path: root/packages/order-utils/test/exchange_transfer_simulator_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/order-utils/test/exchange_transfer_simulator_test.ts')
-rw-r--r--packages/order-utils/test/exchange_transfer_simulator_test.ts174
1 files changed, 0 insertions, 174 deletions
diff --git a/packages/order-utils/test/exchange_transfer_simulator_test.ts b/packages/order-utils/test/exchange_transfer_simulator_test.ts
deleted file mode 100644
index c26eb1907..000000000
--- a/packages/order-utils/test/exchange_transfer_simulator_test.ts
+++ /dev/null
@@ -1,174 +0,0 @@
-import { DummyERC20TokenContract, ERC20ProxyContract, ERC20TokenContract } from '@0x/abi-gen-wrappers';
-import * as artifacts from '@0x/contract-artifacts';
-import { BlockchainLifecycle, devConstants } from '@0x/dev-utils';
-import { ExchangeContractErrs } from '@0x/types';
-import { BigNumber } from '@0x/utils';
-import * as chai from 'chai';
-
-import { assetDataUtils } from '../src/asset_data_utils';
-import { constants } from '../src/constants';
-import { ExchangeTransferSimulator } from '../src/exchange_transfer_simulator';
-import { BalanceAndProxyAllowanceLazyStore } from '../src/store/balance_and_proxy_allowance_lazy_store';
-import { TradeSide, TransferType } from '../src/types';
-
-import { chaiSetup } from './utils/chai_setup';
-import { SimpleERC20BalanceAndProxyAllowanceFetcher } from './utils/simple_erc20_balance_and_proxy_allowance_fetcher';
-import { provider, web3Wrapper } from './utils/web3_wrapper';
-
-chaiSetup.configure();
-const expect = chai.expect;
-const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
-
-describe('ExchangeTransferSimulator', async () => {
- const transferAmount = new BigNumber(5);
- let userAddresses: string[];
- let dummyERC20Token: DummyERC20TokenContract;
- let coinbase: string;
- let sender: string;
- let recipient: string;
- let exampleAssetData: string;
- let exchangeTransferSimulator: ExchangeTransferSimulator;
- let txHash: string;
- let erc20ProxyAddress: string;
- before(async function(): Promise<void> {
- const mochaTestTimeoutMs = 20000;
- this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
-
- userAddresses = await web3Wrapper.getAvailableAddressesAsync();
- [coinbase, sender, recipient] = userAddresses;
-
- const txDefaults = {
- gas: devConstants.GAS_LIMIT,
- from: devConstants.TESTRPC_FIRST_ADDRESS,
- };
-
- const erc20Proxy = await ERC20ProxyContract.deployFrom0xArtifactAsync(
- artifacts.ERC20Proxy,
- provider,
- txDefaults,
- );
- erc20ProxyAddress = erc20Proxy.address;
-
- const totalSupply = new BigNumber(100000000000000000000);
- const name = 'Test';
- const symbol = 'TST';
- const decimals = new BigNumber(18);
- // tslint:disable-next-line:no-unused-variable
- dummyERC20Token = await DummyERC20TokenContract.deployFrom0xArtifactAsync(
- artifacts.DummyERC20Token,
- provider,
- txDefaults,
- name,
- symbol,
- decimals,
- totalSupply,
- );
-
- exampleAssetData = assetDataUtils.encodeERC20AssetData(dummyERC20Token.address);
- });
- beforeEach(async () => {
- await blockchainLifecycle.startAsync();
- });
- afterEach(async () => {
- await blockchainLifecycle.revertAsync();
- });
- describe('#transferFromAsync', function(): void {
- // HACK: For some reason these tests need a slightly longer timeout
- const mochaTestTimeoutMs = 3000;
- this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
- beforeEach(() => {
- const simpleERC20BalanceAndProxyAllowanceFetcher = new SimpleERC20BalanceAndProxyAllowanceFetcher(
- (dummyERC20Token as any) as ERC20TokenContract,
- erc20ProxyAddress,
- );
- const balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(
- simpleERC20BalanceAndProxyAllowanceFetcher,
- );
- exchangeTransferSimulator = new ExchangeTransferSimulator(balanceAndProxyAllowanceLazyStore);
- });
- it("throws if the user doesn't have enough allowance", async () => {
- return expect(
- exchangeTransferSimulator.transferFromAsync(
- exampleAssetData,
- sender,
- recipient,
- transferAmount,
- TradeSide.Taker,
- TransferType.Trade,
- ),
- ).to.be.rejectedWith(ExchangeContractErrs.InsufficientTakerAllowance);
- });
- it("throws if the user doesn't have enough balance", async () => {
- txHash = await dummyERC20Token.approve.sendTransactionAsync(erc20ProxyAddress, transferAmount, {
- from: sender,
- });
- await web3Wrapper.awaitTransactionSuccessAsync(txHash);
- return expect(
- exchangeTransferSimulator.transferFromAsync(
- exampleAssetData,
- sender,
- recipient,
- transferAmount,
- TradeSide.Maker,
- TransferType.Trade,
- ),
- ).to.be.rejectedWith(ExchangeContractErrs.InsufficientMakerBalance);
- });
- it('updates balances and proxyAllowance after transfer', async () => {
- txHash = await dummyERC20Token.transfer.sendTransactionAsync(sender, transferAmount, {
- from: coinbase,
- });
- await web3Wrapper.awaitTransactionSuccessAsync(txHash);
-
- txHash = await dummyERC20Token.approve.sendTransactionAsync(erc20ProxyAddress, transferAmount, {
- from: sender,
- });
- await web3Wrapper.awaitTransactionSuccessAsync(txHash);
-
- await exchangeTransferSimulator.transferFromAsync(
- exampleAssetData,
- sender,
- recipient,
- transferAmount,
- TradeSide.Taker,
- TransferType.Trade,
- );
- const store = (exchangeTransferSimulator as any)._store;
- const senderBalance = await store.getBalanceAsync(exampleAssetData, sender);
- const recipientBalance = await store.getBalanceAsync(exampleAssetData, recipient);
- const senderProxyAllowance = await store.getProxyAllowanceAsync(exampleAssetData, sender);
- expect(senderBalance).to.be.bignumber.equal(0);
- expect(recipientBalance).to.be.bignumber.equal(transferAmount);
- expect(senderProxyAllowance).to.be.bignumber.equal(0);
- });
- it("doesn't update proxyAllowance after transfer if unlimited", async () => {
- txHash = await dummyERC20Token.transfer.sendTransactionAsync(sender, transferAmount, {
- from: coinbase,
- });
- await web3Wrapper.awaitTransactionSuccessAsync(txHash);
- txHash = await dummyERC20Token.approve.sendTransactionAsync(
- erc20ProxyAddress,
- constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
- {
- from: sender,
- },
- );
- await web3Wrapper.awaitTransactionSuccessAsync(txHash);
- await exchangeTransferSimulator.transferFromAsync(
- exampleAssetData,
- sender,
- recipient,
- transferAmount,
- TradeSide.Taker,
- TransferType.Trade,
- );
- const store = (exchangeTransferSimulator as any)._store;
- const senderBalance = await store.getBalanceAsync(exampleAssetData, sender);
- const recipientBalance = await store.getBalanceAsync(exampleAssetData, recipient);
- const senderProxyAllowance = await store.getProxyAllowanceAsync(exampleAssetData, sender);
- expect(senderBalance).to.be.bignumber.equal(0);
- expect(recipientBalance).to.be.bignumber.equal(transferAmount);
- expect(senderProxyAllowance).to.be.bignumber.equal(constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS);
- });
- });
-});