forked from galaxyproject/gravity
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_settings.py
More file actions
53 lines (39 loc) · 1.67 KB
/
test_settings.py
File metadata and controls
53 lines (39 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from io import StringIO
import yaml
from gravity.settings import (
GunicornSettings,
Settings,
settings_to_sample,
TusdSettings,
)
def test_json_schema():
schema = Settings.model_json_schema()
assert "Configuration for Gravity process manager" in schema["description"]
def test_extra_fields_allowed():
s = Settings(extra=1) # type: ignore[call-arg]
assert not hasattr(s, "extra")
def test_defaults_loaded():
settings = Settings()
assert isinstance(settings.gunicorn, GunicornSettings)
assert settings.gunicorn.bind == "localhost:8080"
assert isinstance(settings.tusd, TusdSettings)
assert settings.tusd.tusd_path == "tusd"
assert settings.tusd.upload_dir == ""
def test_defaults_override_constructor():
settings = Settings(gunicorn=GunicornSettings(bind="localhost:8081"))
assert isinstance(settings.gunicorn, GunicornSettings)
assert settings.gunicorn.bind == "localhost:8081"
# Try Pydantic's ability to accept dicts for nested models
settings = Settings(gunicorn={"bind": "localhost:8081"}) # type: ignore[arg-type]
assert isinstance(settings.gunicorn, GunicornSettings)
assert settings.gunicorn.bind == "localhost:8081"
def test_defaults_override_env_var(monkeypatch):
monkeypatch.setenv("GRAVITY_GUNICORN.BIND", "localhost:8081")
settings = Settings()
assert isinstance(settings.gunicorn, GunicornSettings)
assert settings.gunicorn.bind == "localhost:8081"
def test_schema_to_sample():
sample = settings_to_sample()
settings = Settings(**yaml.safe_load(StringIO(sample))["gravity"])
default_settings = Settings()
assert settings.model_dump() == default_settings.model_dump()