test_config_access.py
2.52 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from __future__ import annotations
from pathlib import Path
from types import SimpleNamespace
import services.shared.config.access as access
from services.shared.config.access import DatabaseRuntimeSettings
def test_read_settings_values_returns_stringified_payload(monkeypatch):
monkeypatch.setattr(
access,
"get_settings",
lambda reload=False: SimpleNamespace(HOST="127.0.0.1", PORT=5001, EMPTY=None),
)
payload = access.read_settings_values(["HOST", "PORT", "EMPTY", "MISSING"], reload=True)
assert payload == {
"HOST": "127.0.0.1",
"PORT": "5001",
"EMPTY": "",
"MISSING": "",
}
def test_resolve_settings_write_env_file_prefers_cwd_env(monkeypatch):
project_root = Path("D:/repo")
cwd = project_root / "apps" / "web_api"
cwd_env = cwd / ".env"
original_exists = Path.exists
def _fake_exists(self: Path) -> bool:
if self == cwd_env:
return True
return original_exists(self)
monkeypatch.setattr(access.Path, "exists", _fake_exists)
assert access.resolve_settings_write_env_file(cwd=cwd, project_root=project_root) == cwd / ".env"
def test_get_database_runtime_settings_normalizes_defaults(monkeypatch):
monkeypatch.setattr(
access,
"get_settings",
lambda reload=False: SimpleNamespace(
DB_DIALECT="postgresql+psycopg",
DB_HOST="db.internal",
DB_PORT=6432,
DB_USER="worker",
DB_PASSWORD="secret",
DB_NAME="bettafish_prod",
DB_CHARSET="utf8",
),
)
settings_obj = access.get_database_runtime_settings(reload=True)
assert settings_obj == DatabaseRuntimeSettings(
dialect="postgresql+psycopg",
host="db.internal",
port="6432",
user="worker",
password="secret",
name="bettafish_prod",
charset="utf8",
)
assert settings_obj.uses_postgres is True
assert settings_obj.crawler_save_option == "postgres"
assert settings_obj.as_crawler_runtime_env()["POSTGRES_DB_PORT"] == "6432"
def test_database_runtime_settings_falls_back_to_db_defaults():
settings_obj = DatabaseRuntimeSettings.from_settings(SimpleNamespace())
assert settings_obj.host == "db"
assert settings_obj.port == "5432"
assert settings_obj.user == "bettafish"
assert settings_obj.password == "bettafish"
assert settings_obj.name == "bettafish"
assert settings_obj.charset == "utf8mb4"
assert settings_obj.crawler_save_option == "postgres"