|
4 | 4 | from httpx import AsyncClient |
5 | 5 | from sqlalchemy.ext.asyncio import AsyncSession |
6 | 6 |
|
7 | | -from data_rentgen.db.models import Job |
| 7 | +from data_rentgen.db.models import Job, Run |
8 | 8 | from tests.fixtures.mocks import MockedUser |
9 | | -from tests.test_server.utils.convert_to_json import job_to_json, tag_values_to_json |
10 | | -from tests.test_server.utils.enrich import enrich_jobs |
| 9 | +from tests.test_server.utils.convert_to_json import job_to_json, run_to_json, tag_values_to_json |
| 10 | +from tests.test_server.utils.enrich import enrich_jobs, enrich_runs |
11 | 11 |
|
12 | 12 | pytestmark = [pytest.mark.server, pytest.mark.asyncio] |
13 | 13 |
|
@@ -41,12 +41,50 @@ async def test_get_jobs_no_filters( |
41 | 41 | "id": str(job.id), |
42 | 42 | "data": job_to_json(job), |
43 | 43 | "tags": tag_values_to_json(job.tag_values) if job.tag_values else [], |
| 44 | + "last_run": None, |
44 | 45 | } |
45 | 46 | for job in sorted(jobs, key=lambda x: x.name) |
46 | 47 | ], |
47 | 48 | } |
48 | 49 |
|
49 | 50 |
|
| 51 | +async def test_get_jobs_with_last_run( |
| 52 | + test_client: AsyncClient, |
| 53 | + runs_with_same_job: list[Run], |
| 54 | + async_session: AsyncSession, |
| 55 | + mocked_user: MockedUser, |
| 56 | +): |
| 57 | + last_run = max(runs_with_same_job, key=lambda x: x.created_at) |
| 58 | + [last_run] = await enrich_runs([last_run], async_session) |
| 59 | + [job] = await enrich_jobs([last_run.job], async_session) |
| 60 | + response = await test_client.get( |
| 61 | + "v1/jobs", |
| 62 | + headers={"Authorization": f"Bearer {mocked_user.access_token}"}, |
| 63 | + ) |
| 64 | + |
| 65 | + assert response.status_code == HTTPStatus.OK, response.json() |
| 66 | + assert response.json() == { |
| 67 | + "meta": { |
| 68 | + "page": 1, |
| 69 | + "page_size": 20, |
| 70 | + "total_count": 1, |
| 71 | + "pages_count": 1, |
| 72 | + "has_next": False, |
| 73 | + "has_previous": False, |
| 74 | + "next_page": None, |
| 75 | + "previous_page": None, |
| 76 | + }, |
| 77 | + "items": [ |
| 78 | + { |
| 79 | + "id": str(job.id), |
| 80 | + "data": job_to_json(job), |
| 81 | + "tags": tag_values_to_json(job.tag_values) if job.tag_values else [], |
| 82 | + "last_run": run_to_json(last_run), |
| 83 | + } |
| 84 | + ], |
| 85 | + } |
| 86 | + |
| 87 | + |
50 | 88 | async def test_get_jobs_unauthorized( |
51 | 89 | test_client: AsyncClient, |
52 | 90 | ): |
|
0 commit comments