mirror of
https://github.com/umbra2728/ctfd-mcp.git
synced 2026-02-07 22:08:12 +03:00
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
import os
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from config import load_config
|
|
|
|
|
|
def _load_with_env(env: dict[str, str]):
|
|
"""Load config with isolated env and no .env side effects."""
|
|
with patch("config.load_dotenv", return_value=None):
|
|
with patch.dict(os.environ, env, clear=True):
|
|
return load_config()
|
|
|
|
|
|
class ConfigPrecedenceTests(unittest.TestCase):
|
|
def test_username_password_take_priority(self):
|
|
env = {
|
|
"CTFD_URL": "https://ctfd.example.com",
|
|
"CTFD_USERNAME": "user1",
|
|
"CTFD_PASSWORD": "pw1",
|
|
"CTFD_TOKEN": "token-should-be-ignored",
|
|
"CTFD_SESSION": "session-should-be-ignored",
|
|
"CTFD_CSRF_TOKEN": "csrf-should-be-ignored",
|
|
}
|
|
cfg = _load_with_env(env)
|
|
self.assertEqual(cfg.username, "user1")
|
|
self.assertEqual(cfg.password, "pw1")
|
|
self.assertIsNone(cfg.token)
|
|
self.assertIsNone(cfg.session_cookie)
|
|
self.assertIsNone(cfg.csrf_token)
|
|
|
|
def test_token_beats_session_cookie(self):
|
|
env = {
|
|
"CTFD_URL": "https://ctfd.example.com",
|
|
"CTFD_TOKEN": "use-this-token",
|
|
"CTFD_SESSION": "drop-this-session",
|
|
"CTFD_CSRF_TOKEN": "csrf-should-be-ignored",
|
|
}
|
|
cfg = _load_with_env(env)
|
|
self.assertEqual(cfg.token, "use-this-token")
|
|
self.assertIsNone(cfg.session_cookie)
|
|
self.assertIsNone(cfg.csrf_token)
|
|
|
|
def test_session_cookie_when_no_other_creds(self):
|
|
env = {
|
|
"CTFD_URL": "https://ctfd.example.com",
|
|
"CTFD_SESSION": "session-only",
|
|
}
|
|
cfg = _load_with_env(env)
|
|
self.assertEqual(cfg.session_cookie, "session-only")
|
|
self.assertIsNone(cfg.token)
|
|
self.assertIsNone(cfg.username)
|
|
self.assertIsNone(cfg.password)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|