Files
Reflect/Tests iOS/DeepLinkTests.swift
Trey t 0442eab1f8 Rebrand entire project from Feels to Reflect
Complete rename across all bundle IDs, App Groups, CloudKit containers,
StoreKit product IDs, data store filenames, URL schemes, logger subsystems,
Swift identifiers, user-facing strings (7 languages), file names, directory
names, Xcode project, schemes, assets, and documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 11:47:16 -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.
// Look for common subscription UI elements.
let subscribeText = app.staticTexts.matching(
NSPredicate(format: "label CONTAINS[c] 'subscribe' OR label CONTAINS[c] 'premium' OR label CONTAINS[c] 'upgrade' OR label CONTAINS[c] 'Reflect+'")
).firstMatch
let found = subscribeText.waitForExistence(timeout: 8)
captureScreenshot(name: "deeplink_subscribe_result")
XCTAssertTrue(found,
"Subscription view should appear after reflect://subscribe deep link"
)
}
}