import pytest from httpx import AsyncClient from jb.managers.assignment import AssignmentManager from jb.models.assignment import AssignmentStub from jb.models.hit import Hit class TestWork: @pytest.mark.anyio async def test_work( self, httpxclient: AsyncClient, hit_record: Hit, amt_assignment_id: str, amt_worker_id: str, ): assert isinstance(hit_record.id, int) params = { "workerId": amt_worker_id, "assignmentId": amt_assignment_id, "hitId": hit_record.amt_hit_id, } res = await httpxclient.get("/work/", params=params) assert res.status_code == 200 @pytest.mark.anyio async def test_work_no_hit_record( self, httpxclient: AsyncClient, hit: Hit, amt_assignment_id: str, amt_worker_id: str, ): # Because no AssignmentStub record is created, and we're just using # random strings as IDs, we should also confirm that the Hit record # is not a saved record. assert hit.id is None params = { "workerId": amt_worker_id, "assignmentId": amt_assignment_id, "hitId": hit.amt_hit_id, } res = await httpxclient.get("/work/", params=params) # This either results a 302 redirect to the Preview page, # or a 200. In previous tests, it expected a 500 but is # unclear what that behavior was intended for, but does # not seem to be the expected response anyway. assert res.status_code == 200 @pytest.mark.anyio async def test_work_assignment_stub_existing( self, httpxclient: AsyncClient, am: AssignmentManager, hit: Hit, assignment_stub_record: AssignmentStub, amt_assignment_id: str, amt_worker_id: str, ): # Because the AssignmentStub is created with a reference to the Hit, # the Hit is actually a "Hit Record" (with a primary key), so it's # saved in the database assert isinstance(hit.id, int) # Confirm that it exists in the database before the call res = am.get_stub_if_exists(amt_assignment_id=amt_assignment_id) assert isinstance(res, AssignmentStub) assert isinstance(res.id, int) params = { "workerId": amt_worker_id, "assignmentId": assignment_stub_record.amt_assignment_id, "hitId": hit.amt_hit_id, } res = await httpxclient.get("/work/", params=params) assert res.status_code == 200 # Confirm that it exists in the database res = am.get_stub_if_exists(amt_assignment_id=amt_assignment_id) assert isinstance(res, AssignmentStub) assert isinstance(res.id, int) @pytest.mark.anyio async def test_work_assignment_stub_created( self, httpxclient: AsyncClient, am: AssignmentManager, hit_record: Hit, assignment_stub: AssignmentStub, amt_assignment_id: str, amt_worker_id: str, ): # Confirm that it exists in the database before the call res = am.get_stub_if_exists(amt_assignment_id=amt_assignment_id) assert res is None params = { "workerId": amt_worker_id, "assignmentId": assignment_stub.amt_assignment_id, "hitId": hit_record.amt_hit_id, } res = await httpxclient.get("/work/", params=params) assert res.status_code == 200 # Confirm that it exists in the database res = am.get_stub_if_exists(amt_assignment_id=amt_assignment_id) # assert isinstance(res, AssignmentStub) # assert isinstance(res.id, int) # As of Sep 10th, 2026 - I don't see any logic where the /work/ # would go ahead and create the Assignment Stub. Maybe it was moved # somewhere else, but it would continue to be None as the /work/ # page only returns back the template or a redirect.. - Max assert res is None