|
5 | 5 | import urllib.parse |
6 | 6 | import pathlib |
7 | 7 | from decimal import Decimal |
| 8 | +from enum import Enum |
8 | 9 |
|
9 | 10 | import dj_database_url |
10 | 11 | import dj_email_url |
@@ -35,6 +36,12 @@ class FauxTestException(Exception): |
35 | 36 | pass |
36 | 37 |
|
37 | 38 |
|
| 39 | +class DayEnum(Enum): |
| 40 | + SUNDAY = 1 |
| 41 | + MONDAY = 2 |
| 42 | + TUESDAY = 3 |
| 43 | + |
| 44 | + |
38 | 45 | class TestCasting: |
39 | 46 | def test_call(self, set_env, env): |
40 | 47 | set_env({"STR": "foo", "INT": "42"}) |
@@ -204,6 +211,24 @@ def test_invalid_url(self, url, set_env, env): |
204 | 211 | env.url("URL") |
205 | 212 | assert 'Environment variable "URL" invalid' in excinfo.value.args[0] |
206 | 213 |
|
| 214 | + def test_enum_cast(self, set_env, env): |
| 215 | + set_env({"DAY": "SUNDAY"}) |
| 216 | + assert env.enum("DAY", type=DayEnum) == DayEnum.SUNDAY |
| 217 | + |
| 218 | + def test_enum_cast_ignore_case(self, set_env, env): |
| 219 | + set_env({"DAY": "suNDay"}) |
| 220 | + assert env.enum("DAY", type=DayEnum, ignore_case=True) == DayEnum.SUNDAY |
| 221 | + |
| 222 | + def test_invalid_enum(self, set_env, env): |
| 223 | + set_env({"DAY": "suNDay"}) |
| 224 | + with pytest.raises(environs.EnvError): |
| 225 | + assert env.enum("DAY", type=DayEnum) |
| 226 | + |
| 227 | + def test_invalid_enum_ignore_case(self, set_env, env): |
| 228 | + set_env({"DAY": "SonDAY"}) |
| 229 | + with pytest.raises(environs.EnvError): |
| 230 | + assert env.enum("DAY", type=DayEnum, ignore_case=True) |
| 231 | + |
207 | 232 |
|
208 | 233 | class TestEnvFileReading: |
209 | 234 | def test_read_env(self, env): |
@@ -320,17 +345,17 @@ def https_url(value): |
320 | 345 | def test_parser_function_can_take_extra_arguments(self, set_env, env): |
321 | 346 | set_env({"ENV": "dev"}) |
322 | 347 |
|
323 | | - @env.parser_for("enum") |
324 | | - def enum_parser(value, choices): |
| 348 | + @env.parser_for("choice") |
| 349 | + def choice_parser(value, choices): |
325 | 350 | if value not in choices: |
326 | 351 | raise environs.EnvError("Invalid!") |
327 | 352 | return value |
328 | 353 |
|
329 | | - assert env.enum("ENV", choices=["dev", "prod"]) == "dev" |
| 354 | + assert env.choice("ENV", choices=["dev", "prod"]) == "dev" |
330 | 355 |
|
331 | 356 | set_env({"ENV": "invalid"}) |
332 | 357 | with pytest.raises(environs.EnvError): |
333 | | - env.enum("ENV", choices=["dev", "prod"]) |
| 358 | + env.choice("ENV", choices=["dev", "prod"]) |
334 | 359 |
|
335 | 360 | def test_add_parser_from_field(self, set_env, env): |
336 | 361 | class HTTPSURL(fields.Field): |
|
0 commit comments