From a9e211c4ebf9c14f76bd8c2ba4731458ec664f42 Mon Sep 17 00:00:00 2001 From: Edinson Jim <4842086+edinsonjim@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:29:19 +0100 Subject: [PATCH] feat: enhance tests for improved deserialization --- src/om/mod.rs | 2 +- tests/test_ext/mod.rs | 10 ++++++++-- tests/users/create.rs | 13 +++++++------ tests/users/update.rs | 4 ++-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/om/mod.rs b/src/om/mod.rs index 0ac5796..38834e8 100644 --- a/src/om/mod.rs +++ b/src/om/mod.rs @@ -13,7 +13,7 @@ pub struct CreateUserParams { pub confirm_password: String, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize, ToSchema, Deserialize)] pub struct UserCreated { pub id: i32, } diff --git a/tests/test_ext/mod.rs b/tests/test_ext/mod.rs index 8fc5047..d6a1ed1 100644 --- a/tests/test_ext/mod.rs +++ b/tests/test_ext/mod.rs @@ -1,11 +1,17 @@ use http_body_util::BodyExt; +use serde::de::DeserializeOwned; pub trait IntoValue { - fn into_value(self) -> impl Future; + fn into_value(self) -> impl Future + where + T: DeserializeOwned; } impl IntoValue for axum::http::Response { - async fn into_value(self) -> serde_json::Value { + async fn into_value(self) -> T + where + T: DeserializeOwned, + { let collected = self.into_body().collect().await.unwrap(); let response_in_bytes = collected.to_bytes(); diff --git a/tests/users/create.rs b/tests/users/create.rs index 954eaf8..25c50ce 100644 --- a/tests/users/create.rs +++ b/tests/users/create.rs @@ -1,9 +1,9 @@ -use crate::setup::TestContext; +use crate::{setup::TestContext, test_ext::IntoValue}; use axum::{ body::Body, http::{self, Request, StatusCode}, }; -use http_body_util::BodyExt; +use f5a_services::om::UserCreated; use sea_orm::EntityTrait; use serde_json::json; use tower::ServiceExt; @@ -80,8 +80,7 @@ async fn it_validate_required_user_params() { } ], }); - let body_bytes = res.into_body().collect().await.unwrap().to_bytes(); - let body_content: serde_json::Value = serde_json::from_slice(&body_bytes).unwrap(); + let body_content = res.into_value::().await; assert_eq!(body_content, expected_body); } @@ -111,14 +110,16 @@ async fn it_accepts_and_save_valid_user() { let res = app.oneshot(req).await.unwrap(); assert_eq!(res.status(), StatusCode::OK); - let user_saved = schemas::user::Entity::find_by_id(1) + let user_created = res.into_value::().await; + + let user_saved = schemas::user::Entity::find_by_id(user_created.id) .one(ctx.db.as_ref()) .await .unwrap(); assert!(user_saved.is_some()); let user_model = user_saved.unwrap(); - assert_eq!(user_model.id, 1); + assert_eq!(user_model.id, user_created.id); assert_eq!(user_model.username, "idesoft"); assert_eq!(user_model.creator_id, 1); assert!(user_model.disabled.is_positive()); diff --git a/tests/users/update.rs b/tests/users/update.rs index 62a19a0..04782c6 100644 --- a/tests/users/update.rs +++ b/tests/users/update.rs @@ -3,7 +3,7 @@ use axum::{ http::{self, Request, StatusCode}, }; use sea_orm::EntityTrait; -use serde_json::json; +use serde_json::{Value, json}; use tower::ServiceExt; use crate::{setup::TestContext, test_ext::IntoValue, users::migrations::insert_idesoft_user}; @@ -55,7 +55,7 @@ async fn it_validate_required_user_fields_to_update() { ], "detail": "Validation failed" }); - assert_eq!(res.into_value().await, expected_body) + assert_eq!(res.into_value::().await, expected_body) } #[tokio::test]