From 507bb13a6e9212ae5b81a4b34ef2044eada72be0 Mon Sep 17 00:00:00 2001 From: Max Hohlfeld Date: Mon, 30 Jun 2025 13:17:27 +0200 Subject: [PATCH] test: new assignment --- web/src/endpoints/assignment/post_new.rs | 81 ++++++++++++++++++++++++ web/src/utils/test_helper/mod.rs | 25 ++++++++ 2 files changed, 106 insertions(+) diff --git a/web/src/endpoints/assignment/post_new.rs b/web/src/endpoints/assignment/post_new.rs index d6b094c5..889974ee 100644 --- a/web/src/endpoints/assignment/post_new.rs +++ b/web/src/endpoints/assignment/post_new.rs @@ -73,3 +73,84 @@ pub async fn post( Ok(template.to_response()?) } + +#[cfg(test)] +mod tests { + use brass_db::models::{ + Availability, AvailabilityChangeset, Event, EventChangeset, Location, User, + }; + use brass_macros::db_test; + use chrono::{NaiveDate, NaiveDateTime}; + use fake::{Fake, Faker}; + + use crate::utils::test_helper::{DbTestContext, NaiveDateTimeExt}; + + #[db_test] + fn response_produces_updated_template(context: &DbTestContext) { + let app = context.app().await; + Location::create(&context.db_pool, &Faker.fake::(), 1) + .await + .unwrap(); + + let start = NaiveDateTime::from_ymd_and_hms(2025, 01, 10, 10, 0, 0).unwrap(); + let end = NaiveDateTime::from_ymd_and_hms(2025, 01, 10, 20, 0, 0).unwrap(); + + Event::create( + &context.db_pool, + EventChangeset::create_for_test(start, end), + ) + .await + .unwrap(); + + User::create(&context.db_pool, Faker.fake()).await.unwrap(); + + // Availability::create(pool, 1, AvailabilityChangeset { time () }) + + assert!(false) + } + + #[db_test] + fn fails_when_availability_does_not_exist(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_event_does_not_exist(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_area_manager_is_different_area_from_event(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_availability_user_not_in_event_area(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_assignment_time_doesnt_fit_into_availability_time(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_end_time_lies_before_start_time(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_availability_time_already_assigned(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_availability_user_does_not_have_function(context: &DbTestContext) { + assert!(false) + } + + #[db_test] + fn fails_when_event_already_has_enough_assignments_for_function(context: &DbTestContext) { + assert!(false) + } +} diff --git a/web/src/utils/test_helper/mod.rs b/web/src/utils/test_helper/mod.rs index 27b44174..aa32ceae 100644 --- a/web/src/utils/test_helper/mod.rs +++ b/web/src/utils/test_helper/mod.rs @@ -1,5 +1,6 @@ mod test_context; mod test_requests; +use chrono::{NaiveDate, NaiveDateTime}; pub use test_context::{setup, teardown, DbTestContext}; pub use test_requests::RequestConfig; pub use test_requests::{read_body, test_delete, test_get, test_post, test_put}; @@ -27,3 +28,27 @@ macro_rules! assert_mail_snapshot { pub(crate) use assert_mail_snapshot; pub(crate) use assert_snapshot; + +pub trait NaiveDateTimeExt { + fn from_ymd_and_hms( + year: i32, + month: u32, + day: u32, + hour: u32, + minute: u32, + second: u32, + ) -> Option; +} + +impl NaiveDateTimeExt for NaiveDateTime { + fn from_ymd_and_hms( + year: i32, + month: u32, + day: u32, + hour: u32, + minute: u32, + second: u32, + ) -> Option { + NaiveDate::from_ymd_opt(year, month, day)?.and_hms_opt(hour, minute, second) + } +}