mirror of
https://github.com/Sea-Haven-Industries/meal-order-manager.git
synced 2026-09-30 18:13:13 +00:00
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
|
|
"""SQS worker deletes completed jobs and leaves skipped messages for retry."""
|
||
|
|
|
||
|
|
import json
|
||
|
|
from unittest.mock import MagicMock, patch
|
||
|
|
|
||
|
|
from server import worker
|
||
|
|
|
||
|
|
|
||
|
|
def _one_message_then_stop(body: dict):
|
||
|
|
def receive_message(**_kwargs):
|
||
|
|
worker._stop(None, None)
|
||
|
|
return {
|
||
|
|
"Messages": [
|
||
|
|
{
|
||
|
|
"ReceiptHandle": "rh-1",
|
||
|
|
"Body": json.dumps(body),
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
|
||
|
|
return receive_message
|
||
|
|
|
||
|
|
|
||
|
|
@patch("server.worker.boto3.client")
|
||
|
|
@patch("server.worker.run_job")
|
||
|
|
def test_worker_does_not_delete_skipped_jobs(mock_run, mock_client):
|
||
|
|
sqs = MagicMock()
|
||
|
|
mock_client.return_value = sqs
|
||
|
|
sqs.receive_message.side_effect = _one_message_then_stop({"event": "close"})
|
||
|
|
mock_run.return_value = {"status": "skipped", "reason": "outside window"}
|
||
|
|
|
||
|
|
with patch.dict("os.environ", {"JOBS_QUEUE_URL": "https://sqs.example/jobs"}):
|
||
|
|
worker._running = True
|
||
|
|
worker.main()
|
||
|
|
|
||
|
|
sqs.delete_message.assert_not_called()
|
||
|
|
|
||
|
|
|
||
|
|
@patch("server.worker.boto3.client")
|
||
|
|
@patch("server.worker.run_job")
|
||
|
|
def test_worker_deletes_completed_jobs(mock_run, mock_client):
|
||
|
|
sqs = MagicMock()
|
||
|
|
mock_client.return_value = sqs
|
||
|
|
sqs.receive_message.side_effect = _one_message_then_stop({"event": "close"})
|
||
|
|
mock_run.return_value = {"status": "closed", "week": "2026-W19"}
|
||
|
|
|
||
|
|
with patch.dict("os.environ", {"JOBS_QUEUE_URL": "https://sqs.example/jobs"}):
|
||
|
|
worker._running = True
|
||
|
|
worker.main()
|
||
|
|
|
||
|
|
sqs.delete_message.assert_called_once_with(
|
||
|
|
QueueUrl="https://sqs.example/jobs", ReceiptHandle="rh-1"
|
||
|
|
)
|