diff --git a/backend/tests/test_jobs.py b/backend/tests/test_jobs.py index 5b64a43..e1166f5 100644 --- a/backend/tests/test_jobs.py +++ b/backend/tests/test_jobs.py @@ -171,3 +171,20 @@ class TestRandomNumberJobHandler: # Should not have called execute mock_conn.execute.assert_not_called() + + @pytest.mark.asyncio + async def test_malformed_json_payload_does_not_insert(self): + """Verify no insert happens with malformed JSON payload.""" + from worker import process_random_number_job + + job = MagicMock() + job.id = 123 + job.payload = b"not valid json {" + + mock_conn = AsyncMock() + mock_pool = create_mock_pool(mock_conn) + + await process_random_number_job(job, mock_pool) + + # Should not have called execute + mock_conn.execute.assert_not_called() diff --git a/backend/worker.py b/backend/worker.py index 6d22f9c..d3069e4 100644 --- a/backend/worker.py +++ b/backend/worker.py @@ -49,9 +49,13 @@ async def process_random_number_job(job: Job, db_pool: asyncpg.Pool) -> None: # Parse payload payload_str = job.payload.decode() if job.payload else "{}" - payload = json.loads(payload_str) - user_id = payload.get("user_id") + try: + payload = json.loads(payload_str) + except json.JSONDecodeError as e: + logger.error(f"Job {job.id}: Invalid JSON payload: {e}") + return + user_id = payload.get("user_id") if user_id is None: logger.error(f"Job {job.id}: Missing user_id in payload") return