Add REST endpoint to find bookings per week
This commit is contained in:
parent
47a3de3c54
commit
e1f9936b62
6 changed files with 110 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue