61 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { ERC20TokenContract } from '@0x/contracts-erc20';
 | |
| import { blockchainTests, constants, expect, randomAddress } from '@0x/contracts-test-utils';
 | |
| import { AssetProxyId, RevertReason } from '@0x/types';
 | |
| import { BigNumber } from '@0x/utils';
 | |
| 
 | |
| import { artifacts } from './artifacts';
 | |
| import { TestChaiBridgeContract } from './wrappers';
 | |
| 
 | |
| blockchainTests.resets('ChaiBridge unit tests', env => {
 | |
|     let chaiBridgeContract: TestChaiBridgeContract;
 | |
|     let testDaiContract: ERC20TokenContract;
 | |
|     let fromAddress: string;
 | |
|     let toAddress: string;
 | |
| 
 | |
|     const alwaysRevertAddress = '0x0000000000000000000000000000000000000001';
 | |
|     const amount = new BigNumber(1);
 | |
| 
 | |
|     before(async () => {
 | |
|         [fromAddress, toAddress] = await env.getAccountAddressesAsync();
 | |
|         chaiBridgeContract = await TestChaiBridgeContract.deployFrom0xArtifactAsync(
 | |
|             artifacts.TestChaiBridge,
 | |
|             env.provider,
 | |
|             env.txDefaults,
 | |
|             artifacts,
 | |
|         );
 | |
|         const testChaiDaiAddress = await chaiBridgeContract.testChaiDai().callAsync();
 | |
|         testDaiContract = new ERC20TokenContract(testChaiDaiAddress, env.provider, env.txDefaults);
 | |
|     });
 | |
| 
 | |
|     describe('bridgeTransferFrom()', () => {
 | |
|         it('fails if not called by ERC20BridgeProxy', async () => {
 | |
|             return expect(
 | |
|                 chaiBridgeContract
 | |
|                     .bridgeTransferFrom(randomAddress(), fromAddress, toAddress, amount, constants.NULL_BYTES)
 | |
|                     .awaitTransactionSuccessAsync({ from: alwaysRevertAddress }),
 | |
|             ).to.revertWith(RevertReason.ChaiBridgeOnlyCallableByErc20BridgeProxy);
 | |
|         });
 | |
|         it('returns magic bytes upon success', async () => {
 | |
|             const magicBytes = await chaiBridgeContract
 | |
|                 .bridgeTransferFrom(randomAddress(), fromAddress, toAddress, amount, constants.NULL_BYTES)
 | |
|                 .callAsync();
 | |
|             expect(magicBytes).to.eq(AssetProxyId.ERC20Bridge);
 | |
|         });
 | |
|         it('should increase the Dai balance of `toAddress` by `amount` if successful', async () => {
 | |
|             const initialBalance = await testDaiContract.balanceOf(toAddress).callAsync();
 | |
|             await chaiBridgeContract
 | |
|                 .bridgeTransferFrom(randomAddress(), fromAddress, toAddress, amount, constants.NULL_BYTES)
 | |
|                 .awaitTransactionSuccessAsync();
 | |
|             const endBalance = await testDaiContract.balanceOf(toAddress).callAsync();
 | |
|             expect(endBalance).to.bignumber.eq(initialBalance.plus(amount));
 | |
|         });
 | |
|         it('fails if the `chai.draw` call fails', async () => {
 | |
|             return expect(
 | |
|                 chaiBridgeContract
 | |
|                     .bridgeTransferFrom(randomAddress(), alwaysRevertAddress, toAddress, amount, constants.NULL_BYTES)
 | |
|                     .awaitTransactionSuccessAsync(),
 | |
|             ).to.revertWith(RevertReason.ChaiBridgeDrawDaiFailed);
 | |
|         });
 | |
|     });
 | |
| });
 |