"""Testing the USPhysicalProductViewCoop.""" from collections import OrderedDict from decimal import Decimal import pytest from reporting.constants.field import LIMIT from reporting.models.us_physical_product_view import ( pricing_logic_to_override_custom_price_code, ) from reporting.models.us_physical_product_view_coop import ( USPhysicalProductViewCoop, ) def default_params(): """Get the default params.""" return { 'param_artist': [], 'param_inventory_data': True, 'param_product_name': [], 'param_product_status': '', 'param_product_type': [], 'param_sales_data': True, 'param_release_date': '', 'param_sub_label': [], 'param_vendor_id': [3], } def test_standard_query(): """Test the standard query.""" results = USPhysicalProductViewCoop.all(default_params()) expected = OrderedDict() expected['local_product_cd'] = '709425' expected['Product Name'] = 'Product Name3' expected['Artist'] = 'Artist3' expected['Label Name'] = 'Label3' expected['Sub Label'] = 'SubLabel3' expected['Genre'] = 'Genre3' expected['Sub Genre'] = 'SubGenre3' expected['Product Code'] = 'ProductCode3' expected['UPC/EAN'] = '3' expected['Release Date'] = '2016-01-03' expected['Product Type'] = 'CD3' expected['Format'] = 'Album' expected['Units Per Set'] = 1 expected['Display Configuration'] = '1 x CD Album' expected['Box Lot'] = 30 expected['Exclusive'] = 'N' expected['Exclusive For'] = 'For me' expected['Orchard Price'] = '11.20' expected['Wholesale Price'] = 3 expected['On Hand'] = 0 expected['Available'] = 0 expected['Purchase Orders'] = 0 expected['Potential'] = 0 expected['Returns In Process'] = 0 expected['On Hold'] = 0 expected['Open Scrap'] = 1 expected['Product Status'] = 'Active Catalog3' expected['Returnability'] = 'Y' expected['Returns Disposition'] = 'Scrap' expected['12M Overstock'] = 2 expected['24M Overstock'] = 3 expected['Open Orders'] = 1 expected['Backorders'] = 1 expected['Day1S#'] = 1 expected['Day1R#'] = 1 expected['Day1S$'] = 1 expected['Day1R$'] = 1 expected['5DayS#'] = 1 expected['5DayR#'] = 1 expected['5DayS$'] = 1 expected['5DayR$'] = 1 expected['MTDS#'] = 1 expected['MTDR#'] = 1 expected['MTDS$'] = 1 expected['MTDR$'] = 1 expected['3MS#'] = 1 expected['3MR#'] = 1 expected['3MS$'] = 1 expected['3MR$'] = 1 expected['12MS#'] = 1 expected['12MR#'] = 1 expected['12MS$'] = 1 expected['12MR$'] = 1 expected['24MS#'] = 1 expected['24MR#'] = 1 expected['24MS$'] = 1 expected['24MR$'] = 1 expected['CYTDS#'] = 1 expected['CYTDR#'] = 1 expected['CYTDS$'] = 1 expected['CYTDR$'] = 1 expected['RTDS#'] = 1 expected['RTDR#'] = 1 expected['RTDS$'] = 1 expected['RTDR$'] = 1 expected['Total RTD Co-Op $'] = Decimal('6.00') expected['Closed Co-Op $'] = 3 expected['Open Co-Op $'] = Decimal('3.00') content = results.message['content'] row = next(r for r in content if r['UPC/EAN'] == '3') assert row == expected assert len(content) == 2 def test_orchard_pricing_logic(): """Test orchard pricing logic.""" data = {'Orchard Price Code': 'OPC', 'Orchard Price': 'OP'} pricing_logic_to_override_custom_price_code(data) assert data == {'Orchard Price': 'OPC'} def test_orchard_pricing_logic_custom(): """Test orchard pricing logic has Custom in it.""" data = {'Orchard Price Code': 'Custom', 'Orchard Price': 'OP'} pricing_logic_to_override_custom_price_code(data) assert data == {'Orchard Price': 'OP'} def test_limit(): """Test limit.""" params = default_params() params[LIMIT] = 1 results = USPhysicalProductViewCoop.all(params) assert len(results.message['content']) == 1 @pytest.mark.parametrize( 'param,column_name,value', [ ('param_artist', 'Artist', 'Artist3'), ('param_product_status', 'Product Status', 'Active Catalog3'), ('param_product_type', 'Product Type', 'CD3'), ('param_product_name', 'Product Name', 'Product Name3'), ('param_sub_label', 'Sub Label', 'SubLabel3'), ('param_release_date', 'Release Date', '2016-01-03'), ], ) def test_filters(param, column_name, value): """Test filters.""" params = default_params() params[param] = [value] results = USPhysicalProductViewCoop.all(params) assert results.message['content'][0][column_name] == value assert len(results.message['content']) == 1 def test_vendor_id(): """Test vendor id.""" params = default_params() params['param_vendor_id'] = ['2'] results = USPhysicalProductViewCoop.all(params) assert results.message['content'][0]['Artist'] == 'Artist3' assert len(results.message['content']) == 1 def test_subaccount_id(): """Test vendor id.""" params = default_params() params['param_vendor_id'] = [3] params['param_subacct_id'] = [2] results = USPhysicalProductViewCoop.all(params) assert results.message['content'][0]['Artist'] == 'Artist4' assert len(results.message['content']) == 1 def test_get_filters(): """Test getting the filter values.""" results = USPhysicalProductViewCoop.filter(1, None) assert results.message == { 'artist': ['Artist1', 'Artist2'], 'product_name': ['Product Name1', 'Product Name2'], 'product_status': ['Active Catalog1', 'Active Catalog2'], 'product_type': ['CD1', 'CD2'], 'sub_label': ['SubLabel1', 'SubLabel2'], 'product_code': ['ProductCode1', 'ProductCode2'], 'upc_ean': ['1', '2'], } def test_get_filters_with_subaccount(): """Test getting the filter values with a sub-account.""" vendor_id = 1 subaccount_id = 1 results = USPhysicalProductViewCoop.filter(vendor_id, subaccount_id) assert results.message == { 'artist': ['Artist1'], 'product_name': ['Product Name1'], 'product_status': ['Active Catalog1'], 'product_type': ['CD1'], 'sub_label': ['SubLabel1'], 'product_code': ['ProductCode1'], 'upc_ean': ['1'], }