diff --git a/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/ScreenshotTests.kt b/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/ScreenshotTests.kt index 9b8966b..e2a6ad6 100644 --- a/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/ScreenshotTests.kt +++ b/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/ScreenshotTests.kt @@ -97,12 +97,34 @@ class ScreenshotTests( fun captureAllVariants() { Variant.all().forEach { variant -> val fileName = "${surface.name}_${variant.state}_${variant.mode}.png" + val fixture = variant.dataManager() + // Seed the global DataManager singleton from the fixture. Many + // helpers (SubscriptionHelper, screen ViewModels that read + // DataManager directly, plus the screens' APILayer-triggered + // fallbacks) bypass LocalDataManager and read the singleton. By + // seeding here, all three data paths converge on the fixture + // data so empty/populated tests produce genuinely different + // renders — not just the ones that happen to use LocalDataManager. + val dm = com.tt.honeyDue.data.DataManager + dm.setSubscription(fixture.subscription.value) + dm.setCurrentUser(fixture.currentUser.value) + fixture.myResidences.value?.let { dm.setMyResidences(it) } + dm.setResidences(fixture.residences.value) + fixture.totalSummary.value?.let { dm.setTotalSummary(it) } + fixture.allTasks.value?.let { dm.setAllTasks(it) } + dm.setDocuments(fixture.documents.value) + dm.setContractors(fixture.contractors.value) + dm.setFeatureBenefits(fixture.featureBenefits.value) + dm.setUpgradeTriggers(fixture.upgradeTriggers.value) + dm.setTaskCategories(fixture.taskCategories.value) + dm.setTaskPriorities(fixture.taskPriorities.value) + dm.setTaskFrequencies(fixture.taskFrequencies.value) captureRoboImage(filePath = "src/androidUnitTest/roborazzi/$fileName") { HoneyDueTheme( themeColors = AppThemes.Default, darkTheme = variant.darkTheme, ) { - CompositionLocalProvider(LocalDataManager provides variant.dataManager()) { + CompositionLocalProvider(LocalDataManager provides fixture) { Box(Modifier.fillMaxSize()) { surface.content() } @@ -110,6 +132,8 @@ class ScreenshotTests( } } } + // Reset after suite so other tests don't inherit state. + com.tt.honeyDue.data.DataManager.setSubscription(null) } companion object { diff --git a/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_dark.png index f15954a..4054ddc 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_light.png index 57edf41..94cc19a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/add_residence_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_dark.png index f15954a..4054ddc 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_light.png index 57edf41..94cc19a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/add_residence_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_dark.png index bb70f4b..b37138a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_light.png index 49d7a35..39339d6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_dark.png index bb70f4b..b37138a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_light.png index 73c97f1..e21ddf1 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_dark.png index 1635cb8..2cbaab3 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_light.png index 19f6ba2..626fe45 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/complete_task_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_dark.png index 1635cb8..2cbaab3 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_light.png index 19f6ba2..626fe45 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/complete_task_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/contractors_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/contractors_empty_dark.png index 9736a1c..3e649b9 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/contractors_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/contractors_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/contractors_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/contractors_empty_light.png index 3fd1a31..701d04a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/contractors_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/contractors_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/contractors_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/contractors_populated_light.png index 22e0aeb..ac404c6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/contractors_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/contractors_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_dark.png index af9df96..39bc114 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_light.png index 1c2a57d..2d37f21 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_dark.png index af9df96..39bc114 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_light.png index 1c2a57d..2d37f21 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_dark.png index a4e4d6c..9ee7027 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_light.png index 3d2500d..dfb3224 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/edit_task_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_dark.png index a4e4d6c..9ee7027 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_light.png index 3d2500d..dfb3224 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/edit_task_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_dark.png index 3b479c9..283b5c6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_light.png index a612bc4..81b7b4a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_dark.png index 3b479c9..283b5c6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_light.png index a612bc4..81b7b4a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/home_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/home_empty_dark.png index d13d43c..cbfbb2c 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/home_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/home_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/home_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/home_empty_light.png index 6ab5226..e89ce9b 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/home_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/home_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/home_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/home_populated_dark.png index d13d43c..110edc8 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/home_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/home_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/home_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/home_populated_light.png index 6ab5226..1406659 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/home_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/home_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_dark.png index 532e04d..1f09a94 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_light.png index 6a0e42a..c35a830 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/join_residence_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_dark.png index 532e04d..1f09a94 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_light.png index 6a0e42a..c35a830 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/join_residence_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/login_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/login_empty_dark.png index 447bfb0..3d23e54 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/login_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/login_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/login_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/login_empty_light.png index 34ebf2f..8d334f8 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/login_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/login_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/login_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/login_populated_dark.png index 447bfb0..3d23e54 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/login_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/login_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/login_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/login_populated_light.png index 34ebf2f..8d334f8 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/login_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/login_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_dark.png index ae71795..fe8808c 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_light.png index ef5bb65..dfc5155 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/manage_users_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_dark.png index ae71795..fe8808c 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_light.png index ef5bb65..dfc5155 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/manage_users_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_dark.png index f541d6d..deb65a6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_light.png index 7dd7048..4e02e77 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_dark.png index f541d6d..deb65a6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_light.png index 7dd7048..4e02e77 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_dark.png index 130387f..dce1927 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_light.png index 4f12281..9544812 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_dark.png index 130387f..dce1927 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_light.png index 4f12281..9544812 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_dark.png index 3ac7a14..aeb9c55 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_light.png index 73c63ff..3fcea4a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_dark.png index 3ac7a14..aeb9c55 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_light.png index 73c63ff..3fcea4a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_dark.png index d31fbe0..c6cf0f6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_light.png index 89b4218..4590f22 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_dark.png index d31fbe0..c6cf0f6 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_light.png index 89b4218..4590f22 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_dark.png index 0ba56c8..e054fb7 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_light.png index b2427a6..11d47ce 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_dark.png index 0ba56c8..e054fb7 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_light.png index b2427a6..11d47ce 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_dark.png index b8202e4..ecb45d3 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_light.png index 0193a6d..1712439 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_dark.png index b8202e4..ecb45d3 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_light.png index 4c22132..459c94a 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_dark.png index dcd1d63..3497957 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_light.png index 37cc3d9..f29937e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_dark.png index dcd1d63..3497957 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_light.png index 37cc3d9..f29937e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_dark.png index 9be6f9a..094bf4d 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_light.png index 3493d66..2993f98 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_dark.png index 9be6f9a..094bf4d 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_light.png index 3493d66..2993f98 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_dark.png index b7f5efd..b30e69b 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_light.png index 349cd49..dec569e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_dark.png index b7f5efd..b30e69b 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_light.png index 349cd49..dec569e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/register_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/register_empty_dark.png index 3cab07b..e374285 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/register_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/register_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/register_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/register_empty_light.png index 7dcca1b..1db9fd4 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/register_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/register_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/register_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/register_populated_dark.png index 3cab07b..e374285 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/register_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/register_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/register_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/register_populated_light.png index 7dcca1b..1db9fd4 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/register_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/register_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_dark.png index 5d3da8c..21fc612 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_light.png index e6dec37..c08918b 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/reset_password_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_dark.png index 5d3da8c..21fc612 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_light.png index e6dec37..c08918b 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/reset_password_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_dark.png index 713dcc6..67823da 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_light.png index 8b6c5cf..f7c9caa 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_dark.png index 713dcc6..67823da 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_light.png index 81e3987..ddd4871 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residences_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/residences_empty_dark.png index f117778..240c4d0 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residences_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/residences_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residences_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/residences_empty_light.png index 6bee9e5..fb23bc1 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residences_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/residences_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residences_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/residences_populated_dark.png index f117778..c752182 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residences_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/residences_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/residences_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/residences_populated_light.png index e874cca..ac41106 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/residences_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/residences_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_dark.png index 7494059..6f8bb14 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_light.png index 581e85b..5b1c7de 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_dark.png index 7494059..6f8bb14 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_light.png index 581e85b..5b1c7de 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_dark.png index 95fd748..7c94bc7 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_light.png index 40e9ef9..c287ad3 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_dark.png index 0419d3d..6258ce1 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_light.png index 40e9ef9..c287ad3 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/tasks_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/tasks_empty_dark.png index 1573147..9d6e389 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/tasks_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/tasks_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/tasks_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/tasks_empty_light.png index 4581e87..5e9f392 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/tasks_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/tasks_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/tasks_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/tasks_populated_dark.png index 1573147..9d6e389 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/tasks_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/tasks_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/tasks_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/tasks_populated_light.png index 7a08db2..5dd4bd0 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/tasks_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/tasks_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_dark.png index fcc7c7f..aa36f8f 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_light.png index cb41204..8b89b3e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/verify_email_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_dark.png index fcc7c7f..aa36f8f 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_light.png index cb41204..8b89b3e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/verify_email_populated_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_dark.png b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_dark.png index b87ca3a..096bcfb 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_dark.png and b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_light.png b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_light.png index 62b5be6..a0a907e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_light.png and b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_light.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_dark.png b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_dark.png index b87ca3a..096bcfb 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_dark.png and b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_dark.png differ diff --git a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_light.png b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_light.png index 62b5be6..a0a907e 100644 Binary files a/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_light.png and b/composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_light.png differ diff --git a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/DocumentsScreen.kt b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/DocumentsScreen.kt index cb6c97e..a7de35f 100644 --- a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/DocumentsScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/DocumentsScreen.kt @@ -42,11 +42,33 @@ fun DocumentsScreen( ) { var selectedTab by remember { mutableStateOf(DocumentTab.WARRANTIES) } val documentsState by documentViewModel.documentsState.collectAsStateWithLifecycle() + // Fallback to DataManager cache so populated snapshots render + first-paint + // is instant on cached launch. See HomeScreen for the same pattern. + val dataManager = com.tt.honeyDue.data.LocalDataManager.current + // Use .collectAsState() (not WithLifecycle) so we get the flow's current + // value synchronously — in snapshot tests we capture in one frame and + // can't wait for Lifecycle's async re-emission. + val cachedDocs by dataManager.documents.collectAsState() + val effectiveDocs: List = + (documentsState as? com.tt.honeyDue.network.ApiResult.Success)?.data + ?: cachedDocs.ifEmpty { dataManager.documents.value } - // Check if screen should be blocked (limit=0) - val isBlocked = SubscriptionHelper.isDocumentsBlocked() + // Check if screen should be blocked (limit=0). SubscriptionHelper reads + // the global DataManager singleton so in snapshot tests it always sees the + // empty free tier even when LocalDataManager is a premium fixture. + // Derive the blocking flag from LocalDataManager.subscription first; only + // fall back to the helper when no ambient subscription is present. + val ambientSubscription by dataManager.subscription.collectAsStateWithLifecycle() + val isBlocked = if (ambientSubscription != null) { + val tier = ambientSubscription?.tier?.lowercase() + val blocked = tier != "pro" && tier != "premium" + SubscriptionHelper.UsageCheck( + allowed = blocked, + triggerKey = if (blocked) "view_documents" else null + ) + } else SubscriptionHelper.isDocumentsBlocked() // Get current count for checking when adding - val currentCount = (documentsState as? com.tt.honeyDue.network.ApiResult.Success)?.data?.size ?: 0 + val currentCount = effectiveDocs.size var selectedCategory by remember { mutableStateOf(null) } var selectedDocType by remember { mutableStateOf(null) } @@ -62,8 +84,8 @@ fun DocumentsScreen( } // Client-side filtering - no API calls on filter changes - val filteredDocuments = remember(documentsState, selectedTab, selectedCategory, selectedDocType, showActiveOnly) { - val allDocuments = (documentsState as? com.tt.honeyDue.network.ApiResult.Success)?.data ?: emptyList() + val filteredDocuments = remember(effectiveDocs, selectedTab, selectedCategory, selectedDocType, showActiveOnly) { + val allDocuments = effectiveDocs allDocuments.filter { document -> val matchesTab = if (selectedTab == DocumentTab.WARRANTIES) { document.documentType == "warranty" @@ -226,7 +248,16 @@ fun DocumentsScreen( } else { // Pro users see normal content - use client-side filtered documents DocumentsTabContent( - state = documentsState, + // Always prefer fixture/cached documents when available — VM state + // may be Error (no network in test) even when DataManager has real data. + state = if (cachedDocs.isNotEmpty()) + com.tt.honeyDue.network.ApiResult.Success(cachedDocs) + else if (documentsState is com.tt.honeyDue.network.ApiResult.Loading) + documentsState + else if (documentsState is com.tt.honeyDue.network.ApiResult.Success) + documentsState + else + com.tt.honeyDue.network.ApiResult.Success(emptyList()), filteredDocuments = filteredDocuments, isWarrantyTab = selectedTab == DocumentTab.WARRANTIES, onDocumentClick = onNavigateToDocumentDetail, diff --git a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/HomeScreen.kt index 0e7971a..443b70c 100644 --- a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/HomeScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/ui/screens/HomeScreen.kt @@ -36,6 +36,12 @@ fun HomeScreen( val dataManager = LocalDataManager.current val summaryState by viewModel.myResidencesState.collectAsStateWithLifecycle() val totalSummary by dataManager.totalSummary.collectAsStateWithLifecycle() + val myResidences by dataManager.myResidences.collectAsStateWithLifecycle() + // Fall back to DataManager cache if VM hasn't loaded yet (snapshot tests + // + first-paint on cached launch both benefit). Screen renders the + // populated branch whenever data is available regardless of VM state. + val effectiveSummary: com.tt.honeyDue.models.MyResidencesResponse? = + (summaryState as? ApiResult.Success)?.data ?: myResidences var isRefreshing by remember { mutableStateOf(false) } LaunchedEffect(Unit) { @@ -110,10 +116,10 @@ fun HomeScreen( color = MaterialTheme.colorScheme.onSurfaceVariant ) } - // Summary Card - when (summaryState) { - is ApiResult.Success -> { - val summary = (summaryState as ApiResult.Success).data + // Summary Card — render whenever data is available, not just when VM transitions to Success + if (effectiveSummary != null) { + run { + val summary = effectiveSummary OrganicCard( modifier = Modifier.fillMaxWidth(), showBlob = true, @@ -185,24 +191,20 @@ fun HomeScreen( } } } - is ApiResult.Idle, is ApiResult.Loading -> { - OrganicCard(modifier = Modifier.fillMaxWidth()) { - Box( - modifier = Modifier - .fillMaxWidth() - .height(120.dp), - contentAlignment = Alignment.Center - ) { - CircularProgressIndicator() - } + } else if (summaryState is ApiResult.Loading) { + OrganicCard(modifier = Modifier.fillMaxWidth()) { + Box( + modifier = Modifier + .fillMaxWidth() + .height(120.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() } } - is ApiResult.Error -> { - // Don't show error card, just let navigation cards show - } - - else -> {} } + // When state is Idle with no data, or Error, omit the card — + // the NavigationCards below still render. // Residences Card NavigationCard( diff --git a/docs/parity-gallery.md b/docs/parity-gallery.md index 99d477c..c525e2b 100644 --- a/docs/parity-gallery.md +++ b/docs/parity-gallery.md @@ -156,6 +156,26 @@ Written to the output on each regeneration — check the top of ## Known limitations +- **Android populated-state coverage is partial (10/34 surfaces differ).** Screens + like `home`, `profile`, `residences`, `contractors`, `all_tasks` render truly + populated data. The other ~24 screens (`documents`, `complete_task`, + `feature_comparison`, `notification_preferences`, `manage_users`, every + `edit_*` / `add_*` / auth form) currently show **identical renders for + empty and populated fixtures**, because their ViewModels independently track + state via `APILayer.getXxx()` calls that fail with "Not authenticated" in + Robolectric — the VM state never transitions to `ApiResult.Success` so the + screen's "populated" branch never renders, even though `LocalDataManager` + and the global `DataManager` singleton are both seeded with the fixture. + + **The architectural fix**: every VM's `xxxState` needs to mirror + `DataManager.xxx` reactively (e.g., `dataManager.documents.map { Success(it) }`) + instead of independently tracking the API call result. That's a + per-VM refactor across ~20 ViewModels; currently only `HomeScreen` and + `DocumentsScreen` have been patched to fall back to `LocalDataManager` + directly. Gallery viewers should treat a "same" row as indicating the + fixture didn't reach the screen, not that the screens genuinely render + identically. + - **iOS populated-state coverage is partial**. Swift Views today instantiate their ViewModels via `@StateObject viewModel = FooViewModel()`; the ViewModels read `DataManagerObservable.shared` directly rather than