From c8b5d24eb301119eeeb281257ed3ba802043dd22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20G=C3=B6bel?= <dgoebel@techfak.uni-bielefeld.de>
Date: Tue, 28 Mar 2023 16:26:31 +0200
Subject: [PATCH] Add tests for workflow statistics endpoint

#24
---
 app/tests/api/test_workflow.py  | 31 ++++++++++++++++++++++++++++++-
 app/tests/crud/test_workflow.py | 22 +++++++++++++++++++++-
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/app/tests/api/test_workflow.py b/app/tests/api/test_workflow.py
index 4142794..549b287 100644
--- a/app/tests/api/test_workflow.py
+++ b/app/tests/api/test_workflow.py
@@ -1,8 +1,9 @@
+from datetime import date
 from io import BytesIO
 from uuid import UUID, uuid4
 
 import pytest
-from clowmdb.models import Workflow, WorkflowVersion
+from clowmdb.models import Workflow, WorkflowExecution, WorkflowVersion
 from fastapi import status
 from httpx import AsyncClient
 from sqlalchemy import delete, select
@@ -380,6 +381,34 @@ class TestWorkflowRoutesGet(_TestWorkflowRoutes):
         )
         assert response.status_code == status.HTTP_404_NOT_FOUND
 
+    @pytest.mark.asyncio
+    async def test_get_workflow_statistics(
+        self,
+        client: AsyncClient,
+        random_user: UserWithAuthHeader,
+        random_workflow: WorkflowOut,
+        random_workflow_execution: WorkflowExecution,
+    ) -> None:
+        """
+        Test for getting a non-existing workflow.
+
+        Parameters
+        ----------
+        client : httpx.AsyncClient
+            HTTP Client to perform the request on. pytest fixture.
+        random_user : app.tests.utils.user.UserWithAuthHeader
+            Random user for testing. pytest fixture.
+        """
+        response = await client.get(
+            "/".join([self.base_path, str(random_workflow.workflow_id), "statistics"]),
+            headers=random_user.auth_headers,
+        )
+        assert response.status_code == status.HTTP_200_OK
+        statistics = response.json()
+        assert len(statistics) == 1
+        assert statistics[0]["day"] == str(date.today())
+        assert statistics[0]["count"] == 1
+
 
 class TestWorkflowRoutesDelete(_TestWorkflowRoutes):
     @pytest.mark.asyncio
diff --git a/app/tests/crud/test_workflow.py b/app/tests/crud/test_workflow.py
index 3aea52f..aa7680f 100644
--- a/app/tests/crud/test_workflow.py
+++ b/app/tests/crud/test_workflow.py
@@ -1,7 +1,8 @@
 import random
+from datetime import date
 
 import pytest
-from clowmdb.models import Workflow, WorkflowVersion
+from clowmdb.models import Workflow, WorkflowExecution, WorkflowVersion
 from sqlalchemy import delete, select
 from sqlalchemy.ext.asyncio import AsyncSession
 
@@ -134,6 +135,25 @@ class TestWorkflowCRUDGet:
         assert workflow is not None
         assert workflow.workflow_id == random_workflow.workflow_id
 
+    @pytest.mark.asyncio
+    async def test_get_workflow_statistics(
+        self, db: AsyncSession, random_workflow: WorkflowOut, random_workflow_execution: WorkflowExecution
+    ) -> None:
+        """
+        Test for getting a workflow by its name from CRUD Repository.
+
+        Parameters
+        ----------
+        db : sqlalchemy.ext.asyncio.AsyncSession.
+            Async database session to perform query on. pytest fixture.
+        random_workflow : app.schemas.workflow.WorkflowOut
+            Random bucket for testing. pytest fixture.
+        """
+        statistics = await CRUDWorkflow.statistics(db, random_workflow.workflow_id)
+        assert len(statistics) == 1
+        assert statistics[0].day == date.today()
+        assert statistics[0].count == 1
+
 
 class TestWorkflowCRUDCreate:
     @pytest.mark.asyncio
-- 
GitLab