1
1
#[ cfg( test) ]
2
2
#[ allow( clippy:: module_inception) ]
3
3
pub mod tests {
4
+ use crate :: Validate ;
4
5
use crate :: {
5
- OptionalPostalAddress , PostalAddress ,
6
+ Field , OptionalPostalAddress , PostalAddress , ValidationError ,
6
7
bill:: { BillKeys , BitcreditBill } ,
7
8
contact:: { ContactType , IdentityPublicData } ,
8
9
identity:: Identity ,
9
10
} ;
11
+ use rstest:: rstest;
10
12
11
- pub fn empty_address ( ) -> PostalAddress {
13
+ pub fn valid_address ( ) -> PostalAddress {
12
14
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 ( ) ,
17
19
}
18
20
}
19
21
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 {
21
86
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 ( ) ) ,
26
91
}
27
92
}
28
93
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
+
29
150
pub fn empty_identity ( ) -> Identity {
30
151
Identity {
31
152
node_id : "" . to_string ( ) ,
32
153
name : "some name" . to_string ( ) ,
33
154
email : "[email protected] " . to_string ( ) ,
34
- postal_address : empty_optional_address ( ) ,
155
+ postal_address : valid_optional_address ( ) ,
35
156
date_of_birth : None ,
36
157
country_of_birth : None ,
37
158
city_of_birth : None ,
@@ -47,7 +168,7 @@ pub mod tests {
47
168
t : ContactType :: Person ,
48
169
node_id : "" . to_string ( ) ,
49
170
name : "some name" . to_string ( ) ,
50
- postal_address : empty_address ( ) ,
171
+ postal_address : valid_address ( ) ,
51
172
email : None ,
52
173
nostr_relay : None ,
53
174
}
@@ -58,7 +179,7 @@ pub mod tests {
58
179
t : ContactType :: Person ,
59
180
node_id,
60
181
name : "some name" . to_string ( ) ,
61
- postal_address : empty_address ( ) ,
182
+ postal_address : valid_address ( ) ,
62
183
email : None ,
63
184
nostr_relay : None ,
64
185
}
0 commit comments