tests: add new tests
This commit is contained in:
parent
6364c97f21
commit
e0829d66f8
|
|
@ -13,12 +13,4 @@ class JobNotFoundError(HTTPException):
|
|||
)
|
||||
|
||||
|
||||
class JobAlreadyCanceledError(HTTPException):
|
||||
"""Задача уже отменена."""
|
||||
|
||||
def __init__(self, job_id: str):
|
||||
super().__init__(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=f"Job {job_id} is already canceled or finished"
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ from http import HTTPStatus
|
|||
from typing import Annotated
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from dataloader.api.v1.exceptions import JobNotFoundError
|
||||
from dataloader.api.v1.schemas import (
|
||||
JobStatusResponse,
|
||||
TriggerJobRequest,
|
||||
|
|
@ -49,7 +50,7 @@ async def get_status(
|
|||
"""
|
||||
st = await svc.status(job_id)
|
||||
if not st:
|
||||
raise HTTPException(status_code=HTTPStatus.NOT_FOUND, detail="job not found")
|
||||
raise JobNotFoundError(job_id=str(job_id))
|
||||
return st
|
||||
|
||||
|
||||
|
|
@ -63,5 +64,5 @@ async def cancel_job(
|
|||
"""
|
||||
st = await svc.cancel(job_id)
|
||||
if not st:
|
||||
raise HTTPException(status_code=HTTPStatus.NOT_FOUND, detail="job not found")
|
||||
raise JobNotFoundError(job_id=str(job_id))
|
||||
return st
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
# tests/unit/test_api_router_not_found.py
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
from uuid import uuid4, UUID
|
||||
|
||||
from dataloader.api.v1.router import get_status, cancel_job
|
||||
from dataloader.api.v1.exceptions import JobNotFoundError
|
||||
from dataloader.api.v1.schemas import JobStatusResponse
|
||||
|
||||
|
||||
class _FakeSvc:
|
||||
async def status(self, job_id: UUID) -> JobStatusResponse | None:
|
||||
return None
|
||||
|
||||
async def cancel(self, job_id: UUID) -> JobStatusResponse | None:
|
||||
return None
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.asyncio
|
||||
async def test_router_get_status_raises_job_not_found():
|
||||
svc = _FakeSvc()
|
||||
with pytest.raises(JobNotFoundError):
|
||||
await get_status(uuid4(), svc=svc)
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.asyncio
|
||||
async def test_router_cancel_raises_job_not_found():
|
||||
svc = _FakeSvc()
|
||||
with pytest.raises(JobNotFoundError):
|
||||
await cancel_job(uuid4(), svc=svc)
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
# tests/unit/test_api_router_success.py
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
from uuid import uuid4, UUID
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from dataloader.api.v1.router import get_status, cancel_job
|
||||
from dataloader.api.v1.schemas import JobStatusResponse
|
||||
|
||||
|
||||
class _SvcOK:
|
||||
async def status(self, job_id: UUID) -> JobStatusResponse | None:
|
||||
return JobStatusResponse(
|
||||
job_id=job_id,
|
||||
status="queued",
|
||||
attempt=0,
|
||||
started_at=None,
|
||||
finished_at=None,
|
||||
heartbeat_at=None,
|
||||
error=None,
|
||||
progress={},
|
||||
)
|
||||
|
||||
async def cancel(self, job_id: UUID) -> JobStatusResponse | None:
|
||||
return JobStatusResponse(
|
||||
job_id=job_id,
|
||||
status="canceled",
|
||||
attempt=1,
|
||||
started_at=datetime.now(timezone.utc),
|
||||
finished_at=datetime.now(timezone.utc),
|
||||
heartbeat_at=None,
|
||||
error="by test",
|
||||
progress={},
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.asyncio
|
||||
async def test_router_get_status_returns_response():
|
||||
svc = _SvcOK()
|
||||
jid = uuid4()
|
||||
res = await get_status(jid, svc=svc)
|
||||
assert isinstance(res, JobStatusResponse)
|
||||
assert res.job_id == jid
|
||||
assert res.status == "queued"
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.asyncio
|
||||
async def test_router_cancel_returns_response():
|
||||
svc = _SvcOK()
|
||||
jid = uuid4()
|
||||
res = await cancel_job(jid, svc=svc)
|
||||
assert isinstance(res, JobStatusResponse)
|
||||
assert res.job_id == jid
|
||||
assert res.status == "canceled"
|
||||
Loading…
Reference in New Issue