import { describe, it, expect, vi, beforeEach } from 'vitest'; import { getPermit2Nonce } from './permit2-nonce'; import { PublicActions } from 'viem'; describe('permit2-nonce', () => { const now = new Date('2023-01-01T00:00:00Z'); const getNow = () => Math.floor(now.getTime() / 1000); beforeEach(() => { vi.useFakeTimers(); }); it('getPermit2Nonce should return correct nonce', async () => { const mockClient = { readContract: vi.fn().mockResolvedValue(0n), } as unknown as PublicActions; const account = '0x1234567890123456789012345678901234567890'; const spender = '0x0987654321098765432109876543210987654321'; const nonce = await getPermit2Nonce(mockClient, account, spender, getNow); expect(nonce).toBeDefined(); expect(typeof nonce).toBe('bigint'); expect(mockClient.readContract).toHaveBeenCalledWith({ address: '0x000000000022D473030F116dDEE9F6B43aC78BA3', abi: expect.any(Array), functionName: 'nonceBitmap', args: expect.any(Array), }); }); it('getPermit2Nonce should handle multiple bitmap checks', async () => { const mockClient = { readContract: vi .fn() .mockResolvedValueOnce(2n ** 256n - 1n) // All bits set .mockResolvedValueOnce(0n), // No bits set } as unknown as PublicActions; const account = '0x1234567890123456789012345678901234567890'; const spender = '0x0987654321098765432109876543210987654321'; const nonce = await getPermit2Nonce(mockClient, account, spender, getNow); expect(nonce).toBeDefined(); expect(typeof nonce).toBe('bigint'); expect(mockClient.readContract).toHaveBeenCalledTimes(2); }); });