From 4ff4ce01957a185d49b9611a4dcd341ceae084ea Mon Sep 17 00:00:00 2001 From: Max Hohlfeld Date: Sun, 27 Apr 2025 22:38:43 +0200 Subject: [PATCH] feat: area manager can see vehicle overview refs #21 --- ...uces_template_fine_when_user_is_admin.snap | 67 +++++++++++++++++++ web/src/endpoints/area/mod.rs | 2 +- web/src/endpoints/vehicle/get_overview.rs | 66 +++++++++++++++++- web/templates/nav.html | 2 - 4 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 web/snapshots/brass_web__endpoints__vehicle__get_overview__tests__inner_produces_template_fine_when_user_is_admin.snap diff --git a/web/snapshots/brass_web__endpoints__vehicle__get_overview__tests__inner_produces_template_fine_when_user_is_admin.snap b/web/snapshots/brass_web__endpoints__vehicle__get_overview__tests__inner_produces_template_fine_when_user_is_admin.snap new file mode 100644 index 00000000..c1d8e0fa --- /dev/null +++ b/web/snapshots/brass_web__endpoints__vehicle__get_overview__tests__inner_produces_template_fine_when_user_is_admin.snap @@ -0,0 +1,67 @@ +--- +source: web/src/endpoints/vehicle/get_overview.rs +expression: body +snapshot_kind: text +--- +
+
+
+
+

+ Fahrzeuge +

+
+ +
+ + +
+ + + + + + + + + + + + + + + + + +
FunkkennerWache
+ 11.49.1 + + FF Leipzig Ost + +
+ + + + + Bearbeiten + + +
+
+
+ +
+
diff --git a/web/src/endpoints/area/mod.rs b/web/src/endpoints/area/mod.rs index f2b7ff1c..43219b3d 100644 --- a/web/src/endpoints/area/mod.rs +++ b/web/src/endpoints/area/mod.rs @@ -11,7 +11,7 @@ use crate::models::{Area, Role, User}; #[derive(Template)] #[cfg_attr(not(test), template(path = "area/new_or_edit.html"))] -#[cfg_attr(test, template(path = "area/new_or_edit.html", block = "content"))] +#[cfg_attr(test, template(path = "area/new_or_edit.html", block = "content"), allow(dead_code))] struct NewOrEditAreaTemplate { user: User, area: Option, diff --git a/web/src/endpoints/vehicle/get_overview.rs b/web/src/endpoints/vehicle/get_overview.rs index 9f2ed4ec..9a5dcdef 100644 --- a/web/src/endpoints/vehicle/get_overview.rs +++ b/web/src/endpoints/vehicle/get_overview.rs @@ -8,7 +8,12 @@ use crate::{ }; #[derive(Template)] -#[template(path = "vehicles/overview.html")] +#[cfg_attr(not(test), template(path = "vehicles/overview.html"))] +#[cfg_attr( + test, + template(path = "vehicles/overview.html", block = "content"), + allow(dead_code) +)] pub struct VehiclesOverviewTemplate { user: User, vehicles: Vec, @@ -19,7 +24,7 @@ pub async fn get( user: web::ReqData, pool: web::Data, ) -> Result { - if user.role != Role::Admin { + if user.role != Role::Admin && user.role != Role::AreaManager { return Err(ApplicationError::Unauthorized); } @@ -32,3 +37,60 @@ pub async fn get( Ok(template.to_response()?) } + +#[cfg(test)] +mod tests { + use crate::{ + models::{Function, Role, Vehicle}, + utils::test_helper::{ + assert_snapshot, read_body, test_get, DbTestContext, RequestConfig, StatusCode, + }, + }; + use brass_macros::db_test; + + #[db_test] + async fn user_cant_view_overview(context: &DbTestContext) { + let app = context.app().await; + + let config = RequestConfig::new("/vehicles"); + + let response = test_get(&context.db_pool, &app, &config).await; + assert_eq!(StatusCode::UNAUTHORIZED, response.status()); + } + + #[db_test] + async fn area_manager_can_view_overview(context: &DbTestContext) { + let app = context.app().await; + + let config = RequestConfig { + uri: "/vehicles".to_string(), + role: Role::AreaManager, + function: vec![Function::Posten], + user_area: 1, + }; + + let response = test_get(&context.db_pool, &app, &config).await; + assert_eq!(StatusCode::OK, response.status()); + } + + #[db_test] + async fn produces_template_fine_when_user_is_admin(context: &DbTestContext) { + let app = context.app().await; + Vehicle::create(&context.db_pool, "11.49.1", "FF Leipzig Ost") + .await + .unwrap(); + + let config = RequestConfig { + uri: "/vehicles".to_string(), + role: Role::Admin, + function: vec![Function::Posten], + user_area: 1, + }; + + let response = test_get(&context.db_pool, &app, &config).await; + assert_eq!(StatusCode::OK, response.status()); + + let body = read_body(response).await; + assert_snapshot!(body); + } +} diff --git a/web/templates/nav.html b/web/templates/nav.html index e897a158..e86d640f 100644 --- a/web/templates/nav.html +++ b/web/templates/nav.html @@ -48,11 +48,9 @@ Veranstaltungsorte - {% if user.role == Role::Admin %} Fahrzeuge - {% endif %} {% endif %}