11#[ cfg( test) ]
22#[ allow( clippy:: module_inception) ]
33pub mod tests {
4+ use crate :: Validate ;
45 use crate :: {
5- OptionalPostalAddress , PostalAddress ,
6+ Field , OptionalPostalAddress , PostalAddress , ValidationError ,
67 bill:: { BillKeys , BitcreditBill } ,
78 contact:: { ContactType , IdentityPublicData } ,
89 identity:: Identity ,
910 } ;
11+ use rstest:: rstest;
1012
11- pub fn empty_address ( ) -> PostalAddress {
13+ pub fn valid_address ( ) -> PostalAddress {
1214 PostalAddress {
13- country : "AT" . to_string ( ) ,
14- city : "Vienna" . to_string ( ) ,
15- zip : None ,
16- address : "Some address" . to_string ( ) ,
15+ country : "AT" . into ( ) ,
16+ city : "Vienna" . into ( ) ,
17+ zip : Some ( "1010" . into ( ) ) ,
18+ address : "Kärntner Straße 1" . into ( ) ,
1719 }
1820 }
1921
20- pub fn empty_optional_address ( ) -> OptionalPostalAddress {
22+ #[ rstest]
23+ #[ case:: empty_country(
24+ PostalAddress { country: "" . into( ) , ..valid_address( ) } ,
25+ ValidationError :: FieldEmpty ( Field :: Country )
26+ ) ]
27+ #[ case:: blank_country(
28+ PostalAddress { country: " " . into( ) , ..valid_address( ) } ,
29+ ValidationError :: FieldEmpty ( Field :: Country )
30+ ) ]
31+ #[ case:: empty_city(
32+ PostalAddress { city: "" . into( ) , ..valid_address( ) } ,
33+ ValidationError :: FieldEmpty ( Field :: City )
34+ ) ]
35+ #[ case:: blank_city(
36+ PostalAddress { city: " " . into( ) , ..valid_address( ) } ,
37+ ValidationError :: FieldEmpty ( Field :: City )
38+ ) ]
39+ #[ case:: empty_zip(
40+ PostalAddress { zip: Some ( "" . into( ) ) , ..valid_address( ) } ,
41+ ValidationError :: FieldEmpty ( Field :: Zip )
42+ ) ]
43+ #[ case:: blank_zip(
44+ PostalAddress { zip: Some ( " " . into( ) ) , ..valid_address( ) } ,
45+ ValidationError :: FieldEmpty ( Field :: Zip )
46+ ) ]
47+ #[ case:: empty_address(
48+ PostalAddress { address: "" . into( ) , ..valid_address( ) } ,
49+ ValidationError :: FieldEmpty ( Field :: Address )
50+ ) ]
51+ #[ case:: blank_address(
52+ PostalAddress { address: " " . into( ) , ..valid_address( ) } ,
53+ ValidationError :: FieldEmpty ( Field :: Address )
54+ ) ]
55+ fn test_invalid_address_cases (
56+ #[ case] address : PostalAddress ,
57+ #[ case] expected_error : ValidationError ,
58+ ) {
59+ assert_eq ! ( address. validate( ) , Err ( expected_error) ) ;
60+ }
61+
62+ #[ rstest]
63+ #[ case:: baseline( valid_address( ) ) ]
64+ #[ case:: spaced_country( PostalAddress {
65+ zip: Some ( "1020" . into( ) ) ,
66+ country: " AT " . into( ) ,
67+ ..valid_address( )
68+ } ) ]
69+ #[ case:: no_zip(
70+ PostalAddress { zip: None , ..valid_address( ) } ,
71+ ) ]
72+ #[ case:: spaced_zip( PostalAddress {
73+ zip: Some ( " Some Street 1 " . into( ) ) ,
74+ ..valid_address( )
75+ } ) ]
76+ #[ case:: spaced_zip_address( PostalAddress {
77+ zip: Some ( " 10101 " . into( ) ) ,
78+ address: " 56 Rue de Paris " . into( ) ,
79+ ..valid_address( )
80+ } ) ]
81+ fn test_valid_addresses ( #[ case] address : PostalAddress ) {
82+ assert_eq ! ( address. validate( ) , Ok ( ( ) ) ) ;
83+ }
84+
85+ pub fn valid_optional_address ( ) -> OptionalPostalAddress {
2186 OptionalPostalAddress {
22- country : None ,
23- city : None ,
24- zip : None ,
25- address : None ,
87+ country : Some ( "AT" . into ( ) ) ,
88+ city : Some ( "Vienna" . into ( ) ) ,
89+ zip : Some ( "1010" . into ( ) ) ,
90+ address : Some ( "Kärntner Straße 1" . into ( ) ) ,
2691 }
2792 }
2893
94+ #[ test]
95+ fn test_valid_optional_address ( ) {
96+ let address = valid_optional_address ( ) ;
97+ assert_eq ! ( address. validate( ) , Ok ( ( ) ) ) ;
98+ assert_eq ! (
99+ OptionalPostalAddress {
100+ country: None ,
101+ city: None ,
102+ zip: None ,
103+ address: None
104+ }
105+ . validate( ) ,
106+ Ok ( ( ) )
107+ ) ;
108+ }
109+
110+ #[ rstest]
111+ #[ case:: empty_country(
112+ OptionalPostalAddress { country: Some ( "" . into( ) ) , ..valid_optional_address( ) } ,
113+ ValidationError :: FieldEmpty ( Field :: Country )
114+ ) ]
115+ #[ case:: blank_country(
116+ OptionalPostalAddress { country: Some ( " " . into( ) ) , ..valid_optional_address( ) } ,
117+ ValidationError :: FieldEmpty ( Field :: Country )
118+ ) ]
119+ #[ case:: empty_city(
120+ OptionalPostalAddress { city: Some ( "" . into( ) ) , ..valid_optional_address( ) } ,
121+ ValidationError :: FieldEmpty ( Field :: City )
122+ ) ]
123+ #[ case:: blank_city(
124+ OptionalPostalAddress { city: Some ( "\n \t " . into( ) ) , ..valid_optional_address( ) } ,
125+ ValidationError :: FieldEmpty ( Field :: City )
126+ ) ]
127+ #[ case:: empty_zip(
128+ OptionalPostalAddress { zip: Some ( "" . into( ) ) , ..valid_optional_address( ) } ,
129+ ValidationError :: FieldEmpty ( Field :: Zip )
130+ ) ]
131+ #[ case:: blank_zip(
132+ OptionalPostalAddress { zip: Some ( " " . into( ) ) , ..valid_optional_address( ) } ,
133+ ValidationError :: FieldEmpty ( Field :: Zip )
134+ ) ]
135+ #[ case:: empty_address(
136+ OptionalPostalAddress { address: Some ( "" . into( ) ) , ..valid_optional_address( ) } ,
137+ ValidationError :: FieldEmpty ( Field :: Address )
138+ ) ]
139+ #[ case:: blank_address(
140+ OptionalPostalAddress { address: Some ( " " . into( ) ) , ..valid_optional_address( ) } ,
141+ ValidationError :: FieldEmpty ( Field :: Address )
142+ ) ]
143+ fn test_optional_address (
144+ #[ case] address : OptionalPostalAddress ,
145+ #[ case] expected_error : ValidationError ,
146+ ) {
147+ assert_eq ! ( address. validate( ) , Err ( expected_error) ) ;
148+ }
149+
29150 pub fn empty_identity ( ) -> Identity {
30151 Identity {
31152 node_id : "" . to_string ( ) ,
32153 name : "some name" . to_string ( ) ,
33154 email : "[email protected] " . to_string ( ) , 34- postal_address : empty_optional_address ( ) ,
155+ postal_address : valid_optional_address ( ) ,
35156 date_of_birth : None ,
36157 country_of_birth : None ,
37158 city_of_birth : None ,
@@ -47,7 +168,7 @@ pub mod tests {
47168 t : ContactType :: Person ,
48169 node_id : "" . to_string ( ) ,
49170 name : "some name" . to_string ( ) ,
50- postal_address : empty_address ( ) ,
171+ postal_address : valid_address ( ) ,
51172 email : None ,
52173 nostr_relay : None ,
53174 }
@@ -58,7 +179,7 @@ pub mod tests {
58179 t : ContactType :: Person ,
59180 node_id,
60181 name : "some name" . to_string ( ) ,
61- postal_address : empty_address ( ) ,
182+ postal_address : valid_address ( ) ,
62183 email : None ,
63184 nostr_relay : None ,
64185 }
0 commit comments