import os import pytest from app.config import Settings def test_settings_loads_all_required_fields(monkeypatch): monkeypatch.setenv("NEXTCLOUD_WEBDAV_URL", "https://nc/remote.php/dav/files/u") monkeypatch.setenv("NEXTCLOUD_USER", "u") monkeypatch.setenv("NEXTCLOUD_APP_PASSWORD", "pw") monkeypatch.setenv("OLLAMA_URL", "http://ollama:11434") monkeypatch.setenv("OLLAMA_EMBED_MODEL", "qwen3-embedding:0.6b") monkeypatch.setenv("QDRANT_URL", "http://qdrant:6333") monkeypatch.setenv("QDRANT_COLLECTION", "rag_test") monkeypatch.setenv("WEBHOOK_SECRET", "secret") s = Settings() assert s.nextcloud_user == "u" assert s.qdrant_collection == "rag_test" assert s.ingest_root == "Documents/THB/Studium" # default assert s.chunk_size_words == 500 assert s.chunk_overlap_words == 50 assert s.log_level == "INFO" def test_settings_overrides_defaults(monkeypatch): for k, v in { "NEXTCLOUD_WEBDAV_URL": "x", "NEXTCLOUD_USER": "x", "NEXTCLOUD_APP_PASSWORD": "x", "OLLAMA_URL": "x", "OLLAMA_EMBED_MODEL": "x", "QDRANT_URL": "x", "QDRANT_COLLECTION": "x", "WEBHOOK_SECRET": "x", "INGEST_ROOT": "Other/Path", "CHUNK_SIZE_WORDS": "300", "CHUNK_OVERLAP_WORDS": "30", }.items(): monkeypatch.setenv(k, v) s = Settings() assert s.ingest_root == "Other/Path" assert s.chunk_size_words == 300 assert s.chunk_overlap_words == 30 def test_settings_missing_required_raises(monkeypatch): for k in ["NEXTCLOUD_WEBDAV_URL", "NEXTCLOUD_USER", "NEXTCLOUD_APP_PASSWORD", "OLLAMA_URL", "OLLAMA_EMBED_MODEL", "QDRANT_URL", "QDRANT_COLLECTION", "WEBHOOK_SECRET"]: monkeypatch.delenv(k, raising=False) with pytest.raises(Exception): Settings()