diff --git a/MealMood/Views/Home/HomeView.swift b/MealMood/Views/Home/HomeView.swift index 76f09c0..0df222d 100644 --- a/MealMood/Views/Home/HomeView.swift +++ b/MealMood/Views/Home/HomeView.swift @@ -154,25 +154,36 @@ struct HomeView: View { } } ToolbarItem(placement: .principal) { - HStack(spacing: 10) { + // Bold circled arrows: the previous thin chevrons were so + // subtle that users couldn't find how to change week. + HStack(spacing: 8) { if let settings = settings { Button { viewModel.goToPreviousWeek() showWeekLimitUpsell = false } label: { Image(systemName: "chevron.left") + .font(.system(size: 13, weight: .bold)) .foregroundColor(.mealMoodCoral) + .frame(width: 30, height: 30) + .background(Circle().fill(Color.white.opacity(0.75))) } + .buttonStyle(.plain) .accessibilityLabel(Text("home_previous")) Button { weekPickerDate = viewModel.currentWeekStart showWeekPicker = true } label: { - VStack(spacing: 2) { + HStack(spacing: 4) { Text(viewModel.weekRangeText) .font(.mealMoodH2) .foregroundColor(.mealMoodTextPrimary) + .lineLimit(1) + .minimumScaleFactor(0.7) + Image(systemName: "chevron.down") + .font(.system(size: 10, weight: .bold)) + .foregroundColor(.mealMoodTextSecondary) } } .buttonStyle(.plain) @@ -192,8 +203,12 @@ struct HomeView: View { } } label: { Image(systemName: "chevron.right") + .font(.system(size: 13, weight: .bold)) .foregroundColor(.mealMoodCoral) + .frame(width: 30, height: 30) + .background(Circle().fill(Color.white.opacity(0.75))) } + .buttonStyle(.plain) .accessibilityLabel(Text("home_next")) } } diff --git a/MealMoodUITests/OnboardingFlowUITests.swift b/MealMoodUITests/OnboardingFlowUITests.swift index 4d70251..463d560 100644 --- a/MealMoodUITests/OnboardingFlowUITests.swift +++ b/MealMoodUITests/OnboardingFlowUITests.swift @@ -73,3 +73,40 @@ final class OnboardingFlowUITests: XCTestCase { } } } + +/// Regression: tapping "next week" must land on an editable week with slots — +/// the plan for a not-yet-visited week has to be created on navigation. +final class NextWeekNavigationUITests: XCTestCase { + + func testNextWeekShowsSlotsToPlan() throws { + let app = XCUIApplication() + app.launchArguments += ["-AppleLanguages", "(en)", "-AppleLocale", "en_US", "UITEST_DISABLE_ANALYTICS"] + app.launch() + + // Reach the home, walking onboarding if this is a clean install. + if !app.otherElements["home_root"].waitForExistence(timeout: 5) { + for id in ["onboarding_cta_welcome", "onboarding_cta_meal_windows", "onboarding_cta_weekends", + "onboarding_cta_calendar", "onboarding_cta_first_dishes", + "onboarding_cta_week_ready_skip", "onboarding_cta_paywall_skip"] { + let button = app.buttons[id] + if button.waitForExistence(timeout: 10) { button.tap() } + } + XCTAssertTrue(app.otherElements["home_root"].waitForExistence(timeout: 15), "Home never appeared") + } + + let next = app.buttons["Next"] + XCTAssertTrue(next.waitForExistence(timeout: 10), "Next-week chevron not found") + next.tap() + + sleep(2) + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "next-week" + attachment.lifetime = .keepAlways + add(attachment) + + // The paywall must NOT appear (next week is free for everyone) and the + // home must still be there with content, not a blank screen. + XCTAssertFalse(app.staticTexts["premium_title"].exists, "Paywall appeared navigating to next week") + XCTAssertTrue(app.otherElements["home_root"].exists, "Home disappeared after navigating to next week") + } +} diff --git a/MealMoodWatchWidget/Info.plist b/MealMoodWatchWidget/Info.plist index 8d20719..792a5bf 100644 --- a/MealMoodWatchWidget/Info.plist +++ b/MealMoodWatchWidget/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString 2.1.0 CFBundleVersion - 82 + 83 NSExtension NSExtensionPointIdentifier diff --git a/MealMoodWidget/Info.plist b/MealMoodWidget/Info.plist index 8d20719..792a5bf 100644 --- a/MealMoodWidget/Info.plist +++ b/MealMoodWidget/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString 2.1.0 CFBundleVersion - 82 + 83 NSExtension NSExtensionPointIdentifier