55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import contextlib
|
|
import io
|
|
import json
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from scripts import run_visual_review
|
|
|
|
|
|
class RunVisualReviewScriptTests(unittest.TestCase):
|
|
def test_main_outputs_json_for_pending_reviews(self) -> None:
|
|
with patch("scripts.run_visual_review.VisualReviewService") as mock_service:
|
|
mock_service.return_value.review_pending_watch_runs.return_value = {
|
|
"status": "completed",
|
|
"attempted": 1,
|
|
"reviewed": 1,
|
|
"items": [
|
|
{
|
|
"watch_run_id": 11,
|
|
"visual_state": "confirm",
|
|
"snapshot_id": 333,
|
|
}
|
|
],
|
|
}
|
|
output = io.StringIO()
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_visual_review.main(env={"VISUAL_REVIEW_OUTPUT_JSON": "1"})
|
|
|
|
payload = json.loads(output.getvalue())
|
|
self.assertEqual(exit_code, 0)
|
|
self.assertEqual(payload["status"], "completed")
|
|
self.assertEqual(payload["reviewed"], 1)
|
|
|
|
def test_main_reviews_explicit_watch_run(self) -> None:
|
|
with patch("scripts.run_visual_review.VisualReviewService") as mock_service:
|
|
mock_service.return_value.review_watch_run.return_value = {
|
|
"status": "reviewed",
|
|
"watch_run_id": 99,
|
|
"visual_state": "caution",
|
|
}
|
|
output = io.StringIO()
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_visual_review.main(
|
|
env={"VISUAL_REVIEW_WATCH_RUN_ID": "99", "VISUAL_REVIEW_OUTPUT_JSON": "1"}
|
|
)
|
|
|
|
payload = json.loads(output.getvalue())
|
|
self.assertEqual(exit_code, 0)
|
|
self.assertEqual(payload["watch_run_id"], 99)
|
|
self.assertEqual(payload["visual_state"], "caution")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|