Skip to content

Commit 0c8292d

Browse files
committed
Add tests for erc20TokenStream permission
1 parent df37819 commit 0c8292d

3 files changed

Lines changed: 2477 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { describe, expect, it } from '@jest/globals';
2+
import type { CoreCaveatBuilder } from '@metamask/delegation-toolkit';
3+
import { toHex, parseUnits } from 'viem/utils';
4+
5+
import { appendCaveats } from '../../../src/permissions/erc20TokenStream/caveats';
6+
import type { PopulatedErc20TokenStreamPermission } from '../../../src/permissions/erc20TokenStream/types';
7+
import { convertReadableDateToTimestamp } from '../../../src/utils/time';
8+
9+
describe('erc20TokenStream:caveats', () => {
10+
describe('appendCaveats()', () => {
11+
const tokenDecimals = 10;
12+
const initialAmount = toHex(parseUnits('1', tokenDecimals));
13+
const maxAmount = toHex(parseUnits('10', tokenDecimals));
14+
const amountPerSecond = toHex(parseUnits('.5', tokenDecimals));
15+
const startTime = convertReadableDateToTimestamp('10/26/2024');
16+
const tokenAddress = '0x1234567890123456789012345678901234567890';
17+
18+
const mockPermission: PopulatedErc20TokenStreamPermission = {
19+
type: 'erc20-token-stream',
20+
data: {
21+
initialAmount,
22+
maxAmount,
23+
amountPerSecond,
24+
startTime,
25+
tokenAddress,
26+
justification: 'test',
27+
},
28+
rules: {},
29+
};
30+
31+
it('should append erc20Streaming caveat', async () => {
32+
const mockCaveatBuilder = {
33+
addCaveat: jest.fn().mockReturnThis(),
34+
} as unknown as jest.Mocked<CoreCaveatBuilder>;
35+
36+
await appendCaveats({
37+
permission: mockPermission,
38+
caveatBuilder: mockCaveatBuilder,
39+
});
40+
41+
expect(mockCaveatBuilder.addCaveat).toHaveBeenCalledWith(
42+
'erc20Streaming',
43+
tokenAddress,
44+
BigInt(initialAmount),
45+
BigInt(maxAmount),
46+
BigInt(amountPerSecond),
47+
startTime,
48+
);
49+
50+
expect(mockCaveatBuilder.addCaveat).toHaveBeenCalledTimes(1);
51+
});
52+
53+
it('should return the modified caveat builder', async () => {
54+
const mockCaveatBuilder = {
55+
addCaveat: jest.fn().mockReturnThis(),
56+
} as unknown as jest.Mocked<CoreCaveatBuilder>;
57+
58+
const result = await appendCaveats({
59+
permission: mockPermission,
60+
caveatBuilder: mockCaveatBuilder,
61+
});
62+
63+
expect(result).toBe(mockCaveatBuilder);
64+
});
65+
});
66+
});

0 commit comments

Comments
 (0)