From 28f2e91c39e76b2bae99160c156417247762933b Mon Sep 17 00:00:00 2001
From: Neda Moeini <neda.moeini@geant.org>
Date: Tue, 16 Jan 2024 16:47:14 +0100
Subject: [PATCH] Added some unit tests for callback result endpoint.

---
 gso/api/v1/processes.py          |  2 +-
 gso/middlewares.py               |  4 +--
 test/processes/__init__.py       |  0
 test/processes/conftest.py       |  1 +
 test/processes/test_processes.py | 49 ++++++++++++++++++++++++++++++++
 5 files changed, 53 insertions(+), 3 deletions(-)
 create mode 100644 test/processes/__init__.py
 create mode 100644 test/processes/conftest.py
 create mode 100644 test/processes/test_processes.py

diff --git a/gso/api/v1/processes.py b/gso/api/v1/processes.py
index 6ad15e91..a5f12039 100644
--- a/gso/api/v1/processes.py
+++ b/gso/api/v1/processes.py
@@ -3,7 +3,7 @@
 from typing import Any
 from uuid import UUID
 
-from fastapi import APIRouter, HTTPException, status, Depends
+from fastapi import APIRouter, Depends, HTTPException, status
 from orchestrator.db import ProcessStepTable
 from orchestrator.schemas.base import OrchestratorBaseModel
 
diff --git a/gso/middlewares.py b/gso/middlewares.py
index 222f5020..e0d276e3 100644
--- a/gso/middlewares.py
+++ b/gso/middlewares.py
@@ -61,6 +61,7 @@ class ModifyProcessEndpointResponse(BaseHTTPMiddleware):
         Args:
         ----
             request (Request): The incoming HTTP request.
+
         Returns:
         -------
             str: The token from the request headers in specific format.
@@ -71,8 +72,7 @@ class ModifyProcessEndpointResponse(BaseHTTPMiddleware):
             # Remove the "Bearer " prefix from the token
             token = authorization_header.replace(bearer_prefix, "")
             return f"?token={token}"
-        else:
-            return ""
+        return ""
 
     async def modify_response_body(self, response_body: dict[str, Any], request: Request) -> None:
         """Modify the response body as needed.
diff --git a/test/processes/__init__.py b/test/processes/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/test/processes/conftest.py b/test/processes/conftest.py
new file mode 100644
index 00000000..428b0a14
--- /dev/null
+++ b/test/processes/conftest.py
@@ -0,0 +1 @@
+from test.fixtures import nokia_router_subscription_factory, site_subscription_factory  # noqa: F401
diff --git a/test/processes/test_processes.py b/test/processes/test_processes.py
new file mode 100644
index 00000000..67121840
--- /dev/null
+++ b/test/processes/test_processes.py
@@ -0,0 +1,49 @@
+from uuid import uuid4
+
+import pytest
+from orchestrator.db import (
+    ProcessStepTable,
+    ProcessSubscriptionTable,
+    ProcessTable,
+    db,
+)
+from orchestrator.workflow import ProcessStatus
+
+
+@pytest.fixture()
+def create_process(faker, nokia_router_subscription_factory):
+    process_id = uuid4()
+    process = ProcessTable(process_id=process_id, workflow_name=faker.sentence(), last_status=ProcessStatus.SUSPENDED)
+    subscription = nokia_router_subscription_factory()
+    process_subscription = ProcessSubscriptionTable(process_id=process_id, subscription_id=subscription)
+
+    db.session.add(process)
+    db.session.add(process_subscription)
+    db.session.commit()
+
+    return process_id
+
+
+def test_callback_results_endpoint(test_client, create_process, faker):
+    expected_result = {"id": 1, "output": faker.sentence()}
+
+    step = ProcessStepTable(
+        process_id=create_process,
+        name="Modify",
+        status="suspend",
+        state={"subscription_id": uuid4(), "callback_result": expected_result},
+    )
+    db.session.add(step)
+    db.session.commit()
+
+    response = test_client.get(f"/api/v1/processes/steps/{step.step_id}/callback-results")
+
+    assert response.status_code == 200
+    assert response.json() == {"callback_results": expected_result}
+
+
+def test_callback_results_endpoint_with_wrong_step_id(test_client):
+    response = test_client.get(f"/api/v1/processes/steps/{uuid4()}/callback-results")
+
+    assert response.status_code == 404
+    assert response.json() == {"detail": "Callback result not found."}
-- 
GitLab