Files

108 lines
3.6 KiB
Python

"""Test Matrix configuration loading from env vars and files."""
from __future__ import annotations
import os
from pathlib import Path
import pytest
from matrix_hermes.config import MatrixConfig, _parse_csv
class TestParseCSV:
"""Tests for the CSV parsing helper."""
def test_empty_string(self) -> None:
assert _parse_csv("") == []
def test_single_value(self) -> None:
assert _parse_csv("alice") == ["alice"]
def test_multiple_values(self) -> None:
assert _parse_csv("alice, bob , charlie") == ["alice", "bob", "charlie"]
def test_whitespace_only(self) -> None:
assert _parse_csv(" , , ") == []
class TestMatrixConfigDefaults:
"""Tests for default config values."""
def test_empty_config(self) -> None:
cfg = MatrixConfig()
assert cfg.homeserver == ""
assert cfg.access_token == ""
assert cfg.password == ""
def test_is_configured_false(self) -> None:
cfg = MatrixConfig()
assert cfg.is_configured() is False
def test_is_configured_with_homeserver_and_token(self) -> None:
cfg = MatrixConfig(homeserver="https://matrix.org", access_token="fake-token")
assert cfg.is_configured() is True
def test_is_configured_with_homeserver_and_password(self) -> None:
cfg = MatrixConfig(
homeserver="https://matrix.org",
user_id="@test:matrix.org",
password="secret",
)
assert cfg.is_configured() is True
def test_validate_empty_config(self) -> None:
cfg = MatrixConfig()
errors = cfg.validate()
assert len(errors) > 0
assert any("MATRIX_HOMESERVER" in e for e in errors)
def test_validate_missing_auth(self) -> None:
cfg = MatrixConfig(homeserver="https://matrix.org")
errors = cfg.validate()
assert any("ACCESS_TOKEN" in e or "PASSWORD" in e for e in errors)
def test_resolved_session_dir_default(self) -> None:
cfg = MatrixConfig()
assert cfg.resolved_session_dir == str(
Path.home() / ".hermes" / "matrix_sessions"
)
def test_resolved_session_dir_custom(self) -> None:
cfg = MatrixConfig(session_dir="/tmp/matrix_test")
assert cfg.resolved_session_dir == "/tmp/matrix_test"
class TestFromEnv:
"""Tests for env var loading."""
def test_loads_from_env(self, monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("MATRIX_HOMESERVER", "https://example.com")
monkeypatch.setenv("MATRIX_ACCESS_TOKEN", "syt_abc123")
monkeypatch.setenv("MATRIX_USER_ID", "@bot:example.com")
monkeypatch.setenv("MATRIX_REQUIRE_MENTION", "false")
cfg = MatrixConfig.from_env()
assert cfg.homeserver == "https://example.com"
assert cfg.access_token == "syt_abc123"
assert cfg.user_id == "@bot:example.com"
assert cfg.require_mention is False
def test_encryption_flag(self, monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("MATRIX_ENCRYPTION", "true")
cfg = MatrixConfig.from_env()
assert cfg.encryption is True
def test_allowed_users(self, monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("MATRIX_ALLOWED_USERS", "@a:example.com, @b:example.com")
cfg = MatrixConfig.from_env()
assert cfg.allowed_users == ["@a:example.com", "@b:example.com"]
def test_auto_thread_default(self) -> None:
cfg = MatrixConfig.from_env()
assert cfg.auto_thread is True
def test_require_mention_default(self) -> None:
cfg = MatrixConfig.from_env()
assert cfg.require_mention is True