From 9cd98c18c7dc75dd03581b25ccc29a5ae429a455 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Thu, 22 May 2025 10:20:49 +0200
Subject: [PATCH] use pydantic for version, added a test

---
 mapping_provider/api/common.py | 22 +++++++++++++++-------
 requirements.txt               |  6 ++++++
 test/conftest.py               |  9 +++++++++
 test/test_version.py           |  8 ++++++++
 4 files changed, 38 insertions(+), 7 deletions(-)
 create mode 100644 test/conftest.py
 create mode 100644 test/test_version.py

diff --git a/mapping_provider/api/common.py b/mapping_provider/api/common.py
index 9c528b0..3712b8e 100644
--- a/mapping_provider/api/common.py
+++ b/mapping_provider/api/common.py
@@ -1,14 +1,22 @@
-from importlib.metadata import PackageNotFoundError, version
+from importlib.metadata import version
 
 from fastapi import APIRouter
+from pydantic import BaseModel
 
 router = APIRouter()
 
 
+class Version(BaseModel):
+    module: str
+    api: str
+
+
 @router.get("/version")
-def get_version() -> dict[str, str]:
-    """Get the version of the package."""
-    try:
-        return {"version": version("mapping_provider")}
-    except PackageNotFoundError:
-        return {"version": "unknown"}
+def get_version() -> Version:
+    """
+    handler for /version
+    """
+    return Version(
+        module = version('mapping_provider'),
+        api = '0.1'
+    )
diff --git a/requirements.txt b/requirements.txt
index 8cedf04..bb2015e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,11 @@
 fastapi
 uvicorn[standard]
+requests
+jsonschema
+
+httpx  # required for fastapi TestClient
+pytest
+responses
 
 sphinx
 sphinx-rtd-theme
diff --git a/test/conftest.py b/test/conftest.py
new file mode 100644
index 0000000..f9fb990
--- /dev/null
+++ b/test/conftest.py
@@ -0,0 +1,9 @@
+from fastapi.testclient import TestClient
+import pytest
+
+from mapping_provider import create_app
+
+
+@pytest.fixture
+def client():
+    return TestClient(create_app())
diff --git a/test/test_version.py b/test/test_version.py
new file mode 100644
index 0000000..863570b
--- /dev/null
+++ b/test/test_version.py
@@ -0,0 +1,8 @@
+from mapping_provider.api.common import Version
+
+
+def test_version(client):
+    rv = client.get("/version")
+    assert rv.status_code == 200
+    assert rv.json()
+    Version.model_validate(rv.json())
-- 
GitLab