Skip to content

Commit 6b824c9

Browse files
feat: add validation compile tests
1 parent d756fd6 commit 6b824c9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+419
-15
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@ repository = "https://github.com/RustForWeb/fortifier"
1010
version = "0.0.1"
1111

1212
[workspace.dependencies]
13+
email_address = { version = "0.2.9", default-features = false }
1314
fortifier = { path = "./packages/fortifier", version = "0.0.1" }
1415
fortifier-macros = { path = "./packages/fortifier-macros", version = "0.0.1" }
16+
indexmap = "2.12.0"
1517
regex = "1.12.2"
1618
serde = "1.0.228"
1719
serde_json = "1.0.145"
1820
tokio = "1.48.0"
21+
url = "2.5.7"
1922
utoipa = "5.4.0"
2023

2124
[workspace.lints.rust]

packages/fortifier-macros/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ quote = "1.0.42"
2424
syn = "2.0.110"
2525

2626
[dev-dependencies]
27-
fortifier = { workspace = true, features = ["email"] }
27+
email_address.workspace = true
28+
fortifier = { workspace = true, features = ["all-validations", "indexmap"] }
29+
indexmap.workspace = true
30+
regex.workspace = true
2831
trybuild = "1.0.114"
32+
url.workspace = true
2933

3034
[lints]
3135
workspace = true

packages/fortifier-macros/src/validate/field.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ impl<'a> ValidateField<'a> {
4747
) -> Result<Self> {
4848
let error_ident = match &ident {
4949
LiteralOrIdent::Literal(literal) => format_ident!("F{literal}"),
50-
LiteralOrIdent::Ident(ident) => {
51-
format_ident!("{}", ident.to_string().to_case(Case::UpperCamel))
52-
}
50+
LiteralOrIdent::Ident(ident) => upper_camel_ident(ident),
5351
};
5452
let error_type_ident = format_ident!("{type_prefix}{error_ident}ValidationError");
5553

@@ -178,3 +176,13 @@ impl<'a> ValidateField<'a> {
178176
.collect()
179177
}
180178
}
179+
180+
fn upper_camel_ident(ident: &Ident) -> Ident {
181+
let s = ident.to_string();
182+
183+
if s.starts_with("r#") {
184+
format_ident!("{}", (&s[2..]).to_case(Case::UpperCamel))
185+
} else {
186+
format_ident!("{}", s.to_case(Case::UpperCamel))
187+
}
188+
}

packages/fortifier-macros/src/validations/length.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ impl Validation for Length {
3636
}
3737
})?;
3838

39+
if result.equal.is_some() {
40+
if result.min.is_some() {
41+
return Err(meta.error("`equal` and `min` are conflicting parameters"));
42+
} else if result.max.is_some() {
43+
return Err(meta.error("`equal` and `max` are conflicting parameters"));
44+
}
45+
}
46+
3947
Ok(result)
4048
}
4149

packages/fortifier-macros/tests/derive.rs

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
use trybuild::TestCases;
2+
3+
#[test]
4+
fn validate() {
5+
let t = TestCases::new();
6+
t.pass("tests/validate/*_pass.rs");
7+
t.compile_fail("tests/validate/*_fail.rs");
8+
}

packages/fortifier-macros/tests/derive/context_pass.rs renamed to packages/fortifier-macros/tests/validate/context_pass.rs

File renamed without changes.

packages/fortifier-macros/tests/derive/enum_named_pass.rs renamed to packages/fortifier-macros/tests/validate/enum_named_pass.rs

File renamed without changes.

packages/fortifier-macros/tests/derive/enum_unit_pass.rs renamed to packages/fortifier-macros/tests/validate/enum_unit_pass.rs

File renamed without changes.

0 commit comments

Comments
 (0)