From d11e71f7ce263249136fb3ba71738893d84c71a2 Mon Sep 17 00:00:00 2001 From: Tom Meagher Date: Fri, 27 Sep 2024 16:45:55 -0400 Subject: [PATCH] test: up --- .../core/src/actions/sendTransaction.test.ts | 7 +- .../core/src/transports/connector.test.ts | 75 +++++++++++++++++++ packages/react/src/hooks/useBalance.test.ts | 17 +++-- .../vue/src/composables/useBalance.test.ts | 16 ++-- 4 files changed, 99 insertions(+), 16 deletions(-) diff --git a/packages/core/src/actions/sendTransaction.test.ts b/packages/core/src/actions/sendTransaction.test.ts index d57aa4254c..ca4e41ba06 100644 --- a/packages/core/src/actions/sendTransaction.test.ts +++ b/packages/core/src/actions/sendTransaction.test.ts @@ -1,6 +1,6 @@ import { config, privateKey, transactionHashRegex } from '@wagmi/test' import { parseEther } from 'viem' -import { expect, test } from 'vitest' +import { beforeEach, expect, test } from 'vitest' import { privateKeyToAccount } from 'viem/accounts' import { connect } from './connect.js' @@ -9,6 +9,11 @@ import { sendTransaction } from './sendTransaction.js' const connector = config.connectors[0]! +beforeEach(async () => { + if (config.state.current === connector.uid) + await disconnect(config, { connector }) +}) + test('default', async () => { await connect(config, { connector }) await expect( diff --git a/packages/core/src/transports/connector.test.ts b/packages/core/src/transports/connector.test.ts index 81a8bd07c7..a9b733ff25 100644 --- a/packages/core/src/transports/connector.test.ts +++ b/packages/core/src/transports/connector.test.ts @@ -1,6 +1,13 @@ +import { config } from '@wagmi/test' import { expect, test } from 'vitest' + +import { mock } from '../connectors/mock.js' import { injected } from '../connectors/injected.js' import { unstable_connector } from './connector.js' +import { createStore } from 'zustand' +import { optimism } from 'viem/chains' + +const connector = config.connectors[0]! test('setup', () => { expect(unstable_connector(injected)({})).toMatchInlineSnapshot(` @@ -19,3 +26,71 @@ test('setup', () => { } `) }) + +test('behavior: connector type not found', () => { + const transport = unstable_connector({ type: 'foo' })({}) + expect(() => + transport.request({ method: 'eth_chainId' }), + ).rejects.toThrowErrorMatchingInlineSnapshot(` + [ProviderDisconnectedError: The Provider is disconnected from all chains. + + Details: Could not find connector of type "foo" in \`connectors\` passed to \`createConfig\`. + Version: viem@2.17.0] + `) +}) + +test('behavior: provider is disconnected', () => { + const transport = unstable_connector(mock)({ + connectors: createStore(() => [ + { + ...connector, + async getProvider() { + return undefined + }, + }, + ]), + }) + + expect(() => + transport.request({ method: 'eth_chainId' }), + ).rejects.toThrowErrorMatchingInlineSnapshot(` + [ProviderDisconnectedError: The Provider is disconnected from all chains. + + Details: Provider is disconnected. + Version: viem@2.17.0] + `) +}) + +test('behavior: chainId mismatch', () => { + const transport = unstable_connector(mock)({ + chain: optimism, + connectors: createStore(() => [ + { + ...connector, + async getProvider(options = {}) { + if (options.chainId === optimism.id) return connector.getProvider() + return undefined + }, + }, + ]), + }) + + expect(() => + transport.request({ method: 'eth_chainId' }), + ).rejects.toThrowErrorMatchingInlineSnapshot(` + [ChainDisconnectedError: The Provider is not connected to the requested chain. + + Details: The current chain of the connector (id: 1) does not match the target chain for the request (id: 10 – OP Mainnet). + Version: viem@2.17.0] + `) +}) + +test('behavior: request', () => { + const transport = unstable_connector(mock)({ + connectors: createStore(() => [connector]), + }) + + expect( + transport.request({ method: 'eth_chainId' }), + ).resolves.toThrowErrorMatchingInlineSnapshot(`"0x1"`) +}) diff --git a/packages/react/src/hooks/useBalance.test.ts b/packages/react/src/hooks/useBalance.test.ts index fa675d4c8b..ba7f857808 100644 --- a/packages/react/src/hooks/useBalance.test.ts +++ b/packages/react/src/hooks/useBalance.test.ts @@ -19,14 +19,17 @@ test('default', async () => { await waitFor(() => expect(result.current.isSuccess).toBeTruthy()) - expect(result.current).toMatchInlineSnapshot(` + const { data, ...rest } = result.current + expect(data).toMatchObject( + expect.objectContaining({ + decimals: expect.any(Number), + formatted: expect.any(String), + symbol: expect.any(String), + value: expect.any(BigInt), + }), + ) + expect(rest).toMatchInlineSnapshot(` { - "data": { - "decimals": 18, - "formatted": "10000", - "symbol": "ETH", - "value": 10000000000000000000000n, - }, "dataUpdatedAt": 1675209600000, "error": null, "errorUpdateCount": 0, diff --git a/packages/vue/src/composables/useBalance.test.ts b/packages/vue/src/composables/useBalance.test.ts index b6967d70f9..cf2662d302 100644 --- a/packages/vue/src/composables/useBalance.test.ts +++ b/packages/vue/src/composables/useBalance.test.ts @@ -20,14 +20,14 @@ test('default', async () => { await waitFor(query.isSuccess) - expect(query.data.value).toMatchInlineSnapshot(` - { - "decimals": 18, - "formatted": "10000", - "symbol": "ETH", - "value": 10000000000000000000000n, - } - `) + expect(query.data.value).toMatchObject( + expect.objectContaining({ + decimals: expect.any(Number), + formatted: expect.any(String), + symbol: expect.any(String), + value: expect.any(BigInt), + }), + ) }) test('parameters: chainId', async () => {