protocol/contracts/zero-ex/test/transformers/transformer_base_test.ts
2020-06-08 15:28:27 -04:00

59 lines
2.3 KiB
TypeScript

import { blockchainTests, constants, expect, randomAddress } from '@0x/contracts-test-utils';
import { ZeroExRevertErrors } from '@0x/utils';
import * as _ from 'lodash';
import { artifacts } from '../artifacts';
import { TestDelegateCallerContract, TestTransformerBaseContract } from '../wrappers';
blockchainTests.resets('Transformer (base)', env => {
let deployer: string;
let delegateCaller: TestDelegateCallerContract;
let transformer: TestTransformerBaseContract;
before(async () => {
[deployer] = await env.getAccountAddressesAsync();
delegateCaller = await TestDelegateCallerContract.deployFrom0xArtifactAsync(
artifacts.TestDelegateCaller,
env.provider,
env.txDefaults,
artifacts,
);
transformer = await TestTransformerBaseContract.deployFrom0xArtifactAsync(
artifacts.TestTransformerBase,
env.provider,
{
...env.txDefaults,
from: deployer,
},
artifacts,
);
});
describe('die()', () => {
it('cannot be called by non-deployer', async () => {
const notDeployer = randomAddress();
const tx = transformer.die(randomAddress()).callAsync({ from: notDeployer });
return expect(tx).to.revertWith(
new ZeroExRevertErrors.TransformERC20.OnlyCallableByDeployerError(notDeployer, deployer),
);
});
it('cannot be called outside of its own context', async () => {
const callData = transformer.die(randomAddress()).getABIEncodedTransactionData();
const tx = delegateCaller.executeDelegateCall(transformer.address, callData).callAsync({ from: deployer });
return expect(tx).to.revertWith(
new ZeroExRevertErrors.TransformERC20.InvalidExecutionContextError(
delegateCaller.address,
transformer.address,
),
);
});
it('destroys the transformer', async () => {
await transformer.die(randomAddress()).awaitTransactionSuccessAsync({ from: deployer });
const code = await env.web3Wrapper.getContractCodeAsync(transformer.address);
return expect(code).to.eq(constants.NULL_BYTES);
});
});
});