diff --git a/test/conftest.py b/test/conftest.py
new file mode 100644
index 0000000000000000000000000000000000000000..e4a5dd3903c47b58ec91284b99eda6403f3aaf4d
--- /dev/null
+++ b/test/conftest.py
@@ -0,0 +1,46 @@
+import json
+import os
+import tempfile
+
+import pytest
+from fastapi.testclient import TestClient
+
+import larp
+
+
+@pytest.fixture
+def good_config_data():
+ return {
+ 'collection-uri': 'organisation.collection'
+ }
+
+
+@pytest.fixture
+def bad_config_data():
+ return {
+ 'bogus-key': 'nothing useful'
+ }
+
+
+@pytest.fixture
+def config_file(good_config_data):
+ with tempfile.NamedTemporaryFile(mode='w') as f:
+ f.write(json.dumps(good_config_data))
+ f.flush()
+ os.environ['SETTINGS_FILENAME'] = f.name
+ yield f.name
+
+
+@pytest.fixture
+def invalid_config_file(bad_config_data):
+ with tempfile.NamedTemporaryFile(mode='w') as f:
+ f.write(json.dumps(bad_config_data))
+ f.flush()
+ os.environ['SETTINGS_FILENAME'] = f.name
+ yield f.name
+
+
+@pytest.fixture
+def client(config_file):
+ app = larp.create_app()
+ yield TestClient(app) # wait here until calling context ends
diff --git a/test/test_config.py b/test/test_config.py
new file mode 100644
index 0000000000000000000000000000000000000000..145fdd9d1d79be83ec1dab4dcfea2df256026d03
--- /dev/null
+++ b/test/test_config.py
@@ -0,0 +1,26 @@
+import io
+import json
+import pytest
+
+from pydantic.error_wrappers import ValidationError
+
+from larp import config
+
+
+def test_config_with_file(config_file):
+ params = config.load()
+ assert params
+
+
+def test_config_correct(good_config_data):
+ with io.StringIO(json.dumps(good_config_data)) as f:
+ f.seek(0) # rewind file position to the beginning
+ params = config.load_from_file(f)
+ assert params
+
+
+def test_config_incorrect(bad_config_data):
+ with io.StringIO(json.dumps(bad_config_data)) as f:
+ f.seek(0)
+ with pytest.raises(Exception, match="'collection-uri' is a required property"):
+ config.load_from_file(f)