add tests for validify extractors
This commit is contained in:
@@ -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(¶meters)
|
check_validated(¶meters)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) async fn extract_typed_multipart_modified(
|
||||||
|
Modified(TypedMultipart(parameters)): Modified<TypedMultipart<ParametersValidify>>,
|
||||||
|
) -> StatusCode {
|
||||||
|
check_modified(¶meters)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) async fn extract_typed_multipart_validified_by_ref(
|
||||||
|
ValidifiedByRef(TypedMultipart(parameters)): ValidifiedByRef<
|
||||||
|
TypedMultipart<ParametersValidify>,
|
||||||
|
>,
|
||||||
|
) -> StatusCode {
|
||||||
|
check_validified(¶meters)
|
||||||
|
}
|
||||||
|
|
||||||
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")]
|
||||||
|
|||||||
Reference in New Issue
Block a user