Files
Reflect/Tests iOS/DeepLinkTests.swift
Trey t 16c5c34942 Fix 4 flaky UI tests for iOS 26 compatibility
- AppLaunchTests/StabilityTests: Increase assertTabSelected timeout to
  8s for iOS 26 Liquid Glass delayed isSelected state updates
- DeepLinkTests: Detect SubscriptionStoreView container instead of text
  labels, since Apple's native view shows "Subscription Unavailable" in
  test storefront
- SettingsActionTests: Check for empty state after clearing data, bump
  Settings header timeout to 8s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 18:59:22 -06:00

74 lines
2.4 KiB
Swift

//
// 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() {
// Verify app launched and is on Day tab
let tabBar = TabBarScreen(app: app)
XCTAssertTrue(
tabBar.dayTab.waitForExistence(timeout: 5),
"App should launch to Day tab"
)
// Send a malformed deep link
let malformedURL = URL(string: "reflect://invalidpath")!
app.open(malformedURL)
// App should still be running and responsive verify Day tab still exists
XCTAssertTrue(
tabBar.dayTab.waitForExistence(timeout: 5),
"App should remain functional after malformed deep link"
)
// Navigate to another tab to verify full responsiveness
tabBar.tapYear()
XCTAssertTrue(
tabBar.yearTab.waitForExistence(timeout: 3),
"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() {
// Verify app launched
let tabBar = TabBarScreen(app: app)
XCTAssertTrue(
tabBar.dayTab.waitForExistence(timeout: 5),
"App should launch to Day tab"
)
captureScreenshot(name: "deeplink_before_subscribe")
// Send subscribe deep link
let subscribeURL = URL(string: "reflect://subscribe")!
app.open(subscribeURL)
// Subscription view should appear as a sheet.
// Detect the SubscriptionStoreView container (works even when products are unavailable in test).
let storeContainer = app.descendants(matching: .any)
.matching(identifier: "Subscription Store View Container")
.firstMatch
let found = storeContainer.waitForExistence(timeout: 8)
captureScreenshot(name: "deeplink_subscribe_result")
XCTAssertTrue(found,
"Subscription view should appear after reflect://subscribe deep link"
)
}
}