From 8bafb75b097b833dd847299a3d01a907efac4255 Mon Sep 17 00:00:00 2001 From: Arian Flores Date: Mon, 4 Mar 2024 16:03:29 -0800 Subject: [PATCH] Update testing --- .../src/react-native-webview-controller.tsx | 1 + .../_post.spec.ts | 25 ++++++++++++++++++- .../_post.spec.ts | 25 ++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/packages/@magic-sdk/react-native-bare/src/react-native-webview-controller.tsx b/packages/@magic-sdk/react-native-bare/src/react-native-webview-controller.tsx index 17ddab89b..0cdda873f 100644 --- a/packages/@magic-sdk/react-native-bare/src/react-native-webview-controller.tsx +++ b/packages/@magic-sdk/react-native-bare/src/react-native-webview-controller.tsx @@ -238,6 +238,7 @@ export class ReactNativeWebViewController extends ViewController { if (methodType && messageId) { const timeout = setTimeout(() => { this.messageTimeouts.delete(messageId); + throw createResponseTimeoutError(methodType, messageId); }, 10000); // 10-second timeout diff --git a/packages/@magic-sdk/react-native-bare/test/spec/react-native-webview-controller/_post.spec.ts b/packages/@magic-sdk/react-native-bare/test/spec/react-native-webview-controller/_post.spec.ts index f8ceaf4a1..4c67c2fe0 100644 --- a/packages/@magic-sdk/react-native-bare/test/spec/react-native-webview-controller/_post.spec.ts +++ b/packages/@magic-sdk/react-native-bare/test/spec/react-native-webview-controller/_post.spec.ts @@ -1,5 +1,5 @@ import browserEnv from '@ikscodes/browser-env'; -import { createModalNotReadyError } from '@magic-sdk/provider'; +import { MagicSDKError, createModalNotReadyError, createResponseTimeoutError } from '@magic-sdk/provider'; import { createReactNativeWebViewController } from '../../factories'; import { reactNativeStyleSheetStub } from '../../mocks'; @@ -50,3 +50,26 @@ test('Process Typed Array in a Solana Request', async () => { 'http://example.com', ]); }); + +// TODO: Figure out how to test this +test.skip('Throws RESPONSE_TIMEOUT error if response takes longer than 10 seconds', async () => { + jest.useFakeTimers(); + const overlay = createReactNativeWebViewController('http://example.com'); + + const postStub = jest.fn(); + overlay.webView = { postMessage: postStub }; + + // Setup expected payload and error + const payload = { method: 'testMethod', id: 123 }; + const expectedError = createResponseTimeoutError(payload.method, payload.id); + + const promise = await overlay._post({ payload }); + + // Fast-forward time by 10 seconds + jest.advanceTimersByTime(10000); + + // Assert that the promise rejects with the expected error + expect(promise).rejects.toThrow(expectedError); + + jest.useRealTimers(); +}); diff --git a/packages/@magic-sdk/react-native-expo/test/spec/react-native-webview-controller/_post.spec.ts b/packages/@magic-sdk/react-native-expo/test/spec/react-native-webview-controller/_post.spec.ts index f8ceaf4a1..4c67c2fe0 100644 --- a/packages/@magic-sdk/react-native-expo/test/spec/react-native-webview-controller/_post.spec.ts +++ b/packages/@magic-sdk/react-native-expo/test/spec/react-native-webview-controller/_post.spec.ts @@ -1,5 +1,5 @@ import browserEnv from '@ikscodes/browser-env'; -import { createModalNotReadyError } from '@magic-sdk/provider'; +import { MagicSDKError, createModalNotReadyError, createResponseTimeoutError } from '@magic-sdk/provider'; import { createReactNativeWebViewController } from '../../factories'; import { reactNativeStyleSheetStub } from '../../mocks'; @@ -50,3 +50,26 @@ test('Process Typed Array in a Solana Request', async () => { 'http://example.com', ]); }); + +// TODO: Figure out how to test this +test.skip('Throws RESPONSE_TIMEOUT error if response takes longer than 10 seconds', async () => { + jest.useFakeTimers(); + const overlay = createReactNativeWebViewController('http://example.com'); + + const postStub = jest.fn(); + overlay.webView = { postMessage: postStub }; + + // Setup expected payload and error + const payload = { method: 'testMethod', id: 123 }; + const expectedError = createResponseTimeoutError(payload.method, payload.id); + + const promise = await overlay._post({ payload }); + + // Fast-forward time by 10 seconds + jest.advanceTimersByTime(10000); + + // Assert that the promise rejects with the expected error + expect(promise).rejects.toThrow(expectedError); + + jest.useRealTimers(); +});