Skip to content

Commit 8a03d9f

Browse files
committed
test: add integration tests for createEvmWalletBundle with real wagmi
1 parent 681b0f1 commit 8a03d9f

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import { render, screen } from '@testing-library/react'
2+
import type { FC, ReactNode } from 'react'
3+
import { createElement } from 'react'
4+
import { http } from 'viem'
5+
import { mainnet } from 'viem/chains'
6+
import { describe, expect, it } from 'vitest'
7+
import { createConfig } from 'wagmi'
8+
import { mock } from 'wagmi/connectors'
9+
10+
import type { EvmConnectorConfig } from './types'
11+
import { createEvmWalletBundle } from './wallet-bundle'
12+
13+
const TEST_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' as const
14+
15+
const MockWalletProvider: FC<{ children: ReactNode }> = ({ children }) =>
16+
createElement('div', { 'data-testid': 'mock-wallet-provider' }, children)
17+
18+
const mockUseConnectModal = () => ({ open: () => {} })
19+
20+
const testConnector: EvmConnectorConfig = {
21+
createConfig(chains, transports) {
22+
return createConfig({
23+
chains: chains as [typeof mainnet],
24+
transports,
25+
connectors: [mock({ accounts: [TEST_ADDRESS] })],
26+
})
27+
},
28+
WalletProvider: MockWalletProvider,
29+
useConnectModal: mockUseConnectModal,
30+
}
31+
32+
describe('createEvmWalletBundle', () => {
33+
it('returns a bundle with adapter, Provider, useConnectModal, and readClientFactory', () => {
34+
const bundle = createEvmWalletBundle({
35+
connector: testConnector,
36+
chains: [mainnet],
37+
transports: { [mainnet.id]: http() },
38+
})
39+
40+
expect(bundle.adapter).toBeDefined()
41+
expect(bundle.Provider).toBeDefined()
42+
expect(bundle.useConnectModal).toBeDefined()
43+
expect(bundle.readClientFactory).toBeDefined()
44+
})
45+
46+
it('adapter has chainType "evm"', () => {
47+
const bundle = createEvmWalletBundle({
48+
connector: testConnector,
49+
chains: [mainnet],
50+
transports: { [mainnet.id]: http() },
51+
})
52+
53+
expect(bundle.adapter.chainType).toBe('evm')
54+
})
55+
56+
it('readClientFactory has chainType "evm"', () => {
57+
const bundle = createEvmWalletBundle({
58+
connector: testConnector,
59+
chains: [mainnet],
60+
transports: { [mainnet.id]: http() },
61+
})
62+
63+
expect(bundle.readClientFactory?.chainType).toBe('evm')
64+
})
65+
66+
it('Provider renders children through the wagmi + query + connector provider stack', () => {
67+
const bundle = createEvmWalletBundle({
68+
connector: testConnector,
69+
chains: [mainnet],
70+
transports: { [mainnet.id]: http() },
71+
})
72+
73+
const BundleProvider = bundle.Provider!
74+
75+
render(
76+
createElement(
77+
BundleProvider,
78+
null,
79+
createElement('div', { 'data-testid': 'child-content' }, 'Hello from child'),
80+
),
81+
)
82+
83+
expect(screen.getByTestId('child-content')).toHaveTextContent('Hello from child')
84+
expect(screen.getByTestId('mock-wallet-provider')).toBeInTheDocument()
85+
})
86+
87+
it('throws when chains is empty', () => {
88+
expect(() =>
89+
createEvmWalletBundle({
90+
connector: testConnector,
91+
chains: [],
92+
transports: {},
93+
}),
94+
).toThrow('createEvmWalletAdapter requires at least one chain')
95+
})
96+
})

0 commit comments

Comments
 (0)