"""Test for a product model.""" from unittest.mock import patch from oto import response import pytest from content_review.logic import product @pytest.fixture def update_status_list(): """Return list for update (PUT) request.""" return [{ 'product_id': 1, 'review_timestamp': '2017-08-15 11:26:19', 'review_status': 'Approved' }, { 'product_id': 2, 'review_timestamp': '2017-08-15 12:26:19', 'review_status': 'Rejected' }] @pytest.fixture def review_status_types_list_flipped_response(): """Return list of review_status_types flipped.""" return response.Response({ 'Approved': 1, 'Rejected': 2, 'Pending': 3 }) @pytest.fixture def review_types_list_flipped_response(): """Return list of review_types flipped.""" return response.Response({ 'MENA': 1 }) @pytest.fixture def create_product_status_review(): """Return success of insert product review with 2 records.""" return response.Response( message={'processed_records': 2}, status=201) @pytest.fixture def get_product_status_review(): """Return product status with history.""" payload = [{ 'product_id': 100, 'review_status': 'Pending', 'review_timestamp': '2017-09-21 15:12:00', 'created_timestamp': '2017-09-21 15:13:00' }] return response.Response(payload) @pytest.fixture def update_product_status_review(): """Return product status update.""" payload = {'processed_records': 2} return response.Response(message=payload, status=201) @pytest.fixture def create_not_found_response(): """Return create not found response.""" return response.create_not_found_response() @pytest.fixture def create_product_status_review_failure(): """Return success of insert product review with 0 records.""" return response.Response( message={'processed_records': 0}, status=201) @patch( 'content_review.models.review_status_type.get_status_types', return_value=review_status_types_list_flipped_response()) @patch( 'content_review.models.review_type.get_review_types', return_value=review_types_list_flipped_response()) @patch( 'content_review.models.product_review_status.create_product_status_review', return_value=create_product_status_review()) def test_create_default_status( mock_product_review_status, mock_review_type, mock_review_status_type): """Test creating review default status entries.""" actual_response = product.create_default_status('mena', [500, 600]) assert mock_product_review_status.\ return_value.message == actual_response.message @patch( 'content_review.models.review_status_type.get_status_types', return_value=review_status_types_list_flipped_response()) @patch( 'content_review.models.review_type.get_review_types', return_value=review_types_list_flipped_response()) @patch( 'content_review.models.product_review_status.create_product_status_review', return_value=create_product_status_review_failure()) def test_create_default_status_failure( mock_product_review_status, mock_review_type, mock_review_status_type): """Test creating review default status entries.""" actual_response = product.create_default_status('mena', []) assert mock_product_review_status.\ return_value.message == actual_response.message @patch( 'content_review.models.product_review_status' '.update_product_status_review', return_value=update_product_status_review()) @patch( 'content_review.models.review_type.get_review_types', return_value=review_types_list_flipped_response()) def test_update_status( mock_review_type, mock_get_product_status_review, update_status_list): """Test updating review status entries.""" actual_response = product.update_status('mena', update_status_list) assert actual_response.message == {'processed_records': 2} assert actual_response.status == 201 @patch( 'content_review.models.product_review_status' '.get_product_status_review_history', return_value=get_product_status_review()) def test_get_product(mock_get_product_status_review): """Test getting product info.""" actual_response = product.get_status('mena', 100) assert actual_response.message == [{ 'product_id': 100, 'review_status': 'Pending', 'review_timestamp': '2017-09-21 15:12:00', 'created_timestamp': '2017-09-21 15:13:00' }] @patch( 'content_review.models.product_review_status' '.get_product_status_review_history', return_value=create_not_found_response()) def test_get_product_not_found(mock_get_product_status_review): """Test getting product info without found product_id.""" actual_response = product.get_status('mena', 9090) expected_response = response.create_not_found_response() assert actual_response.message == expected_response.message