add tests for validify extractors

This commit is contained in:
gengteng
2023-10-21 08:33:51 +08:00
parent ac6593c18f
commit acdac2b72b

View File

@@ -127,9 +127,25 @@ async fn test_main() -> anyhow::Result<()> {
typed_multipart::route::TYPED_MULTIPART, typed_multipart::route::TYPED_MULTIPART,
post(typed_multipart::extract_typed_multipart), post(typed_multipart::extract_typed_multipart),
) )
.route(
typed_multipart::route::TYPED_MULTIPART_MODIFIED,
post(typed_multipart::extract_typed_multipart_modified),
)
.route(
typed_multipart::route::TYPED_MULTIPART_VALIDIFIED_BY_REF,
post(typed_multipart::extract_typed_multipart_validified_by_ref),
)
.route( .route(
typed_multipart::route::BASE_MULTIPART, typed_multipart::route::BASE_MULTIPART,
post(typed_multipart::extract_base_multipart), post(typed_multipart::extract_base_multipart),
)
.route(
typed_multipart::route::BASE_MULTIPART_MODIFIED,
post(typed_multipart::extract_base_multipart_modified),
)
.route(
typed_multipart::route::BASE_MULTIPART_VALIDIFIED_BY_REF,
post(typed_multipart::extract_base_multipart_validified_by_ref),
); );
#[cfg(feature = "extra")] #[cfg(feature = "extra")]
@@ -407,21 +423,49 @@ async fn test_main() -> anyhow::Result<()> {
{ {
use axum_typed_multipart::{BaseMultipart, TypedMultipart, TypedMultipartError}; use axum_typed_multipart::{BaseMultipart, TypedMultipart, TypedMultipartError};
// Validified // Validated
test_executor test_executor
.execute::<BaseMultipart<ParametersValidify, TypedMultipartError>>( .execute::<BaseMultipart<ParametersValidify, TypedMultipartError>>(
Method::POST, Method::POST,
typed_multipart::route::BASE_MULTIPART, typed_multipart::route::BASE_MULTIPART,
) )
.await?; .await?;
// Modified
test_executor
.execute_modified::<BaseMultipart<ParametersValidify, TypedMultipartError>>(
Method::POST,
typed_multipart::route::BASE_MULTIPART_MODIFIED,
)
.await?;
// ValidifiedByRef
test_executor
.execute::<BaseMultipart<ParametersValidify, TypedMultipartError>>(
Method::POST,
typed_multipart::route::BASE_MULTIPART_VALIDIFIED_BY_REF,
)
.await?;
// Validified // Validated
test_executor test_executor
.execute::<TypedMultipart<ParametersValidify>>( .execute::<TypedMultipart<ParametersValidify>>(
Method::POST, Method::POST,
typed_multipart::route::TYPED_MULTIPART, typed_multipart::route::TYPED_MULTIPART,
) )
.await?; .await?;
// Modified
test_executor
.execute_modified::<TypedMultipart<ParametersValidify>>(
Method::POST,
typed_multipart::route::TYPED_MULTIPART_MODIFIED,
)
.await?;
// ValidifiedByRef
test_executor
.execute::<TypedMultipart<ParametersValidify>>(
Method::POST,
typed_multipart::route::TYPED_MULTIPART_VALIDIFIED_BY_REF,
)
.await?;
} }
#[cfg(feature = "extra")] #[cfg(feature = "extra")]
@@ -877,11 +921,14 @@ async fn extract_json_validified_by_ref(
fn check_validated<V: Validate>(validate: &V) -> StatusCode { fn check_validated<V: Validate>(validate: &V) -> StatusCode {
// The `Validified` extractor has validated the `parameters` once, // The `Validified` extractor has validated the `parameters` once,
// it should have returned `400 BAD REQUEST` if the `parameters` were invalid, // it should have returned `400 BAD REQUEST` if the `parameters` were invalid,
// Let's validate them again to check if the `Validified` extractor works well. // Let's validate them again to check if the `Validated` extractor works well.
// If it works properly, this function will never return `500 INTERNAL SERVER ERROR` // If it works properly, this function will never return `500 INTERNAL SERVER ERROR`
match validate.validate() { match validate.validate() {
Ok(_) => StatusCode::OK, Ok(_) => StatusCode::OK,
Err(_) => StatusCode::INTERNAL_SERVER_ERROR, Err(e) => {
eprintln!("Data is unvalidated: {e}");
StatusCode::INTERNAL_SERVER_ERROR
}
} }
} }
@@ -986,14 +1033,19 @@ mod typed_header {
#[cfg(feature = "typed_multipart")] #[cfg(feature = "typed_multipart")]
mod typed_multipart { mod typed_multipart {
use super::{check_validated, ParametersValidify}; use super::{check_modified, check_validated, check_validified, ParametersValidify};
use crate::Validated; use crate::{Modified, Validated, ValidifiedByRef};
use axum::http::StatusCode; use axum::http::StatusCode;
use axum_typed_multipart::{BaseMultipart, TypedMultipart, TypedMultipartError}; use axum_typed_multipart::{BaseMultipart, TypedMultipart, TypedMultipartError};
pub mod route { pub mod route {
pub const TYPED_MULTIPART: &str = "/typed_multipart"; pub const TYPED_MULTIPART: &str = "/typed_multipart";
pub const TYPED_MULTIPART_MODIFIED: &str = "/typed_multipart_modified";
pub const TYPED_MULTIPART_VALIDIFIED_BY_REF: &str = "/typed_multipart_validified_by_ref";
pub const BASE_MULTIPART: &str = "/base_multipart"; pub const BASE_MULTIPART: &str = "/base_multipart";
pub const BASE_MULTIPART_MODIFIED: &str = "/base_multipart_modified";
pub const BASE_MULTIPART_VALIDIFIED_BY_REF: &str = "/base_multipart_validified_by_ref";
} }
impl From<&ParametersValidify> for reqwest::multipart::Form { impl From<&ParametersValidify> for reqwest::multipart::Form {
@@ -1010,6 +1062,20 @@ mod typed_multipart {
check_validated(&parameters) check_validated(&parameters)
} }
pub(super) async fn extract_typed_multipart_modified(
Modified(TypedMultipart(parameters)): Modified<TypedMultipart<ParametersValidify>>,
) -> StatusCode {
check_modified(&parameters)
}
pub(super) async fn extract_typed_multipart_validified_by_ref(
ValidifiedByRef(TypedMultipart(parameters)): ValidifiedByRef<
TypedMultipart<ParametersValidify>,
>,
) -> StatusCode {
check_validified(&parameters)
}
pub(super) async fn extract_base_multipart( pub(super) async fn extract_base_multipart(
Validated(BaseMultipart { data, .. }): Validated< Validated(BaseMultipart { data, .. }): Validated<
BaseMultipart<ParametersValidify, TypedMultipartError>, BaseMultipart<ParametersValidify, TypedMultipartError>,
@@ -1017,6 +1083,22 @@ mod typed_multipart {
) -> StatusCode { ) -> StatusCode {
check_validated(&data) check_validated(&data)
} }
pub(super) async fn extract_base_multipart_modified(
Modified(BaseMultipart { data, .. }): Modified<
BaseMultipart<ParametersValidify, TypedMultipartError>,
>,
) -> StatusCode {
check_modified(&data)
}
pub(super) async fn extract_base_multipart_validified_by_ref(
ValidifiedByRef(BaseMultipart { data, .. }): ValidifiedByRef<
BaseMultipart<ParametersValidify, TypedMultipartError>,
>,
) -> StatusCode {
check_validified(&data)
}
} }
#[cfg(feature = "extra")] #[cfg(feature = "extra")]