feat: add section_mode, api_section, editable flags and oauth section to settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import pytest
|
||||
from hbd.server import settings as settings_mod
|
||||
|
||||
CFG = {
|
||||
"hbd_port": 50004,
|
||||
"interval": 20,
|
||||
"grace": 2,
|
||||
"users": {
|
||||
"alice": {"full_name": "Alice Smith", "admin": True, "password": "pbkdf2:sha256:abc",
|
||||
"notification_channels": ["pushover_ops"]},
|
||||
},
|
||||
"oauth": {
|
||||
"gitea": {"type": "gitea", "url": "https://git.example.com",
|
||||
"client_id": "cid", "client_secret": "csec", "label": "Sign in with Gitea"},
|
||||
},
|
||||
"notification_channels": {
|
||||
"pushover_ops": {"type": "pushover", "token": "tok", "user": "usr"},
|
||||
},
|
||||
"hosts": {},
|
||||
}
|
||||
|
||||
|
||||
def test_sections_have_section_mode():
|
||||
sections = settings_mod.get_settings_sections(CFG)
|
||||
for s in sections:
|
||||
assert "section_mode" in s, f"Section {s['id']} missing section_mode"
|
||||
assert s["section_mode"] in ("form", "yaml")
|
||||
|
||||
|
||||
def test_sections_have_api_section():
|
||||
sections = settings_mod.get_settings_sections(CFG)
|
||||
for s in sections:
|
||||
assert "api_section" in s, f"Section {s['id']} missing api_section"
|
||||
|
||||
|
||||
def test_network_section_has_editable_fields():
|
||||
sections = settings_mod.get_settings_sections(CFG)
|
||||
network = next(s for s in sections if s["id"] == "network")
|
||||
assert network["section_mode"] == "form"
|
||||
assert network["api_section"] == "server"
|
||||
editable = [f for f in network["fields"] if f["editable"]]
|
||||
assert len(editable) >= 2 # hbd_port, ws_port at minimum
|
||||
|
||||
|
||||
def test_yaml_sections_have_correct_mode():
|
||||
sections = settings_mod.get_settings_sections(CFG)
|
||||
yaml_sections = {s["id"]: s for s in sections if s["section_mode"] == "yaml"}
|
||||
assert "channels" in yaml_sections
|
||||
assert "hosts" in yaml_sections
|
||||
assert "thresholds" in yaml_sections
|
||||
assert "dns" in yaml_sections
|
||||
assert yaml_sections["channels"]["api_section"] == "notification_channels"
|
||||
assert yaml_sections["hosts"]["api_section"] == "hosts"
|
||||
assert yaml_sections["thresholds"]["api_section"] == "thresholds"
|
||||
assert yaml_sections["dns"]["api_section"] == "dns"
|
||||
|
||||
|
||||
def test_oauth_section_exists():
|
||||
sections = settings_mod.get_settings_sections(CFG)
|
||||
oauth = next((s for s in sections if s["id"] == "oauth"), None)
|
||||
assert oauth is not None
|
||||
assert oauth["section_mode"] == "form"
|
||||
assert oauth["api_section"] == "oauth"
|
||||
assert len(oauth["providers"]) == 1
|
||||
assert oauth["providers"][0]["name"] == "gitea"
|
||||
assert oauth["providers"][0]["client_secret"] == "•••"
|
||||
|
||||
|
||||
def test_all_channel_names_returned():
|
||||
result = settings_mod.get_settings_data(CFG)
|
||||
assert "all_channel_names" in result
|
||||
assert "pushover_ops" in result["all_channel_names"]
|
||||
|
||||
|
||||
def test_users_section_has_user_list():
|
||||
sections = settings_mod.get_settings_sections(CFG)
|
||||
users_sec = next(s for s in sections if s["id"] == "users")
|
||||
assert users_sec["section_mode"] == "form"
|
||||
assert users_sec["api_section"] == "users"
|
||||
assert len(users_sec["users"]) == 1
|
||||
assert users_sec["users"][0]["username"] == "alice"
|
||||
# Password hash never exposed
|
||||
assert "password" not in users_sec["users"][0]
|
||||
Reference in New Issue
Block a user