// // PaywallGateTests.swift // Tests iOS // // Paywall gate tests: verify paywall overlays appear on premium views // when trial is expired and subscription is not bypassed. // TC-032, TC-039, TC-048 // import XCTest final class PaywallGateTests: BaseUITestCase { override var seedFixture: String? { "empty" } override var bypassSubscription: Bool { false } override var expireTrial: Bool { true } /// TC-032: Paywall overlay appears on Month view when trial expired. func testMonthView_PaywallOverlay_WhenTrialExpired() { let tabBar = TabBarScreen(app: app) tabBar.tapMonth() // Verify the paywall overlay is present let overlay = app.descendants(matching: .any) .matching(identifier: UITestID.Paywall.monthOverlay) .firstMatch XCTAssertTrue( overlay.waitForExistence(timeout: 5), "Month paywall overlay should appear when trial is expired" ) captureScreenshot(name: "month_paywall_overlay") } /// TC-039: Paywall overlay appears on Year view when trial expired. func testYearView_PaywallOverlay_WhenTrialExpired() { let tabBar = TabBarScreen(app: app) tabBar.tapYear() // Verify the paywall overlay is present let overlay = app.descendants(matching: .any) .matching(identifier: UITestID.Paywall.yearOverlay) .firstMatch XCTAssertTrue( overlay.waitForExistence(timeout: 5), "Year paywall overlay should appear when trial is expired" ) captureScreenshot(name: "year_paywall_overlay") } /// TC-048: Paywall overlay appears on Insights view when trial expired. func testInsightsView_PaywallOverlay_WhenTrialExpired() { let tabBar = TabBarScreen(app: app) tabBar.tapInsights() // Verify the paywall overlay is present let overlay = app.descendants(matching: .any) .matching(identifier: UITestID.Paywall.insightsOverlay) .firstMatch XCTAssertTrue( overlay.waitForExistence(timeout: 5), "Insights paywall overlay should appear when trial is expired" ) captureScreenshot(name: "insights_paywall_overlay") } }