"""Tests for Store Pricing Scheme logic.""" from unittest.mock import MagicMock from oto import response from pricing.logic import store_pricing_scheme from pricing.models import store_pricing_scheme as store_pricing_scheme_model import pytest @pytest.fixture def fixture_store_pricing_scheme(): """Fixture for single store pricing scheme.""" return response.Response({ 'name': 'A Store Pricing Scheme', 'store_pricing_tiers': [] }) @pytest.fixture def fixture_sps_with_store_pricing_tiers(): """Fixture for single store pricing scheme.""" return response.Response({ 'name': 'A Store Pricing Scheme', 'store_pricing_tiers': [{ 'name': 'A store pricing tier', 'store_pricing_tier_codes': [{ 'store_pricing_tier_id': 2, 'territory_set': set([]) }] }] }) @pytest.fixture def fixture_store_pricing_schemes(): """Fixture for a list of store pricing schemes.""" return response.Response({ 'items': [ { 'name': 'A Store Pricing Scheme' } ] }) @pytest.fixture def fixture_store_pricing_schemes_empty_response(): """Fixture with empty response for store pricing scheme.""" return response.create_not_found_response() def test_get_pricing_families(monkeypatch, fixture_store_pricing_scheme): """Test getting a store pricing scheme.""" monkeypatch.setattr( store_pricing_scheme_model, 'get_store_pricing_scheme_by_id', MagicMock(return_value=fixture_store_pricing_scheme)) result = store_pricing_scheme.get_store_pricing_scheme_by_id(1) assert result assert result.message == fixture_store_pricing_scheme.message def test_get_pricing_families_with_store_pricing_tiers( monkeypatch, fixture_sps_with_store_pricing_tiers): """Test getting a store pricing scheme that has store pricing tiers.""" monkeypatch.setattr( store_pricing_scheme_model, 'get_store_pricing_scheme_by_id', MagicMock(return_value=fixture_sps_with_store_pricing_tiers)) result = store_pricing_scheme.get_store_pricing_scheme_by_id(1) assert result assert result.message == fixture_sps_with_store_pricing_tiers.message def test_get_store_pricing_scheme_by_id( monkeypatch, fixture_store_pricing_schemes_empty_response): """Test get store pricing scheme by id with empty response.""" monkeypatch.setattr( store_pricing_scheme_model, 'get_store_pricing_scheme_by_id', MagicMock(return_value=fixture_store_pricing_schemes_empty_response)) result = store_pricing_scheme.get_store_pricing_scheme_by_id(1) if result.errors: assert result.errors['code'] == 'not_found_error' assert result.status == 404 def test_get_by_store_id(monkeypatch, fixture_store_pricing_schemes): """Test getting a list of store pricing schemes by store ID.""" monkeypatch.setattr( store_pricing_scheme_model, 'get_by_store_id', MagicMock(return_value=fixture_store_pricing_schemes)) store_id = 1 result = store_pricing_scheme.get_by_store_id(store_id) assert result assert result.message == fixture_store_pricing_schemes.message def test_get_by_pricing_family_id(monkeypatch, fixture_store_pricing_schemes): """Test getting a list of store pricing schemes by pricing family ID.""" monkeypatch.setattr( store_pricing_scheme_model, 'get_by_pricing_family_id', MagicMock(return_value=fixture_store_pricing_schemes)) pricing_family_id = 1 result = store_pricing_scheme.get_by_pricing_family_id(pricing_family_id) assert result assert result.message == fixture_store_pricing_schemes.message def test_create_store_pricing_scheme( monkeypatch, fixture_store_pricing_scheme): """Test creating a store pricing scheme.""" monkeypatch.setattr( store_pricing_scheme_model, 'create_store_pricing_scheme', MagicMock(return_value=fixture_store_pricing_scheme)) data = {'name': 'A Store Pricing Scheme'} result = store_pricing_scheme.create_store_pricing_scheme(data) assert result assert result.message == fixture_store_pricing_scheme.message def test_update_store_pricing_scheme_by_id( monkeypatch, fixture_store_pricing_scheme): """Test updating a store pricing scheme by ID.""" monkeypatch.setattr( store_pricing_scheme_model, 'update_store_pricing_scheme_by_id', MagicMock(return_value=fixture_store_pricing_scheme)) data = {'name': 'A Store Pricing Scheme'} result = store_pricing_scheme.update_store_pricing_scheme_by_id(1, data) assert result assert result.message == fixture_store_pricing_scheme.message