From 2003ff0e59d76be6d3467ea0edbe39c727d6221b Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Sun, 9 Mar 2025 19:17:34 +0100 Subject: [PATCH] add unit test for previous bug --- seeds.sql | 1 + src/model/trip.rs | 77 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 53 insertions(+), 25 deletions(-) diff --git a/seeds.sql b/seeds.sql index caa32a2..24129af 100644 --- a/seeds.sql +++ b/seeds.sql @@ -53,6 +53,7 @@ INSERT INTO "planned_event" (name, planned_amount_cox, trip_details_id) VALUES(' INSERT INTO "trip_details" (planned_starting_time, max_people, day, notes) VALUES('11:00', 1, date('now', '+1 day'), 'trip_details for trip from cox'); INSERT INTO "trip" (cox_id, trip_details_id) VALUES(4, 2); +INSERT INTO "trip_details" (planned_starting_time, max_people, day, notes) VALUES('10:00', 2, date('now'), 'same trip_details as id=1'); INSERT INTO "trip_type" (name, desc, question, icon) VALUES ('Regatta', 'Regatta!', 'Kein normales Event. Das ist eine Regatta! Willst du wirklich teilnehmen?', '🏅'); INSERT INTO "trip_type" (name, desc, question, icon) VALUES ('Lange Ausfahrt', 'Lange Ausfahrt!', 'Das ist eine lange Ausfahrt! Willst du wirklich teilnehmen?', '💪'); INSERT INTO "trip_type" (name, desc, question, icon) VALUES ('Wanderfahrt', 'Wanderfahrt!', 'Kein normales Event. Das ist eine Wanderfahrt! Bitte überprüfe ob du alle Anforderungen erfüllst. Willst du wirklich teilnehmen?', '⛱'); diff --git a/src/model/trip.rs b/src/model/trip.rs index a37a8bf..dd817a4 100644 --- a/src/model/trip.rs +++ b/src/model/trip.rs @@ -91,33 +91,31 @@ impl Trip { trip_details.planned_starting_time, ) .await; - if same_starting_datetime.len() > 1 { - for notify in same_starting_datetime { - // don't notify oneself - if notify.id == trip_details.id { - continue; - } + for notify in same_starting_datetime { + // don't notify oneself + if notify.id == trip_details.id { + continue; + } - // don't notify people who have cancelled their trip - if notify.cancelled() { - continue; - } + // don't notify people who have cancelled their trip + if notify.cancelled() { + continue; + } - if let Some(trip) = Trip::find_by_trip_details(db, notify.id).await { - let user_earlier_trip = User::find_by_id(db, trip.cox_id as i32).await.unwrap(); - Notification::create( - db, - &user_earlier_trip, - &format!( - "{} hat eine Ausfahrt zur selben Zeit ({} um {}) wie du erstellt", - user.name, trip.day, trip.planned_starting_time - ), - "Neue Ausfahrt zur selben Zeit", - None, - None, - ) - .await; - } + if let Some(trip) = Trip::find_by_trip_details(db, notify.id).await { + let user_earlier_trip = User::find_by_id(db, trip.cox_id as i32).await.unwrap(); + Notification::create( + db, + &user_earlier_trip, + &format!( + "{} hat eine Ausfahrt zur selben Zeit ({} um {}) wie du erstellt", + user.name, trip.day, trip.planned_starting_time + ), + "Neue Ausfahrt zur selben Zeit", + None, + None, + ) + .await; } } } @@ -486,6 +484,7 @@ mod test { use crate::{ model::{ event::Event, + notification::Notification, trip::{self, TripDeleteError}, tripdetails::TripDetails, user::{SteeringUser, User}, @@ -517,6 +516,34 @@ mod test { assert!(Trip::find_by_id(&pool, 1).await.is_some()); } + #[sqlx::test] + fn test_notification_cox_if_same_datetime() { + let pool = testdb!(); + let cox = SteeringUser::new( + &pool, + User::find_by_name(&pool, "cox".into()).await.unwrap(), + ) + .await + .unwrap(); + let trip_details = TripDetails::find_by_id(&pool, 1).await.unwrap(); + Trip::new_own(&pool, &cox, trip_details).await; + + let cox2 = SteeringUser::new( + &pool, + User::find_by_name(&pool, "cox2".into()).await.unwrap(), + ) + .await + .unwrap(); + let trip_details = TripDetails::find_by_id(&pool, 3).await.unwrap(); + Trip::new_own(&pool, &cox2, trip_details).await; + + let last_notification = &Notification::for_user(&pool, &cox).await[0]; + + assert!(last_notification + .message + .starts_with("cox2 hat eine Ausfahrt zur selben Zeit")); + } + #[sqlx::test] fn test_get_day_cox_trip() { let pool = testdb!();