// // DeepLinkTests.swift // Tests iOS // // TC-125, TC-126: Deep link handling. // import XCTest final class DeepLinkTests: BaseUITestCase { override var seedFixture: String? { "empty" } override var bypassSubscription: Bool { false } override var expireTrial: Bool { true } /// TC-126: Opening a malformed deep link does not crash the app. func testDeepLink_MalformedURL_NoCrash() { let tabBar = TabBarScreen(app: app) tabBar.assertVisible() // Send a malformed deep link app.open(URL(string: "reflect://invalidpath")!) // App should still be running and responsive -- tab bar visible tabBar.assertVisible() // Navigate to another tab to verify full responsiveness tabBar.tapYear() app.element(UITestID.Paywall.yearOverlay) .waitForExistenceOrFail( timeout: navigationTimeout, message: "App should be fully navigable after malformed deep link" ) captureScreenshot(name: "deeplink_malformed_no_crash") } /// TC-125: reflect://subscribe opens subscription view. func testDeepLink_Subscribe_OpensPaywall() { let tabBar = TabBarScreen(app: app) tabBar.assertVisible() captureScreenshot(name: "deeplink_before_subscribe") // Send subscribe deep link app.open(URL(string: "reflect://subscribe")!) // Subscription view should appear as a sheet. // Detect the SubscriptionStoreView container. let storeContainer = app.descendants(matching: .any) .matching(identifier: "Subscription Store View Container") .firstMatch storeContainer.waitForExistenceOrFail( timeout: 8, message: "Subscription view should appear after reflect://subscribe deep link" ) captureScreenshot(name: "deeplink_subscribe_result") } }