"""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 ows_product from ows_product_physical.models import persister def test_check_subaccount_product_code_uniqueness_unique( monkeypatch, feature_engine): """Assert product code is unique for subaccount id.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response(message=iter([])))) project_subaccount_id = 123 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=0))) result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, 'ABC') assert result def test_check_subaccount_product_code_uniqueness_not_unique( monkeypatch, feature_engine): """Assert product code is not unique for subaccount id.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response( message=[{ 'subaccount_id': 123 }]))) project_subaccount_id = 123 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=123))) result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, 'ABC') assert result.status == 400 assert result.errors.get('code') == error.VALIDATION_ERROR def test_check_vendor_product_code_uniqueness_unique( monkeypatch, feature_engine): """Assert product code is unique for vendor_id.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response(message=iter([])))) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock(return_value=response.Response(message=True))) project_subaccount_id = 0 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=0))) result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, 'ABC') assert result def test_check_vendor_product_code_uniqueness_not_unique( monkeypatch, feature_engine): """Assert product code is not unique for vendor id.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response( message=[{ 'release_id': 111, 'subaccount_id': None }]))) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock(return_value=response.Response(message=True))) project_subaccount_id = 0 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=123))) result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, 'ABC') assert result.status == 400 assert result.errors.get('code') == error.VALIDATION_ERROR def test_check_d3_subaccount_product_code_uniqueness_unique( monkeypatch, feature_engine): """Assert product code is unique for d3 subaccount.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response(message=iter([])))) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock(return_value=response.Response(message=True))) project_subaccount_id = 123 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=0))) result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, 'ABC') assert result def test_check_d3_subaccount_code_uniqueness_not_unique( monkeypatch, feature_engine): """Assert product code is not unique for d3 subaccount.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response( message=[{ 'release_id': 111, 'subaccount_id': 123 }]))) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock(return_value=response.Response(message=True))) project_subaccount_id = 123 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=123))) result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, 'ABC') assert result.status == 400 assert result.errors.get('code') == error.VALIDATION_ERROR def test_check_catalog_product_code_uniqueness_unique( monkeypatch, feature_engine): """Assert product code is unique across all catalog products.""" monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response(message=iter([])))) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock(return_value=response.Response(message=True))) project_subaccount_id = 0 monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response(message=0))) product_code = 'UNIQUE123' result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, product_code) assert result def test_check_catalog_product_code_uniqueness_existing_product_is_unique( monkeypatch, feature_engine): """Assert product code is unique across all catalog products.""" monkeypatch.setattr( persister, 'get_physical_release_count_by_product_code', value=MagicMock(return_value=response.Response( message=0))) monkeypatch.setattr( persister, 'get_release_by_product_code', value=MagicMock(return_value=response.Response(message=iter([])))) monkeypatch.setattr( ows_product, 'check_product_ownership', value=MagicMock(return_value=response.Response(message=True))) project_subaccount_id = 0 product_code = 'PHYS1' product_id = 1 result = product_physical.check_product_code_uniqueness( 123, project_subaccount_id, product_code, product_id) assert result