// // PremiumCustomizationTests.swift // Tests iOS // // Premium customization gate tests: verify upgrade banner and subscribe // button appear when trial is expired and user is not subscribed. // TC-075 // import XCTest final class PremiumCustomizationTests: BaseUITestCase { override var seedFixture: String? { "single_mood" } override var bypassSubscription: Bool { false } override var expireTrial: Bool { true } /// TC-075: Upgrade banner visible on Customize tab when trial expired. func testCustomizeTab_UpgradeBannerVisible_WhenTrialExpired() { let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.assertUpgradeBannerVisible() captureScreenshot(name: "customize_upgrade_banner") } /// TC-075: Subscribe button visible on Customize tab when trial expired. func testCustomizeTab_SubscribeButtonVisible_WhenTrialExpired() { let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.subscribeButton .waitForExistenceOrFail( timeout: navigationTimeout, message: "Subscribe button should be visible when trial is expired" ) captureScreenshot(name: "customize_subscribe_button") } /// TC-075: Tapping subscribe button opens subscription sheet without crash. func testCustomizeTab_SubscribeButtonOpensSheet() { let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.subscribeButton .waitUntilHittableOrFail(timeout: navigationTimeout, message: "Subscribe button should be hittable") .forceTap() // Verify the subscription sheet appears without crashing. // StoreKit may not load products in test environments, so just verify // we didn't crash and can still interact with the app after dismissing. captureScreenshot(name: "subscription_sheet_opened") // Dismiss the sheet app.swipeDown() // Verify we can still see the settings screen (no crash) settingsScreen.assertVisible() captureScreenshot(name: "settings_after_subscription_sheet_dismissed") } /// TC-075: Settings sub-tab shows upgrade CTA when trial expired. func testSettingsSubTab_ShowsPaywallGate_WhenTrialExpired() { let settingsScreen = TabBarScreen(app: app).tapSettings() settingsScreen.assertVisible() settingsScreen.tapSettingsTab() // Either the upgrade banner or subscribe button should be present let bannerExists = settingsScreen.upgradeBanner.waitForExistence(timeout: navigationTimeout) let buttonExists = settingsScreen.subscribeButton.waitForExistence(timeout: defaultTimeout) XCTAssertTrue( bannerExists || buttonExists, "Settings sub-tab should show upgrade CTA when trial is expired" ) captureScreenshot(name: "settings_subtab_paywall_gate") } }