69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
import json
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
|
||
from jira_hub import db, settings
|
||
|
||
FIXTURE = Path(__file__).parent / "fixtures" / "config.example.json"
|
||
|
||
|
||
def fresh():
|
||
conn = db.connect(":memory:")
|
||
settings.ensure_defaults(conn)
|
||
return conn
|
||
|
||
|
||
def test_defaults_and_tokens():
|
||
conn = fresh()
|
||
assert settings.get(conn, "base_jql") == "project = AURORA AND labels = AWPCA"
|
||
assert settings.get(conn, "pacing")["ensure_fields"] == 120
|
||
tok = settings.tokens(conn)
|
||
assert len(tok["agent"]) > 20 and tok["agent"] != tok["client"]
|
||
assert "tokens" not in settings.get_all(conn)
|
||
|
||
|
||
def test_set_bumps_version():
|
||
conn = fresh()
|
||
v0 = settings.get(conn, "settings_version")
|
||
v1 = settings.set_(conn, "pacing", {"ensure_fields": 5})
|
||
assert v1 == v0 + 1
|
||
assert settings.get(conn, "pacing") == {"ensure_fields": 5}
|
||
|
||
|
||
@pytest.mark.parametrize("key", ["tokens", "settings_version", "schema_version"])
|
||
def test_protected_keys(key):
|
||
conn = fresh()
|
||
with pytest.raises(ValueError):
|
||
settings.set_(conn, key, "x")
|
||
|
||
|
||
def test_init_from_config():
|
||
conn = fresh()
|
||
cfg = json.loads(FIXTURE.read_text(encoding="utf-8"))
|
||
keys = settings.init_from_config(conn, cfg)
|
||
assert "transitions_map" in keys
|
||
assert settings.get(conn, "field_ids")["planned_end"] == "customfield_10802"
|
||
assert settings.get(conn, "issue_types")["epic"] == {"name": "Фича", "id": "12300"}
|
||
assert settings.get(conn, "board_id") == 4216
|
||
assert settings.get(conn, "pacing") == settings.DEFAULT_PACING
|
||
agent_view = settings.for_agent(conn)
|
||
assert "tokens" not in agent_view and "auth" not in agent_view and "base_url" not in agent_view
|
||
assert agent_view["link_types"]["связанные"] == "ASUPR_Связанные"
|
||
with pytest.raises(RuntimeError):
|
||
settings.init_from_config(conn, cfg)
|
||
settings.init_from_config(conn, cfg, force=True)
|
||
|
||
|
||
def test_relay_dir_default_and_validation(tmp_path):
|
||
conn = db.connect(tmp_path / "hub.sqlite")
|
||
settings.ensure_defaults(conn)
|
||
assert settings.get(conn, "relay_dir") is None
|
||
settings.validate("relay_dir", None)
|
||
settings.validate("relay_dir", "/Volumes/externalSSD/utm/rshb/jira-bridge")
|
||
for bad in ("rshb/jira-bridge", "", 5, ["/x"]):
|
||
with pytest.raises(ValueError):
|
||
settings.validate("relay_dir", bad)
|
||
assert "relay_dir" not in settings.AGENT_KEYS
|
||
conn.close()
|