Skip to content
This repository has been archived by the owner on Jul 6, 2022. It is now read-only.

Commit

Permalink
Merge 395cd9c into 573168a
Browse files Browse the repository at this point in the history
  • Loading branch information
onigiri-x committed May 31, 2019
2 parents 573168a + 395cd9c commit 977b880
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 25 deletions.
64 changes: 52 additions & 12 deletions src/contract_wrappers/tokens/__tests__/erc20_wrapper.test.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// PolymathRegistryWrapper test
import { BigNumber } from '@0x/utils';
import { mock, instance, reset, when, verify } from 'ts-mockito';
import { mock, instance, reset, when, verify, objectContaining } from 'ts-mockito';
import { Web3Wrapper } from '@0x/web3-wrapper';
import { DetailedERC20Contract } from '@polymathnetwork/abi-wrappers';
import { stringToBytes32 } from '../../../utils/convert';
import ContractWrapper from '../../contract_wrapper';
import DetailedERC20Wrapper from '../detailed_erc20_wrapper';
import { MockedCallMethod, MockedSendMethod, getMockedPolyResponse } from '../../../test_utils/mocked_methods';
import { valueToWei, weiToValue } from '../../../utils/convert';

describe('ERC20TokenWrapper', () => {
// Declare ERC20TokenWrapper object
Expand Down Expand Up @@ -75,7 +75,7 @@ describe('ERC20TokenWrapper', () => {

describe('decimals', () => {
test('should call to decimals', async () => {
const expectedResult = new BigNumber(0);
const expectedResult = new BigNumber(18);
// Mocked method
const mockedMethod = mock(MockedCallMethod);
// Stub the method
Expand All @@ -96,10 +96,16 @@ describe('ERC20TokenWrapper', () => {
describe('balanceOf', () => {
test.todo('should fail as owner is not an Eth address');
test('should call to balanceOf', async () => {
const expectedResult = new BigNumber(0);
const expectedResult = new BigNumber(100);
const params = {
owner: '0x1111111111111111111111111111111111111111',
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

// Mocked method
const mockedMethod = mock(MockedCallMethod);
// Stub the method
Expand All @@ -110,10 +116,12 @@ describe('ERC20TokenWrapper', () => {
// Real call
const result = await target.balanceOf(params);
// Result expectation
expect(result).toBe(expectedResult);
expect(result).toEqual(weiToValue(expectedResult, expectedDecimalsResult));
// Verifications
verify(mockedContract.balanceOf).once();
verify(mockedMethod.callAsync(params.owner)).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand Down Expand Up @@ -146,6 +154,12 @@ describe('ERC20TokenWrapper', () => {
owner: '0x1111111111111111111111111111111111111111',
spender: '0x2222222222222222222222222222222222222222',
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

// Mocked method
const mockedMethod = mock(MockedCallMethod);
// Stub the method
Expand All @@ -156,10 +170,12 @@ describe('ERC20TokenWrapper', () => {
// Real call
const result = await target.allowance(params);
// Result expectation
expect(result).toBe(expectedResult);
expect(result).toEqual(expectedResult);
// Verifications
verify(mockedContract.allowance).once();
verify(mockedMethod.callAsync(params.owner, params.spender)).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand Down Expand Up @@ -200,6 +216,12 @@ describe('ERC20TokenWrapper', () => {
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -209,7 +231,7 @@ describe('ERC20TokenWrapper', () => {
when(
mockedMethod.sendTransactionAsync(
mockedParams.spender,
mockedParams.value,
objectContaining(valueToWei(mockedParams.value, expectedDecimalsResult)),
mockedParams.txData,
mockedParams.safetyFactor,
),
Expand All @@ -225,11 +247,13 @@ describe('ERC20TokenWrapper', () => {
verify(
mockedMethod.sendTransactionAsync(
mockedParams.spender,
mockedParams.value,
objectContaining(valueToWei(mockedParams.value, expectedDecimalsResult)),
mockedParams.txData,
mockedParams.safetyFactor,
),
).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand All @@ -245,6 +269,12 @@ describe('ERC20TokenWrapper', () => {
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -255,7 +285,7 @@ describe('ERC20TokenWrapper', () => {
mockedMethod.sendTransactionAsync(
mockedParams.from,
mockedParams.to,
mockedParams.value,
objectContaining(valueToWei(mockedParams.value, expectedDecimalsResult)),
mockedParams.txData,
mockedParams.safetyFactor,
),
Expand All @@ -272,11 +302,13 @@ describe('ERC20TokenWrapper', () => {
mockedMethod.sendTransactionAsync(
mockedParams.from,
mockedParams.to,
mockedParams.value,
objectContaining(valueToWei(mockedParams.value, expectedDecimalsResult)),
mockedParams.txData,
mockedParams.safetyFactor,
),
).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand All @@ -290,6 +322,12 @@ describe('ERC20TokenWrapper', () => {
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -299,7 +337,7 @@ describe('ERC20TokenWrapper', () => {
when(
mockedMethod.sendTransactionAsync(
mockedParams.to,
mockedParams.value,
objectContaining(valueToWei(mockedParams.value, expectedDecimalsResult)),
mockedParams.txData,
mockedParams.safetyFactor,
),
Expand All @@ -315,11 +353,13 @@ describe('ERC20TokenWrapper', () => {
verify(
mockedMethod.sendTransactionAsync(
mockedParams.to,
mockedParams.value,
objectContaining(valueToWei(mockedParams.value, expectedDecimalsResult)),
mockedParams.txData,
mockedParams.safetyFactor,
),
).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ import ERC20TokenWrapper from '../erc20_wrapper';
import { ModuleType, ModuleName, Features, FundRaiseType } from '../../../types';
import SecurityTokenWrapper from '../security_token_wrapper';
import ContractFactory from '../../../factories/contractFactory';
import { stringToBytes32, bytes32ToString, numberToBigNumber, dateToBigNumber } from '../../../utils/convert';
import {
stringToBytes32,
bytes32ToString,
numberToBigNumber,
dateToBigNumber,
valueToWei
} from '../../../utils/convert';
import { MockedCallMethod, MockedSendMethod, getMockedPolyResponse } from '../../../test_utils/mocked_methods';

describe('SecurityTokenWrapper', () => {
Expand Down Expand Up @@ -1727,6 +1733,12 @@ describe('SecurityTokenWrapper', () => {
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -1747,7 +1759,7 @@ describe('SecurityTokenWrapper', () => {
// Mock web3 wrapper owner
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([owner]);

const expectedBalanceResult = new BigNumber(100);
const expectedBalanceResult = valueToWei(new BigNumber(100), expectedDecimalsResult);
const params = {
owner,
};
Expand Down Expand Up @@ -1776,6 +1788,8 @@ describe('SecurityTokenWrapper', () => {
verify(mockedContract.balanceOf).once();
verify(mockedBalanceMethod.callAsync(params.owner)).once();
verify(mockedWrapper.getAvailableAddressesAsync()).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand All @@ -1784,11 +1798,17 @@ describe('SecurityTokenWrapper', () => {
// Mocked parameters
const mockedParams = {
from: '0x5555555555555555555555555555555555555555',
value: new BigNumber(1),
value: new BigNumber(10),
data: 'string',
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -1810,7 +1830,7 @@ describe('SecurityTokenWrapper', () => {
// Mock web3 wrapper owner
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([owner]);

const expectedBalanceResult = new BigNumber(100);
const expectedBalanceResult = valueToWei(new BigNumber(100), expectedDecimalsResult);
const params = {
owner,
};
Expand All @@ -1821,7 +1841,7 @@ describe('SecurityTokenWrapper', () => {
// Stub the request
when(mockedBalanceMethod.callAsync(params.owner)).thenResolve(expectedBalanceResult);

const expectedAllowanceResult = new BigNumber(10);
const expectedAllowanceResult = valueToWei(new BigNumber(50), expectedDecimalsResult);
// Mocked method
const mockedAllowanceMethod = mock(MockedCallMethod);
// Stub the method
Expand Down Expand Up @@ -1850,6 +1870,8 @@ describe('SecurityTokenWrapper', () => {
verify(mockedContract.allowance).once();
verify(mockedAllowanceMethod.callAsync(mockedParams.from, params.owner)).once();
verify(mockedWrapper.getAvailableAddressesAsync()).once();
verify(mockedContract.decimals).twice();
verify(mockedDecimalsMethod.callAsync()).twice();
});
});

Expand Down Expand Up @@ -2027,6 +2049,12 @@ describe('SecurityTokenWrapper', () => {
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -2049,7 +2077,7 @@ describe('SecurityTokenWrapper', () => {
// Mock web3 wrapper owner
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([expectedOwnerResult]);

const expectedBalanceResult = new BigNumber(100);
const expectedBalanceResult = valueToWei(new BigNumber(100), expectedDecimalsResult);
const params = {
owner: '0x1111111111111111111111111111111111111111',
};
Expand Down Expand Up @@ -2088,6 +2116,8 @@ describe('SecurityTokenWrapper', () => {
verify(mockedContract.controller).once();
verify(mockedControllerMethod.callAsync()).once();
verify(mockedWrapper.getAvailableAddressesAsync()).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand All @@ -2103,6 +2133,12 @@ describe('SecurityTokenWrapper', () => {
txData: {},
safetyFactor: 10,
};

const expectedDecimalsResult = new BigNumber(18);
const mockedDecimalsMethod = mock(MockedCallMethod);
when(mockedContract.decimals).thenReturn(instance(mockedDecimalsMethod));
when(mockedDecimalsMethod.callAsync()).thenResolve(expectedDecimalsResult);

const expectedResult = getMockedPolyResponse();
// Mocked method
const mockedMethod = mock(MockedSendMethod);
Expand All @@ -2124,7 +2160,7 @@ describe('SecurityTokenWrapper', () => {
// Mock web3 wrapper owner
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([expectedOwnerResult]);

const expectedBalanceResult = new BigNumber(100);
const expectedBalanceResult = valueToWei(new BigNumber(100), expectedDecimalsResult);
const params = {
owner: '0x1111111111111111111111111111111111111111',
};
Expand Down Expand Up @@ -2162,6 +2198,8 @@ describe('SecurityTokenWrapper', () => {
verify(mockedContract.controller).once();
verify(mockedControllerMethod.callAsync()).once();
verify(mockedWrapper.getAvailableAddressesAsync()).once();
verify(mockedContract.decimals).once();
verify(mockedDecimalsMethod.callAsync()).once();
});
});

Expand Down

0 comments on commit 977b880

Please sign in to comment.