"""Test lookup logic.""" from unittest.mock import patch from content_utils.exceptions import GraphQLError from content_utils.exceptions import IneligibleEventError from content_utils.exceptions import InvalidProductException import pytest def test_get_product_id_by_asset_success( request_engine, mock_ows_assets_response ): """Test asset info success.""" from src.logic.lookup import get_product_id_by_asset request_engine['ows-assets'].add_spec( 'GET', '/v2/asset/info', response=mock_ows_assets_response ) actual = get_product_id_by_asset(1254) assert actual == '4310636' @pytest.mark.parametrize( ('test_description', 'mock_ows_status_code', 'expected_error', 'expected_result'), [ ('not found', 404, IneligibleEventError, 'Asset not found for asset_final_id 1254'), ( 'internal server error', 500, Exception, 'Retrieval failed for asset_final_id 1254\n{"foo": "bar"}' ), ] ) def test_get_product_id_by_asset_error( request_engine, test_description, mock_ows_status_code, expected_error, expected_result ): """Test asset info not found.""" from src.logic.lookup import get_product_id_by_asset request_engine['ows-assets'].add_spec( 'GET', '/v2/asset/info', status=mock_ows_status_code, response={'foo': 'bar'} ) with pytest.raises(expected_error) as e: get_product_id_by_asset(1254) assert e.value.args[0] == expected_result @patch('src.logic.lookup.graphql_connector') def test_get_product_data( mock_gql, mock_graphql_error_response, mock_product_empty, mock_product ): """Test get product data.""" from src.logic.lookup import get_product_data # Empty product mock_gql.execute.return_value = mock_product_empty with pytest.raises(InvalidProductException) as e: get_product_data(1) assert 'Product with product_id 1 not found, may be deleted' in str(e) # Error response mock_gql.execute.return_value = mock_graphql_error_response with pytest.raises(GraphQLError) as e: get_product_data(1) assert 'Product retrieval blocked:' in str(e) # Success mock_gql.execute.return_value = mock_product actual = get_product_data(1) assert actual['productId'] == 2427104 @patch('src.logic.lookup.graphql_connector') def test_get_product(mock_gql, mock_product, mock_ows_assets_response, request_engine): """Test get product.""" from src.logic.lookup import get_product request_engine['ows-assets'].add_spec( 'GET', '/v2/asset/info', response=mock_ows_assets_response ) mock_gql.execute.return_value = mock_product actual = get_product(1245) assert actual['productId'] == 2427104