Skip to content

Commit d85d943

Browse files
committed
test respond flow
1 parent 8a0b744 commit d85d943

File tree

5 files changed

+87
-724
lines changed

5 files changed

+87
-724
lines changed

Tests/ShopifyCheckoutSheetKitTests/CheckoutAddressChangeStartTests.swift

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,49 @@
2525
import XCTest
2626

2727
class CheckoutAddressChangeStartTests: XCTestCase {
28+
// MARK: - Response Tests
29+
30+
func testRespondWithSendsJavaScriptToWebView() throws {
31+
let mockWebView = MockWebView()
32+
let params = CheckoutAddressChangeStartParams(
33+
addressType: "shipping",
34+
cart: createTestCart()
35+
)
36+
let request = CheckoutAddressChangeStart(id: "test-id-789", params: params)
37+
request.webview = mockWebView
38+
39+
let payload = CheckoutAddressChangeStartResponsePayload(
40+
cart: CartInput(
41+
delivery: CartDeliveryInput(
42+
addresses: [
43+
CartSelectableAddressInput(
44+
address: CartDeliveryAddressInput(countryCode: "US")
45+
)
46+
]
47+
)
48+
)
49+
)
50+
51+
let expectation = expectation(description: "JavaScript executed")
52+
mockWebView.evaluateJavaScriptExpectation = expectation
53+
54+
try request.respondWith(payload: payload)
55+
56+
waitForExpectations(timeout: 2.0)
57+
58+
// Verify the JavaScript was executed and contains the expected JSON-RPC response
59+
XCTAssertNotNil(mockWebView.capturedJavaScript, "JavaScript should have been executed")
60+
61+
let capturedJS = mockWebView.capturedJavaScript ?? ""
62+
63+
// Verify the response contains expected JSON-RPC fields
64+
XCTAssertTrue(capturedJS.contains("window.postMessage"), "Should call window.postMessage")
65+
XCTAssertTrue(capturedJS.contains("\"jsonrpc\":\"2.0\""), "Should include JSON-RPC version")
66+
XCTAssertTrue(capturedJS.contains("\"id\":\"test-id-789\""), "Should include request ID")
67+
XCTAssertTrue(capturedJS.contains("\"result\""), "Should include result field")
68+
XCTAssertTrue(capturedJS.contains("\"cart\""), "Should include cart in result")
69+
}
70+
2871
// MARK: - Validation Tests
2972

3073
func testValidateAcceptsValid2CharacterCountryCode() throws {

Tests/ShopifyCheckoutSheetKitTests/CheckoutSubmitStartTests.swift

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,40 @@
2525
import XCTest
2626

2727
class CheckoutSubmitStartTests: XCTestCase {
28+
// MARK: - Response Tests
29+
30+
func testRespondWithSendsJavaScriptToWebView() throws {
31+
let mockWebView = MockWebView()
32+
let params = CheckoutSubmitStartParams(
33+
cart: createTestCart(),
34+
checkout: Checkout(id: "test-checkout-123")
35+
)
36+
let request = CheckoutSubmitStart(id: "test-id-456", params: params)
37+
request.webview = mockWebView
38+
39+
let payload = CheckoutSubmitStartResponsePayload(payment: nil, cart: nil, errors: nil)
40+
41+
let expectation = expectation(description: "JavaScript executed")
42+
mockWebView.evaluateJavaScriptExpectation = expectation
43+
44+
try request.respondWith(payload: payload)
45+
46+
waitForExpectations(timeout: 2.0)
47+
48+
// Verify the JavaScript was executed and contains the expected JSON-RPC response
49+
XCTAssertNotNil(mockWebView.capturedJavaScript, "JavaScript should have been executed")
50+
51+
let capturedJS = mockWebView.capturedJavaScript ?? ""
52+
53+
// Verify the response contains expected JSON-RPC fields
54+
XCTAssertTrue(capturedJS.contains("window.postMessage"), "Should call window.postMessage")
55+
XCTAssertTrue(capturedJS.contains("\"jsonrpc\":\"2.0\""), "Should include JSON-RPC version")
56+
XCTAssertTrue(capturedJS.contains("\"id\":\"test-id-456\""), "Should include request ID")
57+
XCTAssertTrue(capturedJS.contains("\"result\""), "Should include result field")
58+
}
59+
60+
// MARK: - Decoding Tests
61+
2862
func testDecodesCheckoutSessionId() throws {
2963
let json = """
3064
{

Tests/ShopifyCheckoutSheetKitTests/Mocks/MockCheckoutWebViewDelegate.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,8 @@ class MockCheckoutWebViewDelegate: CheckoutWebViewDelegate {
9595
func checkoutViewDidRequestCardChange(event _: CheckoutCardChangeRequested) {
9696
// No-op for tests unless explicitly asserted
9797
}
98+
99+
func checkoutViewDidStartSubmit(event _: CheckoutSubmitStart) {
100+
// No-op for tests unless explicitly asserted
101+
}
98102
}

Tests/ShopifyCheckoutSheetKitTests/Mocks/MockWebView.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ class MockWebView: CheckoutWebView {
3030

3131
var evaluateJavaScriptExpectation: XCTestExpectation?
3232

33+
var capturedJavaScript: String?
34+
3335
override func evaluateJavaScript(_ javaScriptString: String) async throws -> Any {
34-
if javaScriptString == expectedScript {
36+
capturedJavaScript = javaScriptString
37+
if !javaScriptString.isEmpty {
38+
evaluateJavaScriptExpectation?.fulfill()
39+
} else if javaScriptString == expectedScript {
3540
evaluateJavaScriptExpectation?.fulfill()
3641
}
3742
return true

0 commit comments

Comments
 (0)