Align frontend API contracts
This commit is contained in:
@@ -332,7 +332,12 @@ class BackgroundJobsViewTest(APITestCase):
|
||||
url = reverse("api_v1:jobs:job-status", kwargs={"task_id": job.task_id})
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
set(response.data.keys()),
|
||||
{"task_id", "status", "progress", "message", "result", "error"},
|
||||
)
|
||||
self.assertEqual(response.data["task_id"], job.task_id)
|
||||
self.assertEqual(response.data["status"], "success")
|
||||
|
||||
def test_job_status_forbidden_for_other_user(self):
|
||||
job = self._create_job(
|
||||
@@ -361,12 +366,17 @@ class BackgroundJobsViewTest(APITestCase):
|
||||
|
||||
def test_job_list_filters_status(self):
|
||||
self._create_job(task_id="job-1", user_id=self.user.id, status="success")
|
||||
self._create_job(task_id="job-2", user_id=self.user.id, status="pending")
|
||||
self._create_job(task_id="job-2", user_id=self.user.id, status="started")
|
||||
self.client.force_authenticate(self.user)
|
||||
url = reverse("api_v1:jobs:job-list")
|
||||
response = self.client.get(url, {"status": "success", "limit": 10})
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data), 1)
|
||||
self.assertEqual(len(response.data["results"]), 1)
|
||||
self.assertEqual(
|
||||
set(response.data["results"][0].keys()),
|
||||
{"task_id", "status", "progress", "name"},
|
||||
)
|
||||
self.assertEqual(response.data["results"][0]["name"], "task")
|
||||
|
||||
def test_job_list_limit(self):
|
||||
for idx in range(5):
|
||||
@@ -379,7 +389,7 @@ class BackgroundJobsViewTest(APITestCase):
|
||||
url = reverse("api_v1:jobs:job-list")
|
||||
response = self.client.get(url, {"limit": 2})
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertLessEqual(len(response.data), 2)
|
||||
self.assertLessEqual(len(response.data["results"]), 2)
|
||||
|
||||
def test_job_list_invalid_limit_returns_400(self):
|
||||
self._create_job(
|
||||
@@ -389,3 +399,46 @@ class BackgroundJobsViewTest(APITestCase):
|
||||
url = reverse("api_v1:jobs:job-list")
|
||||
response = self.client.get(url, {"limit": "abc"})
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def test_job_status_maps_started_to_running(self):
|
||||
job = self._create_job(
|
||||
task_id="job-running",
|
||||
user_id=self.user.id,
|
||||
status="started",
|
||||
)
|
||||
self.client.force_authenticate(self.user)
|
||||
url = reverse("api_v1:jobs:job-status", kwargs={"task_id": job.task_id})
|
||||
|
||||
response = self.client.get(url)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data["status"], "running")
|
||||
|
||||
def test_job_stream_returns_completed_sse_event(self):
|
||||
job = self._create_job(
|
||||
task_id="job-stream-complete",
|
||||
user_id=self.user.id,
|
||||
status="success",
|
||||
)
|
||||
self.client.force_authenticate(self.user)
|
||||
url = reverse("api_v1:jobs:job-stream", kwargs={"task_id": job.task_id})
|
||||
|
||||
response = self.client.get(url)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
chunks = b"".join(response.streaming_content).decode("utf-8")
|
||||
self.assertIn("event: completed", chunks)
|
||||
self.assertIn('"task_id": "job-stream-complete"', chunks)
|
||||
|
||||
def test_job_stream_forbidden_for_other_user(self):
|
||||
job = self._create_job(
|
||||
task_id="job-stream-forbidden",
|
||||
user_id=self.user.id,
|
||||
status="success",
|
||||
)
|
||||
self.client.force_authenticate(self.other)
|
||||
url = reverse("api_v1:jobs:job-stream", kwargs={"task_id": job.task_id})
|
||||
|
||||
response = self.client.get(url)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
||||
|
||||
Reference in New Issue
Block a user