1import pytest
2from plain.runtime import settings as plain_settings
3from plain.runtime import setup
4
5
6def pytest_configure(config):
7 # Run Plain setup before anything else
8 setup()
9
10
11@pytest.fixture(autouse=True, scope="session")
12def _allowed_hosts_testserver():
13 # Add testserver to ALLOWED_HOSTS so the test client can make requests
14 plain_settings.ALLOWED_HOSTS = [*plain_settings.ALLOWED_HOSTS, "testserver"]
15
16
17@pytest.fixture
18def settings():
19 class SettingsProxy:
20 def __init__(self):
21 self._original = {}
22
23 def __getattr__(self, name):
24 return getattr(plain_settings, name)
25
26 def __setattr__(self, name, value):
27 if name.startswith("_"):
28 super().__setattr__(name, value)
29 else:
30 if name not in self._original:
31 self._original[name] = getattr(plain_settings, name, None)
32 setattr(plain_settings, name, value)
33
34 def _restore(self):
35 for key, value in self._original.items():
36 setattr(plain_settings, key, value)
37
38 proxy = SettingsProxy()
39 yield proxy
40 proxy._restore()