mod params { use axum_error_macro::ErrorResponse; use hyper::body::HttpBody; use serde_json::json; #[tokio::test] async fn right_param_json() { #[derive(ErrorResponse)] #[error_format("application/json")] enum Error { #[error(code = 404, msg = "Post by {} id was not found")] PostByIdNotFound(u32), #[error(code = 404, msg = "User by {} username was not found")] UserByUsernameNotFound(String), } let id = 12; let username = "Bebra"; let post_error_msg = json!({ "message": format!("Post by {} id was not found", id), }); let user_error_msg = json!({ "message": format!("User by {} username was not found", username), }); assert_eq!( Error::PostByIdNotFound(id) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), post_error_msg.to_string().as_bytes() ); assert_eq!( Error::UserByUsernameNotFound(username.into()) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), user_error_msg.to_string().as_bytes() ); } #[tokio::test] async fn right_param_text() { #[derive(ErrorResponse)] #[error_format("text/plain")] enum Error { #[error(code = 404, msg = "Post by {} id was not found")] PostByIdNotFound(u32), #[error(code = 404, msg = "User by {} username was not found")] UserByUsernameNotFound(String), } let id = 12; let username = "Bebra"; let post_error_msg = format!("Post by {} id was not found", id); let user_error_msg = format!("User by {} username was not found", username); assert_eq!( Error::PostByIdNotFound(id) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), post_error_msg.to_string().as_bytes() ); assert_eq!( Error::UserByUsernameNotFound(username.into()) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), user_error_msg.as_bytes() ); } #[tokio::test] async fn right_multiply_params_json() { #[derive(ErrorResponse)] #[error_format("application/json")] enum Error { #[error(code = 404, msg = "User by {} username with {} role was not found")] UserByUsernameAndRoleNotFound(String, String), } let role = "ADMIN"; let username = "Bebra"; let error_msg = json!({ "message": format!( "User by {} username with {} role was not found", username, role ) }); assert_eq!( Error::UserByUsernameAndRoleNotFound(username.into(), role.into()) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), error_msg.to_string().as_bytes() ); } #[tokio::test] async fn right_multiply_params_text() { #[derive(ErrorResponse)] #[error_format("text/plain")] enum Error { #[error(code = 404, msg = "User by {} username with {} role was not found")] UserByUsernameAndRoleNotFound(String, String), } let role = "ADMIN"; let username = "Bebra"; let error_msg = format!( "User by {} username with {} role was not found", username, role ); assert_eq!( Error::UserByUsernameAndRoleNotFound(username.into(), role.into()) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), error_msg.as_bytes() ); } #[tokio::test] async fn struct_param_json() { #[derive(Debug)] struct User { username: String, } #[derive(ErrorResponse)] #[error_format("application/json")] enum Error { #[error(code = 404, msg = "User {:?} was not found")] UserNotFound(User), } let user = User { username: "bebra".into(), }; let error_msg = json!({ "message": format!("User {:?} was not found", user) }); assert_eq!( Error::UserNotFound(user) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), error_msg.to_string().as_bytes() ); } #[tokio::test] async fn struct_param_text() { #[derive(Debug)] struct User { username: String, } #[derive(ErrorResponse)] #[error_format("text/plain")] enum Error { #[error(code = 404, msg = "User {:?} was not found")] UserNotFound(User), } let user = User { username: "bebra".into(), }; let error_msg = format!("User {:?} was not found", user); assert_eq!( Error::UserNotFound(user) .into_response() .data() .await .unwrap() .unwrap() .to_vec(), error_msg.as_bytes() ); } }