From 9ed9ec577115e4894ddf1c57a3098387062cfb30 Mon Sep 17 00:00:00 2001 From: Daniel Kift Date: Tue, 2 Jun 2026 17:14:16 +0100 Subject: [PATCH] resolve test flake on evaluateJavascript --- .../ShopifyCheckoutKit/CheckoutBridge.swift | 12 +++++++- .../CheckoutBridgeTests.swift | 30 +++++++++---------- .../Mocks/MockWebView.swift | 16 ---------- 3 files changed, 25 insertions(+), 33 deletions(-) delete mode 100644 platforms/swift/Tests/ShopifyCheckoutKitTests/Mocks/MockWebView.swift diff --git a/platforms/swift/Sources/ShopifyCheckoutKit/CheckoutBridge.swift b/platforms/swift/Sources/ShopifyCheckoutKit/CheckoutBridge.swift index 65e6401b..bc471c0c 100644 --- a/platforms/swift/Sources/ShopifyCheckoutKit/CheckoutBridge.swift +++ b/platforms/swift/Sources/ShopifyCheckoutKit/CheckoutBridge.swift @@ -32,6 +32,16 @@ enum CheckoutBridge: CheckoutBridgeProtocol { } static func sendMessage(_ webView: WKWebView, messageName: String, messageBody: String?) { + sendMessage( + evaluateJavaScript: { script in + webView.evaluateJavaScript(script) + }, + messageName: messageName, + messageBody: messageBody + ) + } + + static func sendMessage(evaluateJavaScript: (String) -> Void, messageName: String, messageBody: String?) { let dispatchMessageBody: String if let body = messageBody { dispatchMessageBody = "'\(messageName)', \(body)" @@ -39,7 +49,7 @@ enum CheckoutBridge: CheckoutBridgeProtocol { dispatchMessageBody = "'\(messageName)'" } let script = dispatchMessageTemplate(body: dispatchMessageBody) - webView.evaluateJavaScript(script) + evaluateJavaScript(script) } static func sendResponse(_ webView: WKWebView, messageBody: String) { diff --git a/platforms/swift/Tests/ShopifyCheckoutKitTests/CheckoutBridgeTests.swift b/platforms/swift/Tests/ShopifyCheckoutKitTests/CheckoutBridgeTests.swift index 7e020078..72c5727f 100644 --- a/platforms/swift/Tests/ShopifyCheckoutKitTests/CheckoutBridgeTests.swift +++ b/platforms/swift/Tests/ShopifyCheckoutKitTests/CheckoutBridgeTests.swift @@ -55,29 +55,27 @@ class CheckoutBridgeTests: XCTestCase { } func testSendMessageShouldCallEvaluateJavaScriptPresented() { - let webView = MockWebView() - webView.expectedScript = expectedPresentedScript() - let evaluateJavaScriptExpectation = expectation( - description: "evaluateJavaScript was called" - ) - webView.evaluateJavaScriptExpectation = evaluateJavaScriptExpectation + var evaluatedScript: String? - CheckoutBridge.sendMessage(webView, messageName: "presented", messageBody: nil) + CheckoutBridge.sendMessage( + evaluateJavaScript: { evaluatedScript = $0 }, + messageName: "presented", + messageBody: nil + ) - wait(for: [evaluateJavaScriptExpectation], timeout: 2) + XCTAssertEqual(evaluatedScript, expectedPresentedScript()) } func testSendMessageWithPayloadEvaulatesJavaScript() { - let webView = MockWebView() - webView.expectedScript = expectedPayloadScript() - let evaluateJavaScriptExpectation = expectation( - description: "evaluateJavaScript was called" - ) - webView.evaluateJavaScriptExpectation = evaluateJavaScriptExpectation + var evaluatedScript: String? - CheckoutBridge.sendMessage(webView, messageName: "payload", messageBody: "{\"one\": true}") + CheckoutBridge.sendMessage( + evaluateJavaScript: { evaluatedScript = $0 }, + messageName: "payload", + messageBody: "{\"one\": true}" + ) - wait(for: [evaluateJavaScriptExpectation], timeout: 2) + XCTAssertEqual(evaluatedScript, expectedPayloadScript()) } private func expectedPresentedScript() -> String { diff --git a/platforms/swift/Tests/ShopifyCheckoutKitTests/Mocks/MockWebView.swift b/platforms/swift/Tests/ShopifyCheckoutKitTests/Mocks/MockWebView.swift deleted file mode 100644 index d7a4e014..00000000 --- a/platforms/swift/Tests/ShopifyCheckoutKitTests/Mocks/MockWebView.swift +++ /dev/null @@ -1,16 +0,0 @@ -@testable import ShopifyCheckoutKit -import WebKit -import XCTest - -class MockWebView: CheckoutWebView { - var expectedScript = "" - - var evaluateJavaScriptExpectation: XCTestExpectation? - - override func evaluateJavaScript(_ javaScriptString: String) async throws -> Any { - if javaScriptString == expectedScript { - evaluateJavaScriptExpectation?.fulfill() - } - return true - } -}