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);
 | 
						|
        });
 | 
						|
    });
 | 
						|
});
 |