"""Tests for physical product logic.""" from unittest.mock import MagicMock from oto import response from ows_product_physical.constant import field from ows_product_physical.logic import ownership from ows_product_physical.logic import product_physical from ows_product_physical.models import ows_marketing from ows_product_physical.models import persister from ows_product_physical.models import product_physical_supply_chain_metadata def test_get_product_success( mock_app, monkeypatch, valid_get_header, feature_engine, response_without_supply_chain_metadata ): """Test fetch product by id success.""" monkeypatch.setattr( ownership, 'check_project_ownership', value=MagicMock( return_value=response.Response(status=200))) account_type = valid_get_header['Grass-Account-Type'] account_id = valid_get_header['Grass-Account-Id'] monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) monkeypatch.setattr( ows_marketing, 'get_product_highlight_by_product_id', value=MagicMock(return_value=response.Response(message={ 'description': 'Test'}))) monkeypatch.setattr( product_physical_supply_chain_metadata, 'get_product_supply_chain_metadata', value=MagicMock(return_value=response.Response(message={ 'items': 'Test'}))) result = product_physical.fetch_by_id(1234, account_type, account_id) assert result.message == response_without_supply_chain_metadata assert result.status == 200 assert persister.get_product_by_id.called is True assert ownership.check_project_ownership.called is True assert ownership.check_project_ownership.called is True def test_get_product_ownership_fail( mock_app, monkeypatch, valid_get_header, feature_engine): """Test fetch product by id ownership fail state.""" monkeypatch.setattr( ownership, 'check_project_ownership', value=MagicMock( return_value=response.create_not_found_response())) account_type = valid_get_header['Grass-Account-Type'] account_id = valid_get_header['Grass-Account-Id'] monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock()) monkeypatch.setattr( ows_marketing, 'get_product_highlight_by_product_id', value=MagicMock(return_value=response.Response(message={ 'description': 'Test'}))) result = product_physical.fetch_by_id(1234, account_type, account_id) assert result.status == 404 assert persister.get_product_by_id.called is True assert ownership.check_project_ownership.called is True