"""Distribution Fee model tests.""" from unittest.mock import Mock from unittest.mock import patch from pytest import fixture from api import constants from api.models import distribution_fee @fixture def db_distribution_fees_data(): """Fixture of db fetch all data.""" return [ { 'fee_type': constants.DISTRIBUTION_FEE_TYPE_REGULAR, 'country_id': None, 'split_fee': 3.5 }, { 'fee_type': constants.DISTRIBUTION_FEE_TYPE_DMS, 'country_id': 1, 'split_fee': 5 }, { 'fee_type': constants.DISTRIBUTION_FEE_TYPE_DMS, 'country_id': 2, 'split_fee': 4.5 }, { 'fee_type': constants.DISTRIBUTION_FEE_TYPE_TERRITORY, 'country_id': 4, 'split_fee': 7 }, { 'fee_type': constants.DISTRIBUTION_FEE_TYPE_TERRITORY, 'country_id': 1, 'split_fee': 4 } ] @fixture def all_distribution_fees_data(): """Fixture of get_all_distribution_fees response.""" return { constants.DISTRIBUTION_FEE_TYPE_REGULAR: { None: 3.5 }, constants.DISTRIBUTION_FEE_TYPE_DMS: { 1: 5, 2: 4.5 }, constants.DISTRIBUTION_FEE_TYPE_TERRITORY: { 4: 7, 1: 4 } } def test_get_all_distribution_fees( db_distribution_fees_data, all_distribution_fees_data, monkeypatch): """Test get_all_distribution_fees successfully return fees.""" upc = 888812345678 cursor_mock = Mock(fetchall=Mock(return_value=db_distribution_fees_data)) connection_mock = Mock() aurora_context_mock = Mock(__exit__=Mock(), __enter__=Mock( return_value=(cursor_mock, connection_mock))) monkeypatch.setattr(distribution_fee.aurora, 'context', Mock( return_value=aurora_context_mock)) results = distribution_fee.get_all_distribution_fees(upc) assert results == all_distribution_fees_data @patch('api.models.distribution_fee.ows_territories') def test_get_split_value_no_country( ows_territories, all_distribution_fees_data, monkeypatch): """Test get_split_value with only upc no country code.""" upc = 888812345678 country_mapping = {'AF': 2, 'US': 1, 'CA': 4} ows_territories.get_country_mapping = Mock(return_value=country_mapping) monkeypatch.setattr(distribution_fee, 'get_all_distribution_fees', Mock( return_value=all_distribution_fees_data)) results = distribution_fee.get_split_value(upc) assert results == 4.5 @patch('api.models.distribution_fee.ows_territories') def test_get_split_value_match_dms( ows_territories, all_distribution_fees_data, monkeypatch): """Test get_split_value with upc and matching country for fee_dms.""" upc = 888812345678 country_mapping = {'US': 1, 'CA': 4} ows_territories.get_country_mapping = Mock(return_value=country_mapping) monkeypatch.setattr(distribution_fee, 'get_all_distribution_fees', Mock( return_value=all_distribution_fees_data)) results = distribution_fee.get_split_value(upc, 'US') assert results == 5 @patch('api.models.distribution_fee.ows_territories') def test_get_split_value_match_territory( ows_territories, all_distribution_fees_data, monkeypatch): """Test get_split_value with upc and matching country for fee_territory.""" upc = 888812345678 country_mapping = {'US': 1, 'CA': 4} ows_territories.get_country_mapping = Mock(return_value=country_mapping) monkeypatch.setattr(distribution_fee, 'get_all_distribution_fees', Mock( return_value=all_distribution_fees_data)) results = distribution_fee.get_split_value(upc, 'CA') assert results == 7 @patch('api.models.distribution_fee.ows_territories') def test_get_split_value_match_none( ows_territories, all_distribution_fees_data, monkeypatch): """Test get_split_value with country but not matching any fee.""" upc = 888812345678 country_mapping = {'US': 1, 'CA': 4, 'AU': 7} ows_territories.get_country_mapping = Mock(return_value=country_mapping) monkeypatch.setattr(distribution_fee, 'get_all_distribution_fees', Mock( return_value=all_distribution_fees_data)) results = distribution_fee.get_split_value(upc, 'AU') # so it gets fee_regular assert results == 3.5 @patch('api.models.distribution_fee.ows_territories') def test_get_split_value_no_fee_data(ows_territories, monkeypatch): """Test get_split_value for upc with no split fee data.""" upc = 888812345678 country_mapping = {'US': 1, 'CA': 4, 'AU': 7} ows_territories.get_country_mapping = Mock(return_value=country_mapping) monkeypatch.setattr(distribution_fee, 'get_all_distribution_fees', Mock( return_value={ constants.DISTRIBUTION_FEE_TYPE_REGULAR: {}, constants.DISTRIBUTION_FEE_TYPE_DMS: {}, constants.DISTRIBUTION_FEE_TYPE_TERRITORY: {}})) results = distribution_fee.get_split_value(upc, 'US') # no data so 0 assert results == 0