// // TrialBannerTests.swift // Tests iOS // // TC-033: Trial warning banner shown. // TC-076: Fresh install starts 30-day trial. // TC-080: Trial banner hidden with bypass (DEBUG). // import XCTest /// Tests that verify trial banner visibility based on subscription state. final class TrialBannerTests: BaseUITestCase { override var seedFixture: String? { "single_mood" } /// TC-076: On fresh install without bypass, Settings shows an upgrade banner. func testFreshInstall_ShowsTrialBanner() { // Re-launch without bypass to see the banner relaunchApp(resetState: true, bypassSubscription: false) let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.upgradeBanner .waitForExistenceOrFail( timeout: navigationTimeout, message: "Upgrade banner should be visible on fresh install (trial active, no bypass)" ) captureScreenshot(name: "trial_banner_visible") } /// TC-080: With --bypass-subscription, the trial banner is hidden. func testTrialBanner_HiddenWithBypass() { let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.assertUpgradeBannerHidden() captureScreenshot(name: "trial_banner_hidden_bypass") } } /// Separate test class for trial warning banner (TC-033) using non-bypassed state. final class TrialWarningBannerTests: BaseUITestCase { override var seedFixture: String? { "single_mood" } override var bypassSubscription: Bool { false } override var expireTrial: Bool { false } /// TC-033: When trial is active (not expired, not bypassed), Settings shows a warning banner. func testTrialWarningBanner_Shown() { let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.upgradeBanner .waitForExistenceOrFail( timeout: navigationTimeout, message: "Trial warning banner should be visible when trial is active and subscription not bypassed" ) captureScreenshot(name: "trial_warning_banner") } }