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

Commit 7f455b5

Browse files
author
Victor Wiebe
committed
fix: expanding assertion for erc20 token allowance in erc20dividends
1 parent 1978bde commit 7f455b5

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/contract_wrappers/modules/checkpoint/__tests__/erc20_dividend_checkpoint_wrapper.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ describe('ERC20DividendCheckpointWrapper', () => {
101101
const mockedBalanceOfAddressMethod = mock(MockedCallMethod);
102102
when(mockedERC20DetailedContract.balanceOf).thenReturn(instance(mockedBalanceOfAddressMethod));
103103
when(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).thenResolve(expectedBalanceOfResult);
104+
105+
const expectedAllowanceResult = new BigNumber(100);
106+
const mockedAllowanceMethod = mock(MockedCallMethod);
107+
when(mockedERC20DetailedContract.allowance).thenReturn(instance(mockedAllowanceMethod));
108+
when(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).thenResolve(expectedAllowanceResult);
109+
104110
when(mockedContractFactory.getERC20DetailedContract(token)).thenResolve(instance(mockedERC20DetailedContract));
105111

106112
const expectedDecimalsResult = new BigNumber(18);
@@ -165,6 +171,8 @@ describe('ERC20DividendCheckpointWrapper', () => {
165171
verify(mockedWrapper.getAvailableAddressesAsync()).times(2);
166172
verify(mockedERC20DetailedContract.balanceOf).once();
167173
verify(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).once();
174+
verify(mockedERC20DetailedContract.allowance).once();
175+
verify(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).once();
168176
verify(mockedContractFactory.getERC20DetailedContract(token)).twice();
169177
verify(mockedERC20DetailedContract.decimals).once();
170178
verify(mockedDecimalsMethod.callAsync()).once();
@@ -195,6 +203,12 @@ describe('ERC20DividendCheckpointWrapper', () => {
195203
const mockedBalanceOfAddressMethod = mock(MockedCallMethod);
196204
when(mockedERC20DetailedContract.balanceOf).thenReturn(instance(mockedBalanceOfAddressMethod));
197205
when(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).thenResolve(expectedBalanceOfResult);
206+
207+
const expectedAllowanceResult = new BigNumber(100);
208+
const mockedAllowanceMethod = mock(MockedCallMethod);
209+
when(mockedERC20DetailedContract.allowance).thenReturn(instance(mockedAllowanceMethod));
210+
when(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).thenResolve(expectedAllowanceResult);
211+
198212
when(mockedContractFactory.getERC20DetailedContract(token)).thenResolve(instance(mockedERC20DetailedContract));
199213

200214
const expectedDecimalsResult = new BigNumber(18);
@@ -273,6 +287,8 @@ describe('ERC20DividendCheckpointWrapper', () => {
273287
verify(mockedWrapper.getAvailableAddressesAsync()).times(2);
274288
verify(mockedERC20DetailedContract.balanceOf).once();
275289
verify(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).once();
290+
verify(mockedERC20DetailedContract.allowance).once();
291+
verify(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).once();
276292
verify(mockedContractFactory.getERC20DetailedContract(token)).twice();
277293
verify(mockedERC20DetailedContract.decimals).once();
278294
verify(mockedDecimalsMethod.callAsync()).once();
@@ -303,6 +319,12 @@ describe('ERC20DividendCheckpointWrapper', () => {
303319
const mockedBalanceOfAddressMethod = mock(MockedCallMethod);
304320
when(mockedERC20DetailedContract.balanceOf).thenReturn(instance(mockedBalanceOfAddressMethod));
305321
when(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).thenResolve(expectedBalanceOfResult);
322+
323+
const expectedAllowanceResult = new BigNumber(100);
324+
const mockedAllowanceMethod = mock(MockedCallMethod);
325+
when(mockedERC20DetailedContract.allowance).thenReturn(instance(mockedAllowanceMethod));
326+
when(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).thenResolve(expectedAllowanceResult);
327+
306328
when(mockedContractFactory.getERC20DetailedContract(token)).thenResolve(instance(mockedERC20DetailedContract));
307329

308330
const expectedDecimalsResult = new BigNumber(18);
@@ -384,6 +406,8 @@ describe('ERC20DividendCheckpointWrapper', () => {
384406
verify(mockedWrapper.getAvailableAddressesAsync()).times(2);
385407
verify(mockedERC20DetailedContract.balanceOf).once();
386408
verify(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).once();
409+
verify(mockedERC20DetailedContract.allowance).once();
410+
verify(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).once();
387411
verify(mockedContractFactory.getERC20DetailedContract(token)).twice();
388412
verify(mockedERC20DetailedContract.decimals).once();
389413
verify(mockedDecimalsMethod.callAsync()).once();
@@ -413,6 +437,12 @@ describe('ERC20DividendCheckpointWrapper', () => {
413437
const mockedBalanceOfAddressMethod = mock(MockedCallMethod);
414438
when(mockedERC20DetailedContract.balanceOf).thenReturn(instance(mockedBalanceOfAddressMethod));
415439
when(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).thenResolve(expectedBalanceOfResult);
440+
441+
const expectedAllowanceResult = new BigNumber(100);
442+
const mockedAllowanceMethod = mock(MockedCallMethod);
443+
when(mockedERC20DetailedContract.allowance).thenReturn(instance(mockedAllowanceMethod));
444+
when(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).thenResolve(expectedAllowanceResult);
445+
416446
when(mockedContractFactory.getERC20DetailedContract(token)).thenResolve(instance(mockedERC20DetailedContract));
417447

418448
const expectedDecimalsResult = new BigNumber(18);
@@ -481,6 +511,8 @@ describe('ERC20DividendCheckpointWrapper', () => {
481511
verify(mockedWrapper.getAvailableAddressesAsync()).times(2);
482512
verify(mockedERC20DetailedContract.balanceOf).once();
483513
verify(mockedBalanceOfAddressMethod.callAsync(expectedOwnerResult)).once();
514+
verify(mockedERC20DetailedContract.allowance).once();
515+
verify(mockedAllowanceMethod.callAsync(expectedOwnerResult, token)).once();
484516
verify(mockedContractFactory.getERC20DetailedContract(token)).twice();
485517
verify(mockedERC20DetailedContract.decimals).once();
486518
verify(mockedDecimalsMethod.callAsync()).once();

src/contract_wrappers/modules/checkpoint/erc20_dividend_checkpoint_wrapper.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,11 @@ export default class ERC20DividendCheckpointWrapper extends DividendCheckpointWr
365365
}
366366
assert.isNonZeroETHAddressHex('token', token);
367367
assert.assert(name.length > 0, 'The name can not be empty');
368-
const erc20TokenBalance = await (await this.erc20DetailedContract(token)).balanceOf.callAsync(
369-
await this.getCallerAddress(txData),
370-
);
368+
const callerAddress = await this.getCallerAddress(txData);
369+
const erc20Detailed = await this.erc20DetailedContract(token);
370+
const erc20TokenBalance = await erc20Detailed.balanceOf.callAsync(callerAddress);
371+
const erc20TokenAllowance = await erc20Detailed.allowance.callAsync(callerAddress, token);
372+
assert.assert(erc20TokenAllowance.isGreaterThanOrEqualTo(amount), 'Your allowance is less than dividend amount');
371373
assert.assert(erc20TokenBalance.isGreaterThanOrEqualTo(amount), 'Your balance is less than dividend amount');
372374
};
373375
}

0 commit comments

Comments
 (0)