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