Skip to content

Commit 9c45053

Browse files
committed
Add testcase
1 parent 09a1706 commit 9c45053

29 files changed

Lines changed: 176 additions & 114 deletions

File tree

Cargo.lock

Lines changed: 0 additions & 76 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/vespera_macro/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,3 @@ anyhow = "1.0"
2323
rstest = "0.26"
2424
insta = "1.44"
2525
tempfile = "3"
26-
serial_test = "3.2"

crates/vespera_macro/src/parser/parameters.rs

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -460,10 +460,9 @@ fn parse_query_struct_to_parameters(
460460
mod tests {
461461
use super::*;
462462
use rstest::rstest;
463-
use serial_test::serial;
464463
use std::collections::HashMap;
465464
use vespera_core::route::ParameterLocation;
466-
use insta::assert_debug_snapshot;
465+
use insta::{assert_debug_snapshot, with_settings};
467466

468467
fn setup_test_data(func_src: &str) -> (HashMap<String, String>, HashMap<String, String>) {
469468
let mut struct_definitions = HashMap::new();
@@ -502,25 +501,29 @@ mod tests {
502501
#[case(
503502
"fn test(params: Path<(String, i32)>) {}",
504503
vec!["user_id".to_string(), "count".to_string()],
505-
vec![vec![ParameterLocation::Path, ParameterLocation::Path]]
504+
vec![vec![ParameterLocation::Path, ParameterLocation::Path]],
505+
"path_tuple"
506506
)]
507507
#[case(
508508
"fn show(Path(id): Path<i32>) {}",
509509
vec!["item_id".to_string()],
510-
vec![vec![ParameterLocation::Path]]
510+
vec![vec![ParameterLocation::Path]],
511+
"path_single"
511512
)]
512513
#[case(
513514
"fn test(Query(params): Query<HashMap<String, String>>) {}",
514515
vec![],
515-
vec![vec![]]
516+
vec![vec![]],
517+
"query_hashmap"
516518
)]
517519
#[case(
518520
"fn test(TypedHeader(user_agent): TypedHeader<UserAgent>, count: i32) {}",
519521
vec![],
520522
vec![
521523
vec![ParameterLocation::Header],
522524
vec![],
523-
]
525+
],
526+
"typed_header_and_arg"
524527
)]
525528
#[case(
526529
"fn test(TypedHeader(user_agent): TypedHeader<UserAgent>, content_type: Option<TypedHeader<ContentType>>, authorization: Option<TypedHeader<Authorization<Bearer>>>) {}",
@@ -529,64 +532,74 @@ mod tests {
529532
vec![ParameterLocation::Header],
530533
vec![ParameterLocation::Header],
531534
vec![ParameterLocation::Header],
532-
]
535+
],
536+
"typed_header_multi"
533537
)]
534538
#[case(
535539
"fn test(user_agent: TypedHeader<UserAgent>, count: i32) {}",
536540
vec![],
537541
vec![
538542
vec![ParameterLocation::Header],
539543
vec![],
540-
]
544+
],
545+
"header_value_and_arg"
541546
)]
542547
#[case(
543548
"fn test(&self, id: i32) {}",
544549
vec![],
545550
vec![
546551
vec![],
547552
vec![],
548-
]
553+
],
554+
"method_receiver"
549555
)]
550556
#[case(
551557
"fn test(Path((a, b)): Path<(i32, String)>) {}",
552558
vec![],
553-
vec![vec![]]
559+
vec![vec![]],
560+
"path_tuple_destructure"
554561
)]
555562
#[case(
556563
"fn test(params: Query<QueryParams>) {}",
557564
vec![],
558-
vec![vec![ParameterLocation::Query, ParameterLocation::Query]]
565+
vec![vec![ParameterLocation::Query, ParameterLocation::Query]],
566+
"query_struct"
559567
)]
560568
#[case(
561569
"fn test(body: Json<User>) {}",
562570
vec![],
563-
vec![vec![]]
571+
vec![vec![]],
572+
"json_body"
564573
)]
565574
#[case(
566575
"fn test(params: Query<UnknownType>) {}",
567576
vec![],
568-
vec![vec![]]
577+
vec![vec![]],
578+
"query_unknown"
569579
)]
570580
#[case(
571581
"fn test(params: Query<BTreeMap<String, String>>) {}",
572582
vec![],
573-
vec![vec![]]
583+
vec![vec![]],
584+
"query_map"
574585
)]
575586
#[case(
576587
"fn test(user: Query<User>) {}",
577588
vec![],
578-
vec![vec![ParameterLocation::Query, ParameterLocation::Query]]
589+
vec![vec![ParameterLocation::Query, ParameterLocation::Query]],
590+
"query_user"
579591
)]
580592
#[case(
581593
"fn test(custom: Header<CustomHeader>) {}",
582594
vec![],
583-
vec![vec![ParameterLocation::Header]]
595+
vec![vec![ParameterLocation::Header]],
596+
"header_custom"
584597
)]
585-
#[serial]
586598
fn test_parse_function_parameter_cases(
587599
#[case] func_src: &str,
588600
#[case] path_params: Vec<String>,
589601
#[case] expected_locations: Vec<Vec<ParameterLocation>>,
602+
#[case] suffix: &str,
590603
) {
591604
let func: syn::ItemFn = syn::parse_str(func_src).unwrap();
592605
let (known_schemas, struct_definitions) = setup_test_data(func_src);
@@ -621,7 +634,9 @@ mod tests {
621634
);
622635
parameters.extend(params.clone());
623636
}
624-
assert_debug_snapshot!(parameters);
637+
with_settings!({ snapshot_suffix => format!("params_{}", suffix) }, {
638+
assert_debug_snapshot!(parameters);
639+
});
625640
}
626641

627642
#[rstest]

crates/vespera_macro/src/parser/request_body.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,24 +90,28 @@ pub fn parse_request_body(
9090
#[cfg(test)]
9191
mod tests {
9292
use super::*;
93-
use insta::assert_debug_snapshot;
93+
use insta::{assert_debug_snapshot, with_settings};
9494
use rstest::rstest;
95-
use serial_test::serial;
9695
use std::collections::HashMap;
9796
use vespera_core::schema::{SchemaRef, SchemaType};
9897

9998
#[rstest]
100-
#[case::json("fn test(Json(payload): Json<User>) {}", true)]
101-
#[case::string("fn test(just_string: String) {}", true)]
102-
#[case::str("fn test(just_str: &str) {}", true)]
103-
#[case::i32("fn test(just_i32: i32) {}", false)]
104-
#[serial]
105-
fn test_parse_request_body_cases(#[case] func_src: &str, #[case] has_body: bool) {
99+
#[case::json("fn test(Json(payload): Json<User>) {}", true, "json")]
100+
#[case::string("fn test(just_string: String) {}", true, "string")]
101+
#[case::str("fn test(just_str: &str) {}", true, "str")]
102+
#[case::i32("fn test(just_i32: i32) {}", false, "i32")]
103+
fn test_parse_request_body_cases(
104+
#[case] func_src: &str,
105+
#[case] has_body: bool,
106+
#[case] suffix: &str,
107+
) {
106108
let func: syn::ItemFn = syn::parse_str(func_src).unwrap();
107109
let arg = func.sig.inputs.first().unwrap();
108110
let body = parse_request_body(arg, &HashMap::new(), &HashMap::new());
109111
assert_eq!(body.is_some(), has_body);
110-
assert_debug_snapshot!(body);
112+
with_settings!({ snapshot_suffix => format!("req_body_{}", suffix) }, {
113+
assert_debug_snapshot!(body);
114+
});
111115
}
112116

113117
#[test]

0 commit comments

Comments
 (0)