"""Tests for physical product logic.""" from unittest.mock import MagicMock from oto import response from ows_product_physical.constant import error from ows_product_physical.logic import product_physical from ows_product_physical.models import inventory_persister from ows_product_physical.models import ows_product from ows_product_physical.models import persister def test_get_inventory_success(monkeypatch, valid_get_header): """Test get inventory success.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.Response())) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock( return_value=response.Response(message=True))) monkeypatch.setattr( inventory_persister, 'get_product_inventory_by_product_id', value=MagicMock(return_value=response.Response())) account_type = valid_get_header['Grass-Account-Type'] account_id = valid_get_header['Grass-Account-Id'] result = product_physical.get_inventory(1234, account_type, account_id) assert result.status == 200 assert inventory_persister.get_product_inventory_by_product_id.called def test_get_inventory_fail(monkeypatch, valid_get_header): """Test get inventory fails when get inventory mysql error.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.Response())) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock( return_value=response.Response(message=True))) monkeypatch.setattr( inventory_persister, 'get_product_inventory_by_product_id', value=MagicMock(return_value=response.create_error_response( code=error.INTERNAL_ERROR, message='mysql error', status=500))) account_type = valid_get_header['Grass-Account-Type'] account_id = valid_get_header['Grass-Account-Id'] result = product_physical.get_inventory(1234, account_type, account_id) assert result.status == 500 assert inventory_persister.get_product_inventory_by_product_id.called def test_get_inventory_not_found(monkeypatch, valid_get_header): """Test get inventory fails when inventory not found.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.Response())) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock( return_value=response.Response(message=True))) monkeypatch.setattr( inventory_persister, 'get_product_inventory_by_product_id', 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'] result = product_physical.get_inventory(1234, account_type, account_id) assert result.status == 404 assert inventory_persister.get_product_inventory_by_product_id.called def test_get_inventory_invalid_ownership(monkeypatch, valid_get_header): """Test get inventory fails when ownership is false.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.Response())) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock( return_value=response.Response(message=False))) monkeypatch.setattr( inventory_persister, 'get_product_inventory_by_product_id', value=MagicMock(return_value=response.create_not_found_response())) account_type = valid_get_header['Grass-Account-Type'] account_id = 'invalid_id' result = product_physical.get_inventory(1234, account_type, account_id) assert result.status == 403 assert result.errors['message'] == error.OWNERSHIP_ERROR_MESSAGE.format( account_type) assert ows_product.check_product_ownership.called args, kwargs = ows_product.check_product_ownership.call_args assert args == ( 1234, valid_get_header['Grass-Account-Type'], 'invalid_id') def test_get_inventory_product_not_found(monkeypatch, valid_get_header): """Test get inventory fails when product not found.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.create_not_found_response())) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock( return_value=response.Response(message=False))) account_type = valid_get_header['Grass-Account-Type'] account_id = valid_get_header['Grass-Account-Id'] result = product_physical.get_inventory(1234, account_type, account_id) assert result.status == 404 assert not ows_product.check_product_ownership.called def test_get_inventory_grass_header_not_provided( monkeypatch, valid_get_header): """Test get inventory fails when not all grass-headers are present.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.Response())) account_type = valid_get_header['Grass-Account-Type'] result = product_physical.get_inventory(1234, account_type) assert result.status == 400 def test_get_inventory_without_grass_header(monkeypatch): """Test get inventory call without grass-headers succeeds.""" monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock( return_value=response.Response())) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock( return_value=response.Response(message=True))) monkeypatch.setattr( inventory_persister, 'get_product_inventory_by_product_id', value=MagicMock(return_value=response.Response())) result = product_physical.get_inventory(1234) assert result.status == 200 assert inventory_persister.get_product_inventory_by_product_id.called