From 85a678d445b6a09f9d33b02a9a5986402f8271b0 Mon Sep 17 00:00:00 2001 From: Stefan Poindl Date: Wed, 4 Feb 2026 16:50:50 +0100 Subject: [PATCH 1/2] fix android app version getting lost --- .github/workflows/android-release.yml | 7 +++++++ .github/workflows/cd.yml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 6ddc6c73..2a65febd 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -124,6 +124,13 @@ jobs: NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} run: cargo tauri android init + - name: Restore committed Android version properties + run: | + # cargo tauri android init overwrites tauri.properties - restore the committed version + git checkout HEAD -- src-tauri/gen/android/app/tauri.properties 2>/dev/null || echo "No committed tauri.properties found" + echo "Android version properties:" + cat src-tauri/gen/android/app/tauri.properties + - name: Generate Android icons working-directory: src-tauri run: cargo tauri icon icons/icon.png diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index f6d82fa8..02a65d6b 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -100,7 +100,7 @@ jobs: git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add package.json src-tauri/Cargo.toml src-tauri/tauri.conf.json - git add src-tauri/gen/android/app/tauri.properties || true + git add --force src-tauri/gen/android/app/tauri.properties git commit -m "chore: bump version to ${{ needs.generate-version.outputs.version }} [skip ci]" || echo "No changes to commit" git push || echo "Nothing to push" From 9e60dcdce2a0e28794ad7cc2a3e48ec301e4cf9e Mon Sep 17 00:00:00 2001 From: Stefan Poindl Date: Wed, 4 Feb 2026 17:04:35 +0100 Subject: [PATCH 2/2] fix date based test issues --- src-tauri/tests/cmd/test_progress_cmd.rs | 182 +++++++++++++++-------- 1 file changed, 117 insertions(+), 65 deletions(-) diff --git a/src-tauri/tests/cmd/test_progress_cmd.rs b/src-tauri/tests/cmd/test_progress_cmd.rs index 1581a107..19e7ca28 100644 --- a/src-tauri/tests/cmd/test_progress_cmd.rs +++ b/src-tauri/tests/cmd/test_progress_cmd.rs @@ -1,4 +1,5 @@ use crate::helpers::setup_test_pool; +use chrono::{Days, Local}; use librefit_lib::service::intake::{ create_intake, create_intake_target, NewIntake, NewIntakeTarget, }; @@ -12,43 +13,61 @@ use tauri::Manager; // PROGRESS TRACKER TESTS // ============================================================================ +/// Returns test dates relative to today to avoid "target date lies in the past" validation errors. +/// Returns (start_date, end_date, mid_date, query_date) as formatted strings. +fn get_future_test_dates() -> (String, String, String, String) { + let today = Local::now().date_naive(); + let start = today.checked_add_days(Days::new(1)).unwrap(); + let end = today.checked_add_days(Days::new(31)).unwrap(); + let mid = today.checked_add_days(Days::new(5)).unwrap(); + let query = today.checked_add_days(Days::new(10)).unwrap(); + ( + start.format("%Y-%m-%d").to_string(), + end.format("%Y-%m-%d").to_string(), + mid.format("%Y-%m-%d").to_string(), + query.format("%Y-%m-%d").to_string(), + ) +} + #[test] fn test_get_tracker_progress_success() { let pool = setup_test_pool(); let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, mid_date, query_date) = get_future_test_dates(); + // Create targets let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); // Create tracker entries - let entry1 = NewIntake::new("2026-01-05".to_string(), 1800, "b".to_string(), None); + let entry1 = NewIntake::new(mid_date.clone(), 1800, "b".to_string(), None); create_intake(app.state(), entry1).unwrap(); - let entry2 = NewIntake::new("2026-01-06".to_string(), 2000, "l".to_string(), None); + let entry2 = NewIntake::new(mid_date.clone(), 2000, "l".to_string(), None); create_intake(app.state(), entry2).unwrap(); - let weight_entry = NewWeightTracker::new("2026-01-05".to_string(), 79.5); + let weight_entry = NewWeightTracker::new(mid_date.clone(), 79.5); create_weight_tracker_entry(app.state(), weight_entry).unwrap(); // Get progress - let result = get_tracker_progress(app.state(), "2026-01-10".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_ok()); let progress = result.unwrap(); @@ -64,17 +83,19 @@ fn test_get_tracker_progress_no_intake_target() { let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, _, query_date) = get_future_test_dates(); + // Create only weight target let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); - let result = get_tracker_progress(app.state(), "2026-01-10".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_err()); assert!(result.unwrap_err().contains("No calorie target found")); @@ -86,17 +107,19 @@ fn test_get_tracker_progress_no_weight_target() { let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, _, query_date) = get_future_test_dates(); + // Create only calorie target let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); - let result = get_tracker_progress(app.state(), "2026-01-10".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_err()); assert!(result.unwrap_err().contains("No weight target found")); @@ -108,26 +131,28 @@ fn test_get_tracker_progress_empty_trackers() { let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, _, query_date) = get_future_test_dates(); + // Create targets but no tracker entries let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); - let result = get_tracker_progress(app.state(), "2026-01-10".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_ok()); let progress = result.unwrap(); @@ -143,20 +168,22 @@ fn test_get_tracker_progress_invalid_date_format() { let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, _, _) = get_future_test_dates(); + // Create targets let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; @@ -174,36 +201,38 @@ fn test_get_tracker_progress_with_multiple_entries_same_day() { let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, mid_date, query_date) = get_future_test_dates(); + // Create targets let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); // Create multiple entries on same day - let entry1 = NewIntake::new("2026-01-05".to_string(), 500, "b".to_string(), None); + let entry1 = NewIntake::new(mid_date.clone(), 500, "b".to_string(), None); create_intake(app.state(), entry1).unwrap(); - let entry2 = NewIntake::new("2026-01-05".to_string(), 700, "l".to_string(), None); + let entry2 = NewIntake::new(mid_date.clone(), 700, "l".to_string(), None); create_intake(app.state(), entry2).unwrap(); - let entry3 = NewIntake::new("2026-01-05".to_string(), 800, "d".to_string(), None); + let entry3 = NewIntake::new(mid_date.clone(), 800, "d".to_string(), None); create_intake(app.state(), entry3).unwrap(); - let result = get_tracker_progress(app.state(), "2026-01-10".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_ok()); let progress = result.unwrap(); @@ -217,27 +246,29 @@ fn test_get_tracker_progress_date_before_target_end() { let app = tauri::test::mock_app(); app.manage(pool); + let (start_date, end_date, _, query_date) = get_future_test_dates(); + // Create targets let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); // Query date before target end date - let result = get_tracker_progress(app.state(), "2026-01-15".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_ok()); let progress = result.unwrap(); @@ -250,27 +281,36 @@ fn test_get_tracker_progress_date_after_target_end() { let app = tauri::test::mock_app(); app.manage(pool); + let today = Local::now().date_naive(); + let start = today.checked_add_days(Days::new(1)).unwrap(); + let end = today.checked_add_days(Days::new(15)).unwrap(); + let query_after_end = today.checked_add_days(Days::new(31)).unwrap(); + + let start_date = start.format("%Y-%m-%d").to_string(); + let end_date = end.format("%Y-%m-%d").to_string(); + let query_date = query_after_end.format("%Y-%m-%d").to_string(); + // Create targets let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-15".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-15".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); // Query date after target end date - let result = get_tracker_progress(app.state(), "2026-01-31".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_ok()); let progress = result.unwrap(); @@ -284,36 +324,48 @@ fn test_get_tracker_progress_with_weight_entries() { let app = tauri::test::mock_app(); app.manage(pool); + let today = Local::now().date_naive(); + let start = today.checked_add_days(Days::new(1)).unwrap(); + let end = today.checked_add_days(Days::new(31)).unwrap(); + let entry1_date = today.checked_add_days(Days::new(5)).unwrap(); + let entry2_date = today.checked_add_days(Days::new(10)).unwrap(); + let entry3_date = today.checked_add_days(Days::new(15)).unwrap(); + let query = today.checked_add_days(Days::new(20)).unwrap(); + + let start_date = start.format("%Y-%m-%d").to_string(); + let end_date = end.format("%Y-%m-%d").to_string(); + let query_date = query.format("%Y-%m-%d").to_string(); + // Create targets let intake_target = NewIntakeTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), target_calories: 2000, maximum_calories: 2500, }; create_intake_target(app.state(), intake_target).unwrap(); let weight_target = NewWeightTarget { - added: "2026-01-01".to_string(), - start_date: "2026-01-01".to_string(), - end_date: "2026-01-31".to_string(), + added: start_date.clone(), + start_date: start_date.clone(), + end_date: end_date.clone(), initial_weight: 80.0, target_weight: 75.0, }; create_weight_target(app.state(), weight_target).unwrap(); // Create weight entries - let weight1 = NewWeightTracker::new("2026-01-05".to_string(), 79.8); + let weight1 = NewWeightTracker::new(entry1_date.format("%Y-%m-%d").to_string(), 79.8); create_weight_tracker_entry(app.state(), weight1).unwrap(); - let weight2 = NewWeightTracker::new("2026-01-10".to_string(), 78.5); + let weight2 = NewWeightTracker::new(entry2_date.format("%Y-%m-%d").to_string(), 78.5); create_weight_tracker_entry(app.state(), weight2).unwrap(); - let weight3 = NewWeightTracker::new("2026-01-15".to_string(), 77.2); + let weight3 = NewWeightTracker::new(entry3_date.format("%Y-%m-%d").to_string(), 77.2); create_weight_tracker_entry(app.state(), weight3).unwrap(); - let result = get_tracker_progress(app.state(), "2026-01-20".to_string()); + let result = get_tracker_progress(app.state(), query_date); assert!(result.is_ok()); let progress = result.unwrap();