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