Skip to content

Commit b6132f9

Browse files
0xmkhsvenvoskamp
andauthored
fix: core tests (#5282)
Co-authored-by: Sven <fr.sven.fr@gmail.com>
1 parent 22c7f23 commit b6132f9

5 files changed

Lines changed: 46 additions & 12 deletions

File tree

apps/laboratory/tests/core-sign-client.spec.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import { BASE_URL, WalletPage, WalletValidator } from '@reown/appkit-testing'
44

55
import { expect } from './shared/fixtures/w3m-fixture'
66
import { ModalPage } from './shared/pages/ModalPage'
7+
import { ModalWalletValidator } from './shared/validators/ModalWalletValidator'
78

89
/* eslint-disable init-declarations */
910
let modalPage: ModalPage
1011
let walletPage: WalletPage
1112
let walletValidator: WalletValidator
1213
let context: BrowserContext
14+
let validator: ModalWalletValidator
1315
/* eslint-enable init-declarations */
1416

1517
// -- Setup --------------------------------------------------------------------
@@ -29,6 +31,7 @@ signClientTest.beforeAll(async ({ browser }) => {
2931
modalPage = new ModalPage(browserPage, 'library', 'core-sign-client')
3032
walletPage = new WalletPage(await context.newPage())
3133
walletValidator = new WalletValidator(walletPage.page)
34+
validator = new ModalWalletValidator(browserPage)
3235

3336
await walletPage.load()
3437

@@ -68,7 +71,7 @@ signClientTest('it should sign message with sign client', async () => {
6871
await modalPage.page.getByTestId('sign-message-button').click()
6972
await walletValidator.expectReceivedSign({ chainName: 'Ethereum' })
7073
await walletPage.handleRequest({ accept: true })
71-
await expect(modalPage.page.getByText('Signing Succeeded')).toBeVisible()
74+
await validator.expectAcceptedSign()
7275
})
7376

7477
signClientTest('it should switch networks with sign client', async () => {
@@ -83,7 +86,7 @@ signClientTest('it should sign message after network switch with sign client', a
8386
await modalPage.page.getByTestId('sign-message-button').click()
8487
await walletValidator.expectReceivedSign({ chainName: 'Polygon' })
8588
await walletPage.handleRequest({ accept: true })
86-
await expect(modalPage.page.getByText('Signing Succeeded')).toBeVisible()
89+
await validator.expectAcceptedSign()
8790
})
8891

8992
signClientTest('it should stay connected after page refresh with sign client', async () => {
@@ -96,7 +99,7 @@ signClientTest('it should reject sign message with sign client', async () => {
9699
await modalPage.page.getByTestId('sign-message-button').click()
97100
await walletValidator.expectReceivedSign({ chainName: 'Ethereum' })
98101
await walletPage.handleRequest({ accept: false })
99-
await expect(modalPage.page.getByText('Failed to sign')).toBeVisible()
102+
await validator.expectRejectedSign()
100103
})
101104

102105
signClientTest('it should switch between various networks with sign client', async () => {

apps/laboratory/tests/core-universal-provider.spec.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import { BASE_URL, WalletPage, WalletValidator } from '@reown/appkit-testing'
44

55
import { expect } from './shared/fixtures/w3m-fixture'
66
import { ModalPage } from './shared/pages/ModalPage'
7+
import { ModalWalletValidator } from './shared/validators/ModalWalletValidator'
78

89
/* eslint-disable init-declarations */
910
let modalPage: ModalPage
1011
let walletPage: WalletPage
1112
let walletValidator: WalletValidator
1213
let context: BrowserContext
14+
let validator: ModalWalletValidator
1315
/* eslint-enable init-declarations */
1416

1517
// -- Setup --------------------------------------------------------------------
@@ -29,6 +31,7 @@ universalProviderTest.beforeAll(async ({ browser }) => {
2931
modalPage = new ModalPage(browserPage, 'library', 'core-universal-provider')
3032
walletPage = new WalletPage(await context.newPage())
3133
walletValidator = new WalletValidator(walletPage.page)
34+
validator = new ModalWalletValidator(browserPage)
3235

3336
await walletPage.load()
3437

@@ -68,7 +71,7 @@ universalProviderTest('it should sign message with universal provider', async ()
6871
await modalPage.page.getByTestId('sign-message-button').click()
6972
await walletValidator.expectReceivedSign({ chainName: 'Ethereum' })
7073
await walletPage.handleRequest({ accept: true })
71-
await expect(modalPage.page.getByText('Signing Succeeded')).toBeVisible()
74+
await validator.expectAcceptedSign()
7275
})
7376

7477
universalProviderTest('it should switch networks with universal provider', async () => {
@@ -83,7 +86,7 @@ universalProviderTest('it should sign message after network switch with UP', asy
8386
await modalPage.page.getByTestId('sign-message-button').click()
8487
await walletValidator.expectReceivedSign({ chainName: 'Polygon' })
8588
await walletPage.handleRequest({ accept: true })
86-
await expect(modalPage.page.getByText('Signing Succeeded')).toBeVisible()
89+
await validator.expectAcceptedSign()
8790
})
8891

8992
universalProviderTest('it should stay connected after page refresh with UP', async () => {
@@ -96,7 +99,7 @@ universalProviderTest('it should reject sign message with UP', async () => {
9699
await modalPage.page.getByTestId('sign-message-button').click()
97100
await walletValidator.expectReceivedSign({ chainName: 'Ethereum' })
98101
await walletPage.handleRequest({ accept: false })
99-
await expect(modalPage.page.getByText('Failed to sign')).toBeVisible()
102+
await validator.expectRejectedSign()
100103
})
101104

102105
universalProviderTest('it should switch between various networks with UP', async () => {

apps/laboratory/tests/core.spec.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import { BASE_URL, WalletPage, WalletValidator } from '@reown/appkit-testing'
44

55
import { expect } from './shared/fixtures/w3m-fixture'
66
import { ModalPage } from './shared/pages/ModalPage'
7+
import { ModalWalletValidator } from './shared/validators/ModalWalletValidator'
78

89
/* eslint-disable init-declarations */
910
let modalPage: ModalPage
1011
let walletPage: WalletPage
1112
let walletValidator: WalletValidator
1213
let context: BrowserContext
14+
let validator: ModalWalletValidator
15+
1316
/* eslint-enable init-declarations */
1417

1518
// -- Setup --------------------------------------------------------------------
@@ -29,6 +32,7 @@ coreTest.beforeAll(async ({ browser }) => {
2932
modalPage = new ModalPage(browserPage, 'library', 'core')
3033
walletPage = new WalletPage(await context.newPage())
3134
walletValidator = new WalletValidator(walletPage.page)
35+
validator = new ModalWalletValidator(browserPage)
3236

3337
await walletPage.load()
3438

@@ -66,7 +70,7 @@ coreTest('it should sign message', async () => {
6670
await modalPage.page.getByTestId('sign-message-button').click()
6771
await walletValidator.expectReceivedSign({ chainName: 'Ethereum' })
6872
await walletPage.handleRequest({ accept: true })
69-
await expect(modalPage.page.getByText('Signing Succeeded')).toBeVisible()
73+
await validator.expectAcceptedSign()
7074
})
7175

7276
coreTest('it should switch networks', async () => {
@@ -82,7 +86,7 @@ coreTest('it should sign message after network switch', async () => {
8286
await modalPage.page.getByTestId('sign-message-button').click()
8387
await walletValidator.expectReceivedSign({ chainName: 'Polygon' })
8488
await walletPage.handleRequest({ accept: true })
85-
await expect(modalPage.page.getByText('Signing Succeeded')).toBeVisible()
89+
await validator.expectAcceptedSign()
8690
})
8791

8892
coreTest('it should stay connected after page refresh', async () => {
@@ -94,7 +98,7 @@ coreTest('it should reject sign message', async () => {
9498
await modalPage.page.getByTestId('sign-message-button').click()
9599
await walletValidator.expectReceivedSign({ chainName: 'Polygon' })
96100
await walletPage.handleRequest({ accept: false })
97-
await expect(modalPage.page.getByText('Signing Failed')).toBeVisible()
101+
await validator.expectRejectedSign()
98102
})
99103

100104
coreTest('it should switch between various networks', async () => {

packages/appkit/src/client/appkit-base-client.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1791,7 +1791,27 @@ export abstract class AppKitBaseClient {
17911791
OptionsController.setManualWCControl(Boolean(this.options?.manualWCControl))
17921792
this.universalProvider =
17931793
this.options.universalProvider ?? (await UniversalProvider.init(universalProviderOptions))
1794-
// Clear the session if we don't want to reconnect on init
1794+
1795+
const originalDisconnect = this.universalProvider.disconnect.bind(this.universalProvider)
1796+
1797+
this.universalProvider.disconnect = async () => {
1798+
try {
1799+
return await originalDisconnect()
1800+
} catch (error) {
1801+
if (error instanceof Error) {
1802+
const isAlreadyDisconnected = error.message.includes(
1803+
'Missing or invalid. Record was recently deleted'
1804+
)
1805+
1806+
if (isAlreadyDisconnected) {
1807+
return undefined
1808+
}
1809+
}
1810+
1811+
throw error
1812+
}
1813+
}
1814+
17951815
if (OptionsController.state.enableReconnect === false && this.universalProvider.session) {
17961816
await this.universalProvider.disconnect()
17971817
}

packages/appkit/tests/mocks/Providers.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ export const mockAuthProvider = {
4242
syncTheme: vi.fn()
4343
}
4444

45-
export const mockUniversalProvider: Mocked<Pick<UniversalProvider, 'on' | 'off'>> = {
45+
export const mockUniversalProvider: Mocked<
46+
Pick<UniversalProvider, 'on' | 'off' | 'disconnect' | 'connect'>
47+
> = {
4648
off: vi.fn(),
47-
on: vi.fn()
49+
on: vi.fn(),
50+
disconnect: vi.fn().mockResolvedValue(undefined),
51+
connect: vi.fn().mockResolvedValue(undefined)
4852
}

0 commit comments

Comments
 (0)