Skip to content

Commit 1e203eb

Browse files
author
Victor Wiebe
committed
test: approveErc20 both tests passing now
1 parent 24e8974 commit 1e203eb

File tree

1 file changed

+57
-9
lines changed

1 file changed

+57
-9
lines changed

src/procedures/__tests__/ApproveErc20.ts

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ const params1 = {
1313
amount: new BigNumber(1),
1414
spender: '0x1',
1515
owner: '0x3',
16+
};
17+
18+
const params2 = {
19+
amount: new BigNumber(1),
20+
spender: '0x1',
21+
owner: '0x3',
1622
tokenAddress: '0x2222222222222222222222222222222222222222',
1723
};
1824

@@ -21,34 +27,51 @@ describe('ApproveErc20', () => {
2127
let contextMock: MockManager<contextObject.Context>;
2228
let wrappersMock: MockManager<polymathBaseObject.PolymathBase>;
2329
let erc20Mock: MockManager<contractWrappersObject.ERC20>;
24-
let wrapperMockStub: SinonStub<any, any>;
30+
let polyTokenMock: MockManager<contractWrappersObject.PolyToken>;
31+
32+
let checkPolyAllowanceStub: SinonStub<any, any>;
33+
let checkPolyAddressStub: SinonStub<any, any>;
34+
let checkPolyBalanceStub: SinonStub<any, any>;
35+
36+
let checkErc20AllowanceStub: SinonStub<any, any>;
37+
let checkErc20AddressStub: SinonStub<any, any>;
38+
let checkErc20BalanceStub: SinonStub<any, any>;
2539

2640
beforeAll(() => {
2741
// Mock the context and wrappers, including currentWallet and balanceOf to test ApproveErc20
2842
contextMock = ImportMock.mockClass(contextObject, 'Context');
2943
wrappersMock = ImportMock.mockClass(polymathBaseObject, 'PolymathBase');
3044
erc20Mock = ImportMock.mockClass(contractWrappersObject, 'ERC20');
31-
erc20Mock.mock('balanceOf', Promise.resolve(params1.amount));
32-
wrapperMockStub = wrappersMock.mock('getERC20TokenWrapper', erc20Mock.getMockInstance());
45+
polyTokenMock = ImportMock.mockClass(contractWrappersObject, 'PolyToken');
46+
47+
// Setup poly token
48+
checkPolyBalanceStub = polyTokenMock.mock('balanceOf', Promise.resolve(new BigNumber(2)));
49+
checkPolyAddressStub = polyTokenMock.mock('address', Promise.resolve(params1.spender));
50+
checkPolyAllowanceStub = polyTokenMock.mock('allowance', Promise.resolve(new BigNumber(0)));
51+
3352
contextMock.set('contractWrappers', wrappersMock.getMockInstance());
53+
wrappersMock.set('polyToken', polyTokenMock.getMockInstance());
54+
wrappersMock.mock('isTestnet', Promise.resolve(false));
3455
const ownerPromise = new Promise<string>((resolve, reject) => {
3556
resolve();
3657
});
3758
contextMock.set('currentWallet', new Wallet({ address: () => ownerPromise }));
38-
39-
// Instantiate ApproveErc20
40-
target = new ApproveErc20(params1, contextMock.getMockInstance());
4159
});
4260

4361
describe('Types', () => {
4462
test('should extend procedure and have ApproveErc20 type', async () => {
63+
// Instantiate ApproveErc20
64+
target = new ApproveErc20(params1, contextMock.getMockInstance());
4565
expect(target instanceof Procedure).toBe(true);
4666
expect(target.type).toBe('ApproveErc20');
4767
});
4868
});
4969

50-
describe('createCheckpoint', () => {
51-
test('should send the transaction to createCheckpoint', async () => {
70+
describe('ApproveErc20', () => {
71+
test('should send the transaction to ApproveErc20 with a poly token', async () => {
72+
// Instantiate ApproveErc20
73+
target = new ApproveErc20(params1, contextMock.getMockInstance());
74+
5275
// Real call
5376
await target.prepareTransactions();
5477

@@ -57,7 +80,32 @@ describe('ApproveErc20', () => {
5780
expect(sinon.spy(target, 'prepareTransactions').calledOnce);
5881
expect(sinon.spy(target, 'addProcedure').calledOnce);
5982
expect(sinon.spy(target, 'addTransaction').calledOnce);
60-
expect(wrapperMockStub().calledOnce);
83+
expect(checkPolyBalanceStub().calledOnce);
84+
expect(checkPolyAllowanceStub().calledOnce);
85+
expect(checkPolyAddressStub().calledOnce);
6186
});
6287
});
88+
89+
test('should send the transaction to createCheckpoint with a custom erc20 token', async () => {
90+
// Used by custom erc20 token
91+
checkErc20BalanceStub = erc20Mock.mock('balanceOf', Promise.resolve(params2.amount));
92+
checkErc20AddressStub = erc20Mock.mock('address', Promise.resolve(params2.spender));
93+
checkErc20AllowanceStub = erc20Mock.mock('allowance', Promise.resolve(new BigNumber(0)));
94+
95+
const wrapperMockStub = wrappersMock.mock('getERC20TokenWrapper', erc20Mock.getMockInstance());
96+
// Instantiate ApproveErc20
97+
target = new ApproveErc20(params2, contextMock.getMockInstance());
98+
// Real call
99+
await target.prepareTransactions();
100+
101+
// Verifications
102+
expect(sinon.spy(target, 'prepare').calledOnce);
103+
expect(sinon.spy(target, 'prepareTransactions').calledOnce);
104+
expect(sinon.spy(target, 'addProcedure').calledOnce);
105+
expect(sinon.spy(target, 'addTransaction').calledOnce);
106+
expect(wrapperMockStub().calledOnce);
107+
expect(checkErc20BalanceStub().calledOnce);
108+
expect(checkErc20AllowanceStub().calledOnce);
109+
expect(checkErc20AddressStub().calledOnce);
110+
});
63111
});

0 commit comments

Comments
 (0)