Files
Reflect/Tests iOS/PremiumCustomizationTests.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

105 lines
3.9 KiB
Swift

//
// 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 tabBar = TabBarScreen(app: app)
let settingsScreen = tabBar.tapSettings()
settingsScreen.assertVisible()
// Verify the upgrade banner is visible
settingsScreen.assertUpgradeBannerVisible()
captureScreenshot(name: "customize_upgrade_banner")
}
/// TC-075: Subscribe button visible on Customize tab when trial expired.
func testCustomizeTab_SubscribeButtonVisible_WhenTrialExpired() {
let tabBar = TabBarScreen(app: app)
let settingsScreen = tabBar.tapSettings()
settingsScreen.assertVisible()
// Verify the subscribe button exists
let subscribeButton = settingsScreen.subscribeButton
XCTAssertTrue(
subscribeButton.waitForExistence(timeout: 5),
"Subscribe button should be visible when trial is expired"
)
captureScreenshot(name: "customize_subscribe_button")
}
/// TC-075: Tapping subscribe button opens subscription sheet.
func testCustomizeTab_SubscribeButtonOpensSheet() {
let tabBar = TabBarScreen(app: app)
let settingsScreen = tabBar.tapSettings()
settingsScreen.assertVisible()
// Tap the subscribe button
let subscribeButton = settingsScreen.subscribeButton
XCTAssertTrue(
subscribeButton.waitForExistence(timeout: 5),
"Subscribe button should exist"
)
subscribeButton.tapWhenReady()
// Verify the subscription sheet appears look for common subscription
// sheet elements (subscription store view or paywall content).
// The ReflectSubscriptionStoreView should appear as a sheet.
// Give extra time for StoreKit to load products.
let subscriptionSheet = app.otherElements.firstMatch
_ = subscriptionSheet.waitForExistence(timeout: 5)
// The subscription sheet is confirmed if it appeared without crashing.
// StoreKit may not load products in test environments, so just verify
// we didn't crash and can still interact with the app.
captureScreenshot(name: "subscription_sheet_opened")
// Dismiss the sheet by swiping down
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 also shows paywall gate when trial expired.
func testSettingsSubTab_ShowsPaywallGate_WhenTrialExpired() {
let tabBar = TabBarScreen(app: app)
let settingsScreen = tabBar.tapSettings()
settingsScreen.assertVisible()
// Switch to Settings sub-tab
settingsScreen.tapSettingsTab()
// Verify the upgrade banner or subscribe CTA is visible on Settings sub-tab too
let upgradeBanner = settingsScreen.upgradeBanner
let subscribeButton = settingsScreen.subscribeButton
// Either the upgrade banner or subscribe button should be present
let bannerExists = upgradeBanner.waitForExistence(timeout: 3)
let buttonExists = subscribeButton.waitForExistence(timeout: 3)
XCTAssertTrue(
bannerExists || buttonExists,
"Settings sub-tab should show upgrade CTA when trial is expired"
)
captureScreenshot(name: "settings_subtab_paywall_gate")
}
}