"""Tests for rejection.""" import json from contextlib import nullcontext as does_not_raise import pytest from freezegun import freeze_time from product_review.api import db from product_review.models import rejection as rejection_model from tests.utils.db_utils import create_test_rejection @pytest.mark.parametrize( ( "test_description", "inputs", "expected_new", "expected_dirty", "expected_deleted", "expected_raise", "expected_raise_message", ), [ ( "success", [ {"review_queue_id": 1, "user_id": "abc-123", "note": "no good"}, {"review_queue_id": 2, "user_id": "def-456", "note": "bad"}, { "review_queue_id": 3, "user_id": "ghi-789", "note": "advertisement in audio", "will_not_deliver": False, }, ], [ { "rejection_id": None, "review_queue_id": 12, "created_datetime": None, "user_id": "pji-123", "note": "advertisement in audio", "will_not_deliver": False, } ], [], [], does_not_raise(), "None", ), ( "already rejected exception", [ {"review_queue_id": 12, "user_id": "abc-123", "note": "no good"}, {"review_queue_id": 2, "user_id": "def-456", "note": "bad"}, { "review_queue_id": 3, "user_id": "ghi-789", "note": "advertisement in audio", "will_not_deliver": False, }, ], [], [], [], pytest.raises(Exception), json.dumps( { "status": 409, "code": "exists", "message": 'There is already a rejection record for "review_queue_id: 12".', # noqa } ), ), ], ) @freeze_time("0001-02-03") def test_reject( app_context, test_description, inputs, expected_new, expected_dirty, expected_deleted, expected_raise, expected_raise_message, ): """Test reject.""" for item in inputs: create_test_rejection( review_queue_id=item["review_queue_id"], user_id=item["user_id"], note=item["note"], ) app_context.g.request_context.identity_id = "pji-123" with expected_raise as er: rejection_model.reject(12, "advertisement in audio") assert str(getattr(er, "value", None)) == expected_raise_message assert [item.to_dict() for item in db.session.new] == expected_new assert [item.to_dict() for item in db.session.dirty] == expected_dirty assert [item.to_dict() for item in db.session.deleted] == expected_deleted def test_delete(app_context): """Test delete.""" create_test_rejection( review_queue_id=2, user_id="def-456", note="advertisement in audio" ) app_context.g.request_context.identity_id = "pji-123" rejection_model.delete(2) db.session.commit() rejection_model.reject(2, "advertisement in audio") db.session.commit() def test_get(app_context): """Test get.""" create_test_rejection( review_queue_id=2, user_id="def-456", note="advertisement in audio" ) app_context.g.request_context.identity_id = "pji-123" rejection = rejection_model.get_for_workstation(2) db.session.commit() messages = rejection.message["items"] assert messages[0]["comments"] == "advertisement in audio"