"""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 ownership from ows_product_physical.logic import product_physical from ows_product_physical.models import persister def test_delete_product_success(monkeypatch, valid_vendor_id): """Test delete product success.""" monkeypatch.setattr(persister, 'delete_product', value=MagicMock( return_value=response.Response(message={'status': 'ok'}))) monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock(return_value=response.Response({ 'project_id': 123, 'release_status': 'label_processing'}))) monkeypatch.setattr( ownership, 'check_project_ownership', value=MagicMock(return_value=response.Response())) release_id = 123 delete_response = product_physical.delete( release_id, 'vendor', valid_vendor_id) assert persister.delete_product.called assert delete_response.status == 200 assert delete_response.message.get('status') == 'ok' def test_delete_product_not_found_failure(monkeypatch, valid_vendor_id): """Test delete non-existent product failure.""" monkeypatch.setattr(persister, 'delete_product', value=MagicMock( return_value=response.Response(message={'status': 'ok'}))) monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock(return_value=response.create_not_found_response())) monkeypatch.setattr( ownership, 'check_project_ownership', value=MagicMock(return_value=response.Response())) release_id = 123 delete_response = product_physical.delete( release_id, 'vendor', valid_vendor_id) assert not persister.delete_product.called assert delete_response.status == 404 def test_delete_product_ownership_check_failure(monkeypatch, valid_vendor_id): """Test product not deleted if ownership check fails.""" monkeypatch.setattr(persister, 'delete_product', value=MagicMock( return_value=response.Response(message={'status': 'ok'}))) monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock(return_value=response.Response( {'project_id': 123, 'release_status': 'label_processing'}))) monkeypatch.setattr( ownership, 'check_project_ownership', value=MagicMock(return_value=response.create_error_response( code='whatever', message='YOU DONT EVEN GO HERE', status=403))) release_id = 123 delete_response = product_physical.delete( release_id, 'vendor', valid_vendor_id) assert not persister.delete_product.called assert delete_response.status == 403 def test_delete_product_status_failure(monkeypatch, valid_vendor_id): """Test product not deleted if status is not label processing.""" monkeypatch.setattr(persister, 'delete_product', value=MagicMock( return_value=response.Response(message={'status': 'ok'}))) monkeypatch.setattr( persister, 'get_product_by_id', value=MagicMock(return_value=response.Response( {'project_id': 123, 'release_status': 'in_content'}))) monkeypatch.setattr(ownership, 'check_project_ownership', value=MagicMock( return_value=response.Response())) release_id = 123 delete_response = product_physical.delete( release_id, 'vendor', valid_vendor_id) assert not persister.delete_product.called assert delete_response.status == 400 assert delete_response.errors.get('code') == error.RELEASE_STATUS_ERROR