"""Tests for inventory persister.""" from unittest.mock import MagicMock from sqlalchemy.exc import OperationalError from sqlalchemy.orm.session import Session from ows_product_physical.models import inventory_persister def test_persister_get_tracks_query_succeeds(monkeypatch): """Assert inventory retrieved from the database by product_id.""" product_id = '12345' expected_message = { 'on_hand': 867, 'allocated': 5, 'faulty': 1, 'consignment': 2, 'available': 44 } monkeypatch.setattr( Session, 'execute', value=MagicMock( return_value=MagicMock(fetchone=lambda: expected_message))) response = inventory_persister.get_product_inventory_by_product_id( product_id) assert response.message == expected_message def test_get_inventory_without_product_id(): """Test getting inventory without product_id.""" product_id = None result = inventory_persister.get_product_inventory_by_product_id( product_id) assert result.message == {} def test_persister_get_tracks_query_fails(monkeypatch): """Assert inventory retrieving fails.""" product_id = '12345' monkeypatch.setattr( Session, 'execute', value=MagicMock( side_effect=OperationalError('', None, None))) response = inventory_persister.get_product_inventory_by_product_id( product_id) assert response.status == 500 def test_inventory_persister_get_no_content(monkeypatch): """Test get inventory when empty set retrieved from database.""" product_id = '12345' expected_message = {} result_message = MagicMock(fetchone=lambda: expected_message) monkeypatch.setattr( Session, 'execute', value=MagicMock( return_value=result_message)) response = inventory_persister.get_product_inventory_by_product_id( product_id) assert response.status == 204