Add XCUITest suite with 27 test files covering unmapped P1 test cases
- Add 8 new test files: HeaderMoodLogging (TC-002), DayViewGrouping (TC-019), AllDayViewStyles (TC-021), MonthViewInteraction (TC-030), PaywallGate (TC-032/039/048), AppTheme (TC-070), IconPack (TC-072), PremiumCustomization (TC-075) - Add accessibility IDs for paywall overlays, icon packs, app theme cards, and day view section headers - Add --expire-trial launch argument to UITestMode for paywall gate testing - Update QA test plan spreadsheet with XCUITest names for 14 test cases - Include existing test infrastructure: screen objects, helpers, base class, and 19 previously written test files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -73,7 +73,8 @@ struct OnboardingDay: View {
|
||||
example: "e.g. Tue reminder → Rate Tue",
|
||||
icon: "sun.max.fill",
|
||||
isSelected: onboardingData.inputDay == .Today,
|
||||
action: { onboardingData.inputDay = .Today }
|
||||
action: { onboardingData.inputDay = .Today },
|
||||
testID: AccessibilityID.Onboarding.dayToday
|
||||
)
|
||||
|
||||
DayOptionCard(
|
||||
@@ -82,7 +83,8 @@ struct OnboardingDay: View {
|
||||
example: "e.g. Tue reminder → Rate Mon",
|
||||
icon: "moon.fill",
|
||||
isSelected: onboardingData.inputDay == .Previous,
|
||||
action: { onboardingData.inputDay = .Previous }
|
||||
action: { onboardingData.inputDay = .Previous },
|
||||
testID: AccessibilityID.Onboarding.dayYesterday
|
||||
)
|
||||
}
|
||||
.padding(.horizontal, 20)
|
||||
@@ -103,6 +105,7 @@ struct OnboardingDay: View {
|
||||
.padding(.bottom, 80)
|
||||
}
|
||||
}
|
||||
.accessibilityIdentifier(AccessibilityID.Onboarding.dayScreen)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +116,7 @@ struct DayOptionCard: View {
|
||||
let icon: String
|
||||
let isSelected: Bool
|
||||
let action: () -> Void
|
||||
var testID: String? = nil
|
||||
|
||||
var body: some View {
|
||||
Button(action: action) {
|
||||
@@ -168,6 +172,7 @@ struct DayOptionCard: View {
|
||||
.accessibilityLabel("\(title), \(subtitle)")
|
||||
.accessibilityHint(example)
|
||||
.accessibilityAddTraits(isSelected ? [.isSelected] : [])
|
||||
.accessibilityIdentifier(testID ?? "")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ struct OnboardingSubscription: View {
|
||||
}
|
||||
.accessibilityLabel(String(localized: "Get Personal Insights"))
|
||||
.accessibilityHint(String(localized: "Opens subscription options"))
|
||||
.accessibilityIdentifier(AccessibilityID.Onboarding.subscribeButton)
|
||||
|
||||
// Skip button
|
||||
Button(action: {
|
||||
@@ -130,12 +131,14 @@ struct OnboardingSubscription: View {
|
||||
}
|
||||
.accessibilityLabel(String(localized: "Maybe Later"))
|
||||
.accessibilityHint(String(localized: "Skip subscription and complete setup"))
|
||||
.accessibilityIdentifier(AccessibilityID.Onboarding.skipButton)
|
||||
.padding(.top, 4)
|
||||
}
|
||||
.padding(.horizontal, 24)
|
||||
.padding(.bottom, 50)
|
||||
}
|
||||
}
|
||||
.accessibilityIdentifier(AccessibilityID.Onboarding.subscriptionScreen)
|
||||
.sheet(isPresented: $showSubscriptionStore, onDismiss: {
|
||||
// After subscription store closes, complete onboarding
|
||||
AnalyticsManager.shared.track(.onboardingCompleted(dayId: nil))
|
||||
|
||||
@@ -75,6 +75,7 @@ struct OnboardingWelcome: View {
|
||||
.accessibilityHint(String(localized: "Swipe to the next onboarding step"))
|
||||
}
|
||||
}
|
||||
.accessibilityIdentifier(AccessibilityID.Onboarding.welcomeScreen)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user