1
1
#![ cfg( feature = "json" ) ]
2
2
3
- use std:: path:: PathBuf ;
4
-
5
3
use chrono:: { DateTime , TimeZone , Utc } ;
6
4
use float_cmp:: ApproxEqUlps ;
7
5
use serde_derive:: Deserialize ;
@@ -32,7 +30,32 @@ fn test_file() {
32
30
}
33
31
34
32
let c = Config :: builder ( )
35
- . add_source ( File :: new ( "tests/Settings" , FileFormat :: Json ) )
33
+ . add_source ( File :: from_str (
34
+ r#"
35
+ {
36
+ "debug": true,
37
+ "debug_json": true,
38
+ "production": false,
39
+ "arr": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
40
+ "place": {
41
+ "name": "Torre di Pisa",
42
+ "longitude": 43.7224985,
43
+ "latitude": 10.3970522,
44
+ "favorite": false,
45
+ "reviews": 3866,
46
+ "rating": 4.5,
47
+ "creator": {
48
+ "name": "John Smith",
49
+ "username": "jsmith",
50
+ "email": "jsmith@localhost"
51
+ }
52
+ },
53
+ "FOO": "FOO should be overridden",
54
+ "bar": "I am bar"
55
+ }
56
+ "# ,
57
+ FileFormat :: Json ,
58
+ ) )
36
59
. build ( )
37
60
. unwrap ( ) ;
38
61
@@ -73,18 +96,21 @@ fn test_file() {
73
96
#[ test]
74
97
fn test_error_parse ( ) {
75
98
let res = Config :: builder ( )
76
- . add_source ( File :: new ( "tests/Settings-invalid" , FileFormat :: Json ) )
99
+ . add_source ( File :: from_str (
100
+ r#"
101
+ {
102
+ "ok": true,
103
+ "error"
104
+ }
105
+ "# ,
106
+ FileFormat :: Json ,
107
+ ) )
77
108
. build ( ) ;
78
109
79
- let path_with_extension: PathBuf = [ "tests" , "Settings-invalid.json" ] . iter ( ) . collect ( ) ;
80
-
81
110
assert ! ( res. is_err( ) ) ;
82
111
assert_eq ! (
83
112
res. unwrap_err( ) . to_string( ) ,
84
- format!(
85
- "expected `:` at line 4 column 1 in {}" ,
86
- path_with_extension. display( )
87
- )
113
+ format!( "expected `:` at line 5 column 1" , )
88
114
) ;
89
115
}
90
116
@@ -96,7 +122,7 @@ fn test_json_vec() {
96
122
{
97
123
"WASTE": ["example_dir1", "example_dir2"]
98
124
}
99
- "#,
125
+ "# ,
100
126
FileFormat :: Json ,
101
127
) )
102
128
. build ( )
@@ -126,7 +152,32 @@ fn test_override_uppercase_value_for_struct() {
126
152
std:: env:: set_var ( "APP_FOO" , "I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE" ) ;
127
153
128
154
let cfg = Config :: builder ( )
129
- . add_source ( File :: new ( "tests/Settings" , FileFormat :: Json ) )
155
+ . add_source ( File :: from_str (
156
+ r#"
157
+ {
158
+ "debug": true,
159
+ "debug_json": true,
160
+ "production": false,
161
+ "arr": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
162
+ "place": {
163
+ "name": "Torre di Pisa",
164
+ "longitude": 43.7224985,
165
+ "latitude": 10.3970522,
166
+ "favorite": false,
167
+ "reviews": 3866,
168
+ "rating": 4.5,
169
+ "creator": {
170
+ "name": "John Smith",
171
+ "username": "jsmith",
172
+ "email": "jsmith@localhost"
173
+ }
174
+ },
175
+ "FOO": "FOO should be overridden",
176
+ "bar": "I am bar"
177
+ }
178
+ "# ,
179
+ FileFormat :: Json ,
180
+ ) )
130
181
. add_source ( config:: Environment :: with_prefix ( "APP" ) . separator ( "_" ) )
131
182
. build ( )
132
183
. unwrap ( ) ;
@@ -168,7 +219,32 @@ fn test_override_lowercase_value_for_struct() {
168
219
std:: env:: set_var ( "config_foo" , "I have been overridden_with_lower_case" ) ;
169
220
170
221
let cfg = Config :: builder ( )
171
- . add_source ( File :: new ( "tests/Settings" , FileFormat :: Json ) )
222
+ . add_source ( File :: from_str (
223
+ r#"
224
+ {
225
+ "debug": true,
226
+ "debug_json": true,
227
+ "production": false,
228
+ "arr": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
229
+ "place": {
230
+ "name": "Torre di Pisa",
231
+ "longitude": 43.7224985,
232
+ "latitude": 10.3970522,
233
+ "favorite": false,
234
+ "reviews": 3866,
235
+ "rating": 4.5,
236
+ "creator": {
237
+ "name": "John Smith",
238
+ "username": "jsmith",
239
+ "email": "jsmith@localhost"
240
+ }
241
+ },
242
+ "FOO": "FOO should be overridden",
243
+ "bar": "I am bar"
244
+ }
245
+ "# ,
246
+ FileFormat :: Json ,
247
+ ) )
172
248
. add_source ( config:: Environment :: with_prefix ( "config" ) . separator ( "_" ) )
173
249
. build ( )
174
250
. unwrap ( ) ;
@@ -191,7 +267,14 @@ fn test_override_uppercase_value_for_enums() {
191
267
std:: env:: set_var ( "APPS_BAR" , "I HAVE BEEN OVERRIDDEN_WITH_UPPER_CASE" ) ;
192
268
193
269
let cfg = Config :: builder ( )
194
- . add_source ( File :: new ( "tests/Settings-enum-test" , FileFormat :: Json ) )
270
+ . add_source ( File :: from_str (
271
+ r#"
272
+ {
273
+ "bar": "bar is a lowercase param"
274
+ }
275
+ "# ,
276
+ FileFormat :: Json ,
277
+ ) )
195
278
. add_source ( config:: Environment :: with_prefix ( "APPS" ) . separator ( "_" ) )
196
279
. build ( )
197
280
. unwrap ( ) ;
@@ -213,7 +296,14 @@ fn test_override_lowercase_value_for_enums() {
213
296
std:: env:: set_var ( "test_bar" , "I have been overridden_with_lower_case" ) ;
214
297
215
298
let cfg = Config :: builder ( )
216
- . add_source ( File :: new ( "tests/Settings-enum-test" , FileFormat :: Json ) )
299
+ . add_source ( File :: from_str (
300
+ r#"
301
+ {
302
+ "bar": "bar is a lowercase param"
303
+ }
304
+ "# ,
305
+ FileFormat :: Json ,
306
+ ) )
217
307
. add_source ( config:: Environment :: with_prefix ( "test" ) . separator ( "_" ) )
218
308
. build ( )
219
309
. unwrap ( ) ;
@@ -234,7 +324,7 @@ fn json() {
234
324
{
235
325
"json_datetime": "2017-05-10T02:14:53Z"
236
326
}
237
- "#,
327
+ "# ,
238
328
FileFormat :: Json ,
239
329
) )
240
330
. build ( )
0 commit comments