"""Tests for test utils.""" from contextlib import nullcontext as does_not_raise import pytest from product_review.logic import review_queue as review_queue_logic from product_review.testing_accommodations import art_relations as art_relations_model from tests.conftest import Release from tests.utils.db_utils import ( create_test_approval, create_test_rejection, create_test_review_queue_item, ) some_exception = Exception("some exception") @pytest.mark.parametrize( ( "test_description", "expected_art_relations_model_side_effect", "expected_raise", "expected_raise_message", "expected_new_item_ids", "expected_complete_item_ids", ), [ ( "success", None, does_not_raise(), "None", [13], [18, 15, 12, 11], ), ( "art_relations model exception", some_exception, pytest.raises(Exception), str(some_exception), [17, 16, 13], [18, 15, 14, 12, 11], ), ], ) def test_sync_db( mocker, app_context, test_description, expected_art_relations_model_side_effect, expected_raise, expected_raise_message, expected_new_item_ids, expected_complete_item_ids, ): """Test syncing products' statuses.""" app_context.g.request_context.is_integration_test_preparation = False app_context.g.request_context.is_db_resync = True # normal ones create_test_review_queue_item( **{"review_queue_id": 11, "product_id": 100, "status": "complete"} ) create_test_review_queue_item( **{"review_queue_id": 12, "product_id": 101, "status": "complete"} ) create_test_review_queue_item( **{"review_queue_id": 13, "product_id": 102, "status": "new"} ) create_test_rejection(**{"review_queue_id": 11, "user_id": "123", "note": "hello"}) create_test_approval(**{"review_queue_id": 12, "user_id": "456"}) # non-existent one create_test_review_queue_item( **{"review_queue_id": 14, "product_id": 200, "status": "complete"} ) create_test_rejection(**{"review_queue_id": 14, "user_id": "123", "note": "hi"}) # harmless mismatch one create_test_review_queue_item( **{"review_queue_id": 15, "product_id": 201, "status": "complete"} ) create_test_rejection( **{"review_queue_id": 15, "user_id": "456", "note": "goodbye"} ) # to be deleted because of mismatch create_test_review_queue_item( **{"review_queue_id": 16, "product_id": 202, "status": "new"} ) create_test_review_queue_item( **{"review_queue_id": 17, "product_id": 203, "status": "new"} ) # to be reset because of mismatch create_test_review_queue_item( **{"review_queue_id": 18, "product_id": 204, "status": "complete"} ) create_test_approval(**{"review_queue_id": 18, "user_id": "456"}) mock_response = [ Release(100, "in_content", 1), Release(101, "in_content", 1), Release(102, "transfer_to_content", 1), Release(201, "label_processing", 1), Release(202, "in_content", 1), Release(203, "label_processing", 1), Release(204, "transfer_to_content", 1), Release(300, "transfer_to_content", 1), ] mocker.patch.object( art_relations_model, "get_products", return_value=mock_response, side_effect=expected_art_relations_model_side_effect, autospec=True, ) with expected_raise as er: art_relations_model.sync_db() assert str(getattr(er, "value", None)) == expected_raise_message new_items = review_queue_logic.get_review_queue_items() complete_items = review_queue_logic.get_review_queue_items(status="complete") assert [ i["review_queue_id"] for i in new_items.message["items"] ] == expected_new_item_ids assert [ i["review_queue_id"] for i in complete_items.message["items"] ] == expected_complete_item_ids