Add REST endpoint to find bookings per week

This commit is contained in:
Simon Goller 2024-06-12 07:38:51 +02:00
parent 47a3de3c54
commit e1f9936b62
6 changed files with 110 additions and 0 deletions

View file

@ -5,6 +5,7 @@ use service::{
ServiceError, ValidationFailureItem,
};
use std::sync::Arc;
use tokio::join;
use uuid::Uuid;
const BOOKING_SERVICE_PROCESS: &str = "booking-service";
@ -122,6 +123,28 @@ where
Ok(booking)
}
async fn get_for_week(
&self,
calendar_week: i32,
year: u32,
context: Authentication<Self::Context>,
) -> Result<Arc<[Booking]>, ServiceError> {
let (hr_permission, sales_permission) = join!(
self.permission_service
.check_permission("hr", context.clone()),
self.permission_service.check_permission("sales", context),
);
hr_permission.or(sales_permission)?;
Ok(self
.booking_dao
.find_by_week(calendar_week, year)
.await?
.iter()
.map(Booking::from)
.collect())
}
async fn create(
&self,
booking: &Booking,

View file

@ -214,6 +214,38 @@ async fn test_get_no_permission() {
test_forbidden(&result);
}
#[tokio::test]
async fn test_get_for_week() {
let mut deps = build_dependencies(true, "sales");
deps.booking_dao
.expect_find_by_week()
.with(eq(3), eq(2024))
.returning(|_, _| Ok([default_booking_entity()].into()));
let service = deps.build_service();
let result = service.get_for_week(3, 2024, ().auth()).await;
assert_eq!(result.unwrap(), [default_booking()].into());
}
#[tokio::test]
async fn test_get_for_week_hr_role() {
let mut deps = build_dependencies(true, "hr");
deps.booking_dao
.expect_find_by_week()
.with(eq(3), eq(2024))
.returning(|_, _| Ok([default_booking_entity()].into()));
let service = deps.build_service();
let result = service.get_for_week(3, 2024, ().auth()).await;
assert_eq!(result.unwrap(), [default_booking()].into());
}
#[tokio::test]
async fn test_get_for_week_no_permission() {
let deps = build_dependencies(false, "hr");
let service = deps.build_service();
let result = service.get_for_week(3, 2024, ().auth()).await;
test_forbidden(&result);
}
#[tokio::test]
async fn test_create() {
let mut deps = build_dependencies(true, "hr");