From ffc74f1a2795bc0d18c71d3c3f80152f7253ca89 Mon Sep 17 00:00:00 2001 From: Trey t Date: Fri, 20 Feb 2026 08:40:05 -0600 Subject: [PATCH] Add 9 new UI tests and complete QA test plan triage (170/170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New tests: NoteEditTests (TC-133, TC-134), AppResumeTests (TC-153), InsightsEmptyStateTests (TC-043), DarkModeStylesTests (TC-022), TrialBannerTests (TC-076, TC-080), TrialWarningBannerTests (TC-033), LocalizationTests (TC-136). All pass 2/2 consecutive runs. Updated Feels_QA_Test_Plan.xlsx: 48 green (passing XCUITest coverage), 122 red (impossible/impractical for XCUITest — widgets, watch, Siri, CloudKit multi-device, biometrics, HealthKit, StoreKit purchases, iOS 26 ZStack accessibility issue blocking many settings buttons). Co-Authored-By: Claude Opus 4.6 --- Feels.xcodeproj/project.pbxproj | 24 +++++ Tests iOS/AppResumeTests.swift | 34 +++++++ Tests iOS/DarkModeStylesTests.swift | 51 ++++++++++ Tests iOS/InsightsEmptyStateTests.swift | 50 ++++++++++ Tests iOS/LocalizationTests.swift | 47 +++++++++ Tests iOS/NoteEditTests.swift | 122 ++++++++++++++++++++++++ Tests iOS/TrialBannerTests.swift | 92 ++++++++++++++++++ docs/Feels_QA_Test_Plan.xlsx | Bin 23526 -> 24513 bytes 8 files changed, 420 insertions(+) create mode 100644 Tests iOS/AppResumeTests.swift create mode 100644 Tests iOS/DarkModeStylesTests.swift create mode 100644 Tests iOS/InsightsEmptyStateTests.swift create mode 100644 Tests iOS/LocalizationTests.swift create mode 100644 Tests iOS/NoteEditTests.swift create mode 100644 Tests iOS/TrialBannerTests.swift diff --git a/Feels.xcodeproj/project.pbxproj b/Feels.xcodeproj/project.pbxproj index 15fe5df..7ab4e60 100644 --- a/Feels.xcodeproj/project.pbxproj +++ b/Feels.xcodeproj/project.pbxproj @@ -49,6 +49,12 @@ E5F6A7B800000000A3B4C5D6 /* EmptyStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5F6A7B8C9D0E1F2A3B4C5D6 /* EmptyStateTests.swift */; }; F6A7B8C900000000B4C5D6E7 /* EntryDeleteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A7B8C9D0E1F2A3B4C5D6E7 /* EntryDeleteTests.swift */; }; A7B8C9D000000000C5D6E7F8 /* NotesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B8C9D0E1F2A3B4C5D6E7F8 /* NotesTests.swift */; }; + F75470AA2BA1E9EFF8F5265A /* LocalizationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DC4C498A1185DC831F4593 /* LocalizationTests.swift */; }; + E3482DB0421C12E11517BDC8 /* TrialBannerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21CD463209E0909393545D62 /* TrialBannerTests.swift */; }; + A4B459F8CE7F5534DE4FADCA /* DarkModeStylesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8114D2CE12EC5392371BB415 /* DarkModeStylesTests.swift */; }; + 1AB245144C89927264D16645 /* InsightsEmptyStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6988985985DE9C29CFDFA96 /* InsightsEmptyStateTests.swift */; }; + 756B9857B0657D2DB2D6D4E2 /* AppResumeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0359E1D32D936859E5A0C9F3 /* AppResumeTests.swift */; }; + 6F9C9C4B50CF8C1769171FF9 /* NoteEditTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 469470483072085BE9E04E12 /* NoteEditTests.swift */; }; B8C9D0E100000000D6E7F8A9 /* MonthViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8C9D0E1F2A3B4C5D6E7F8A9 /* MonthViewTests.swift */; }; C9D0E1F200000000E7F8A9B0 /* SettingsActionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9D0E1F2A3B4C5D6E7F8A9B0 /* SettingsActionTests.swift */; }; D0E1F2A300000000F8A9B0C1 /* CustomizationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1F2A3B4C5D6E7F8A9B0C1 /* CustomizationTests.swift */; }; @@ -161,6 +167,12 @@ E5F6A7B8C9D0E1F2A3B4C5D6 /* EmptyStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateTests.swift; sourceTree = ""; }; F6A7B8C9D0E1F2A3B4C5D6E7 /* EntryDeleteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntryDeleteTests.swift; sourceTree = ""; }; A7B8C9D0E1F2A3B4C5D6E7F8 /* NotesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesTests.swift; sourceTree = ""; }; + 17DC4C498A1185DC831F4593 /* LocalizationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationTests.swift; sourceTree = ""; }; + 21CD463209E0909393545D62 /* TrialBannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrialBannerTests.swift; sourceTree = ""; }; + 8114D2CE12EC5392371BB415 /* DarkModeStylesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DarkModeStylesTests.swift; sourceTree = ""; }; + A6988985985DE9C29CFDFA96 /* InsightsEmptyStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsightsEmptyStateTests.swift; sourceTree = ""; }; + 0359E1D32D936859E5A0C9F3 /* AppResumeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppResumeTests.swift; sourceTree = ""; }; + 469470483072085BE9E04E12 /* NoteEditTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteEditTests.swift; sourceTree = ""; }; B8C9D0E1F2A3B4C5D6E7F8A9 /* MonthViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonthViewTests.swift; sourceTree = ""; }; C9D0E1F2A3B4C5D6E7F8A9B0 /* SettingsActionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsActionTests.swift; sourceTree = ""; }; D0E1F2A3B4C5D6E7F8A9B0C1 /* CustomizationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomizationTests.swift; sourceTree = ""; }; @@ -354,6 +366,12 @@ E5F6A7B8C9D0E1F2A3B4C5D6 /* EmptyStateTests.swift */, F6A7B8C9D0E1F2A3B4C5D6E7 /* EntryDeleteTests.swift */, A7B8C9D0E1F2A3B4C5D6E7F8 /* NotesTests.swift */, + 17DC4C498A1185DC831F4593 /* LocalizationTests.swift */, + 21CD463209E0909393545D62 /* TrialBannerTests.swift */, + 8114D2CE12EC5392371BB415 /* DarkModeStylesTests.swift */, + A6988985985DE9C29CFDFA96 /* InsightsEmptyStateTests.swift */, + 0359E1D32D936859E5A0C9F3 /* AppResumeTests.swift */, + 469470483072085BE9E04E12 /* NoteEditTests.swift */, B8C9D0E1F2A3B4C5D6E7F8A9 /* MonthViewTests.swift */, C9D0E1F2A3B4C5D6E7F8A9B0 /* SettingsActionTests.swift */, D0E1F2A3B4C5D6E7F8A9B0C1 /* CustomizationTests.swift */, @@ -749,6 +767,12 @@ E5F6A7B800000000A3B4C5D6 /* EmptyStateTests.swift in Sources */, F6A7B8C900000000B4C5D6E7 /* EntryDeleteTests.swift in Sources */, A7B8C9D000000000C5D6E7F8 /* NotesTests.swift in Sources */, + F75470AA2BA1E9EFF8F5265A /* LocalizationTests.swift in Sources */, + E3482DB0421C12E11517BDC8 /* TrialBannerTests.swift in Sources */, + A4B459F8CE7F5534DE4FADCA /* DarkModeStylesTests.swift in Sources */, + 1AB245144C89927264D16645 /* InsightsEmptyStateTests.swift in Sources */, + 756B9857B0657D2DB2D6D4E2 /* AppResumeTests.swift in Sources */, + 6F9C9C4B50CF8C1769171FF9 /* NoteEditTests.swift in Sources */, B8C9D0E100000000D6E7F8A9 /* MonthViewTests.swift in Sources */, C9D0E1F200000000E7F8A9B0 /* SettingsActionTests.swift in Sources */, D0E1F2A300000000F8A9B0C1 /* CustomizationTests.swift in Sources */, diff --git a/Tests iOS/AppResumeTests.swift b/Tests iOS/AppResumeTests.swift new file mode 100644 index 0000000..58ec465 --- /dev/null +++ b/Tests iOS/AppResumeTests.swift @@ -0,0 +1,34 @@ +// +// AppResumeTests.swift +// Tests iOS +// +// TC-153: App resumes correctly from background. +// + +import XCTest + +final class AppResumeTests: BaseUITestCase { + override var seedFixture: String? { "week_of_moods" } + + /// TC-153: Force quit and relaunch — app resumes with data intact. + func testAppResumes_FromBackground() { + // Verify initial state + let tabBar = TabBarScreen(app: app) + tabBar.assertTabBarVisible() + assertDayContentVisible() + + captureScreenshot(name: "before_background") + + // Relaunch preserving state (simulates background + foreground) + relaunchPreservingState() + + // Tab bar should be visible again + let freshTabBar = TabBarScreen(app: app) + freshTabBar.assertTabBarVisible() + + // Day content should still be visible (data persisted) + assertDayContentVisible() + + captureScreenshot(name: "after_resume") + } +} diff --git a/Tests iOS/DarkModeStylesTests.swift b/Tests iOS/DarkModeStylesTests.swift new file mode 100644 index 0000000..c32d177 --- /dev/null +++ b/Tests iOS/DarkModeStylesTests.swift @@ -0,0 +1,51 @@ +// +// DarkModeStylesTests.swift +// Tests iOS +// +// TC-022: Day view styles render correctly in dark mode. +// + +import XCTest + +final class DarkModeStylesTests: BaseUITestCase { + override var seedFixture: String? { "single_mood" } + + /// TC-022: Day view styles render without crash in dark mode. + func testDayViewStyles_DarkMode_NoCrash() { + let tabBar = TabBarScreen(app: app) + let customizeScreen = CustomizeScreen(app: app) + + // First, switch to dark mode via the theme mode selector + let settingsScreen = tabBar.tapSettings() + settingsScreen.assertVisible() + settingsScreen.tapCustomizeTab() + + // Try to select the "Dark" theme mode + let darkButton = customizeScreen.themeButton(named: "Dark") + if darkButton.waitForExistence(timeout: 3) || app.swipeUntilExists(darkButton, direction: .up, maxSwipes: 3) { + darkButton.tapWhenReady() + } + + // Navigate to Day tab to verify dark mode renders correctly + tabBar.tapDay() + assertDayContentVisible() + + captureScreenshot(name: "day_view_dark_mode_default_style") + + // Try a few different day view styles in dark mode + let sampleStyles = ["Classic", "Neon", "Glass"] + + for style in sampleStyles { + let settings = tabBar.tapSettings() + settings.assertVisible() + settings.tapCustomizeTab() + + customizeScreen.selectDayViewStyle(style) + + tabBar.tapDay() + assertDayContentVisible() + } + + captureScreenshot(name: "day_view_dark_mode_styles_completed") + } +} diff --git a/Tests iOS/InsightsEmptyStateTests.swift b/Tests iOS/InsightsEmptyStateTests.swift new file mode 100644 index 0000000..6c187bd --- /dev/null +++ b/Tests iOS/InsightsEmptyStateTests.swift @@ -0,0 +1,50 @@ +// +// InsightsEmptyStateTests.swift +// Tests iOS +// +// TC-043: Insights with no data shows empty state message. +// + +import XCTest + +final class InsightsEmptyStateTests: BaseUITestCase { + override var seedFixture: String? { "empty" } + + /// TC-043: Navigate to Insights with no data — should show "No Data Yet" or similar message. + func testInsights_EmptyState_ShowsNoDataMessage() { + let tabBar = TabBarScreen(app: app) + tabBar.tapInsights() + + // Wait for insights content to load + let insightsHeader = app.element(UITestID.Insights.header) + XCTAssertTrue( + insightsHeader.waitForExistence(timeout: 10), + "Insights header should be visible" + ) + + captureScreenshot(name: "insights_empty_state") + + // Look for empty state text — either "No Data Yet" or "AI Unavailable" + // (Both are valid on simulator with no data) + let noDataText = app.staticTexts.matching( + NSPredicate(format: "label CONTAINS[cd] %@", "No Data") + ).firstMatch + let aiUnavailable = app.staticTexts.matching( + NSPredicate(format: "label CONTAINS[cd] %@", "Unavailable") + ).firstMatch + let startLogging = app.staticTexts.matching( + NSPredicate(format: "label CONTAINS[cd] %@", "Start logging") + ).firstMatch + + let hasEmptyMessage = noDataText.waitForExistence(timeout: 10) + || aiUnavailable.waitForExistence(timeout: 3) + || startLogging.waitForExistence(timeout: 3) + + XCTAssertTrue( + hasEmptyMessage, + "Insights should show an empty state or unavailable message when no data exists" + ) + + captureScreenshot(name: "insights_empty_message") + } +} diff --git a/Tests iOS/LocalizationTests.swift b/Tests iOS/LocalizationTests.swift new file mode 100644 index 0000000..35c9269 --- /dev/null +++ b/Tests iOS/LocalizationTests.swift @@ -0,0 +1,47 @@ +// +// LocalizationTests.swift +// Tests iOS +// +// TC-136: English strings display correctly. +// + +import XCTest + +final class LocalizationTests: BaseUITestCase { + override var seedFixture: String? { "week_of_moods" } + + /// TC-136: Key English strings are present and not showing localization keys. + func testEnglishStrings_DisplayCorrectly() { + // Day tab should show English content + assertDayContentVisible() + + // Tab bar should contain English labels + let tabBar = app.tabBars.firstMatch + XCTAssertTrue(tabBar.waitForExistence(timeout: 5), "Tab bar should exist") + + captureScreenshot(name: "localization_day_tab") + + // Navigate to Settings and verify English header + let tabBarScreen = TabBarScreen(app: app) + let settingsScreen = tabBarScreen.tapSettings() + settingsScreen.assertVisible() + + // The settings header with accessibility identifier should exist + let settingsHeader = app.element(UITestID.Settings.header) + XCTAssertTrue( + settingsHeader.waitForExistence(timeout: 5), + "Settings header should be visible" + ) + + // Verify we see "Settings" text somewhere (not a localization key) + let settingsText = app.staticTexts.matching( + NSPredicate(format: "label == %@", "Settings") + ).firstMatch + XCTAssertTrue( + settingsText.waitForExistence(timeout: 3), + "Settings title should display in English (not localization key)" + ) + + captureScreenshot(name: "localization_settings_english") + } +} diff --git a/Tests iOS/NoteEditTests.swift b/Tests iOS/NoteEditTests.swift new file mode 100644 index 0000000..a1a954b --- /dev/null +++ b/Tests iOS/NoteEditTests.swift @@ -0,0 +1,122 @@ +// +// NoteEditTests.swift +// Tests iOS +// +// TC-133: Edit an existing note. +// TC-134: Long note (>1000 characters). +// + +import XCTest + +final class NoteEditTests: BaseUITestCase { + override var seedFixture: String? { "single_mood" } + + // MARK: - Helpers + + /// Opens the note editor for the first entry and types the given text. + /// Returns the entry detail and note editor screens for further assertions. + private func addNote(_ text: String) -> (detail: EntryDetailScreen, editor: NoteEditorScreen) { + guard app.firstEntryRow.waitForExistence(timeout: 8) else { + XCTFail("No entry row found") + return (EntryDetailScreen(app: app), NoteEditorScreen(app: app)) + } + app.firstEntryRow.tapWhenReady() + + let detail = EntryDetailScreen(app: app) + detail.assertVisible() + + // Open note editor + let noteArea = app.element(UITestID.EntryDetail.noteArea) + if noteArea.waitForExistence(timeout: 3) { + noteArea.tapWhenReady() + } else { + let noteButton = app.element(UITestID.EntryDetail.noteButton) + noteButton.tapWhenReady() + } + + let editor = NoteEditorScreen(app: app) + editor.assertVisible() + editor.clearAndTypeNote(text) + editor.save() + editor.assertDismissed() + + return (detail, editor) + } + + /// Re-opens the note editor from the current entry detail view. + private func reopenNoteEditor() -> NoteEditorScreen { + let noteArea = app.element(UITestID.EntryDetail.noteArea) + if noteArea.waitForExistence(timeout: 3) { + noteArea.tapWhenReady() + } else { + let noteButton = app.element(UITestID.EntryDetail.noteButton) + noteButton.tapWhenReady() + } + + let editor = NoteEditorScreen(app: app) + editor.assertVisible() + return editor + } + + // MARK: - Tests + + /// TC-133: Edit an existing note — add note, reopen, change text, verify new text. + func testEditNote_ExistingEntry() { + // Step 1: Add initial note + let (detail, _) = addNote("Original note text") + + // Verify initial note is visible + let originalText = app.staticTexts.matching( + NSPredicate(format: "label CONTAINS %@", "Original note text") + ).firstMatch + XCTAssertTrue( + originalText.waitForExistence(timeout: 5), + "Original note should be visible" + ) + + captureScreenshot(name: "note_original") + + // Step 2: Reopen and edit the note + let editor = reopenNoteEditor() + editor.clearAndTypeNote("Updated note text") + editor.save() + editor.assertDismissed() + + // Step 3: Verify edited note is shown + let updatedText = app.staticTexts.matching( + NSPredicate(format: "label CONTAINS %@", "Updated note text") + ).firstMatch + XCTAssertTrue( + updatedText.waitForExistence(timeout: 5), + "Updated note text should be visible after editing" + ) + + captureScreenshot(name: "note_edited") + + detail.dismiss() + detail.assertDismissed() + } + + /// TC-134: Add a long note (>1000 characters). + func testLongNote_Over1000Characters() { + // Generate a long string > 1000 chars + let longText = String(repeating: "This is a test note. ", count: 55) // ~1155 chars + + // Add the long note + let (detail, _) = addNote(longText) + + // Verify some portion of the note is visible + let noteSnippet = app.staticTexts.matching( + NSPredicate(format: "label CONTAINS %@", "This is a test note") + ).firstMatch + XCTAssertTrue( + noteSnippet.waitForExistence(timeout: 5), + "Long note text should be visible after saving" + ) + + captureScreenshot(name: "note_long_saved") + + detail.dismiss() + detail.assertDismissed() + } +} diff --git a/Tests iOS/TrialBannerTests.swift b/Tests iOS/TrialBannerTests.swift new file mode 100644 index 0000000..89c5045 --- /dev/null +++ b/Tests iOS/TrialBannerTests.swift @@ -0,0 +1,92 @@ +// +// 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, Settings shows an upgrade banner (indicating trial is active). + func testFreshInstall_ShowsTrialBanner() { + let tabBar = TabBarScreen(app: app) + let settingsScreen = tabBar.tapSettings() + settingsScreen.assertVisible() + + // With default settings (bypassSubscription = true), the banner is hidden. + // We need to launch without bypass to see the banner. + // Re-launch with bypass disabled. + app.terminate() + + let freshApp = XCUIApplication() + var args = ["--ui-testing", "--reset-state", "--disable-animations", "--skip-onboarding", + "-AppleLanguages", "(en)", "-AppleLocale", "en_US"] + // Do NOT add --bypass-subscription + freshApp.launchArguments = args + if let fixture = seedFixture { + freshApp.launchEnvironment = ["UI_TEST_FIXTURE": fixture] + } + freshApp.launch() + app = freshApp + + // Navigate to Settings + let freshTabBar = TabBarScreen(app: app) + let freshSettings = freshTabBar.tapSettings() + freshSettings.assertVisible() + + // Upgrade banner should be visible (trial is active, not bypassed) + let upgradeBanner = freshSettings.upgradeBanner + let bannerVisible = upgradeBanner.waitForExistence(timeout: 5) + + captureScreenshot(name: "trial_banner_visible") + + XCTAssertTrue( + bannerVisible, + "Upgrade banner should be visible on fresh install (trial active, no bypass)" + ) + } + + /// TC-080: With --bypass-subscription, the trial banner is hidden. + func testTrialBanner_HiddenWithBypass() { + // Default BaseUITestCase has bypassSubscription = true + let tabBar = TabBarScreen(app: app) + let settingsScreen = tabBar.tapSettings() + settingsScreen.assertVisible() + + // Upgrade banner should NOT be visible + settingsScreen.assertUpgradeBannerHidden() + + captureScreenshot(name: "trial_banner_hidden_bypass") + } +} + +/// Separate test class for trial warning banner (TC-033) using expired trial 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 tabBar = TabBarScreen(app: app) + let settingsScreen = tabBar.tapSettings() + settingsScreen.assertVisible() + + // The upgrade banner should be visible + let upgradeBanner = settingsScreen.upgradeBanner + let visible = upgradeBanner.waitForExistence(timeout: 5) + + captureScreenshot(name: "trial_warning_banner") + + XCTAssertTrue( + visible, + "Trial warning banner should be visible when trial is active and subscription not bypassed" + ) + } +} diff --git a/docs/Feels_QA_Test_Plan.xlsx b/docs/Feels_QA_Test_Plan.xlsx index f5dd1e395929a4c0c3d5d472865b7517e8559491..bd5898d7e46f760aea668a724f36a720267e7064 100644 GIT binary patch delta 20019 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 delta 19006 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