"""Test snowflake_products model.""" from unittest.mock import patch import pytest from ows_product_physical.connector import snowflake from ows_product_physical.models import snowflake_products as model def test_get_eligible_product_for_new_delivery(): """Test get_eligible_product_for_new_delivery.""" store_id = 1705 expected_db = [ [(2136606,), (2181632,), (2175230,), (2175379,), (2196244,)], [(5,)] ] expected_result = [2136606, 2181632, 2175230, 2175379, 2196244] with patch.object(snowflake, 'fetchall', side_effect=expected_db): actual_result = model.get_products_for_new_delivery( store_id, ('67', '68', '69'), 10, 0, 'release_id', 'ASC', ) assert actual_result assert actual_result.message == { 'products': expected_result, 'total': len(expected_result), } def test_get_products_for_new_delivery_with_account(): """Test get_eligible_product_for_new_delivery.""" store_id = 1705 expected_db = [ [(2136606,), (2196244,)], [(2,)] ] expected_result = [2136606, 2196244] with patch.object(snowflake, 'fetchall', side_effect=expected_db): actual_result = model.get_products_for_new_delivery( ('67', '68', '69'), store_id, 10, 0, 'release_id', 'ASC', 15063 ) assert actual_result assert actual_result.message == { 'products': expected_result, 'total': len(expected_result), } @pytest.mark.parametrize('valid_payload', [ { 'distribution_format_ids': ('67', '68', '69'), 'store_id': 1705, 'limit': 10, 'offset': 0, 'order_by': 'release_id', 'order_dir': 'asc', 'account': None, }, { 'distribution_format_ids': ('67', '68', '69'), 'store_id': 1605, 'limit': 50, 'offset': 50, 'order_by': 'release_id', 'order_dir': 'asc', 'account': None, }, { 'distribution_format_ids': ('67', '68', '69'), 'store_id': 685, 'limit': 50, 'offset': 0, 'order_by': 'sale_start_date', 'order_dir': 'desc', 'account': 15063, }, ]) def test_get_deleted_products_for_takedown(valid_payload): """Test get_deleted_products_for_takedown.""" expected_db = [ [(2136606,), (2196244,)], [(2,)] ] expected_result = [2136606, 2196244] with patch.object( snowflake, 'fetchall', side_effect=expected_db ) as mock_fetch: result = model.get_deleted_products_for_takedown(**valid_payload) assert result assert result.message == { 'products': expected_result, 'total': len(expected_result), } assert mock_fetch.call_count == 2 calls = mock_fetch.call_args_list assert calls[0][0][1] == { 'store_id': valid_payload['store_id'], 'distribution_format_ids': valid_payload['distribution_format_ids'], 'limit': valid_payload['limit'], 'offset': valid_payload['offset'], 'account': valid_payload['account'] } @pytest.mark.parametrize('valid_payload', [ { 'distribution_format_ids': ('67', '68', '69'), 'store_id': 1705, 'limit': 10, 'offset': 0, 'order_by': 'release_id', 'order_dir': 'asc', 'account': None, }, { 'distribution_format_ids': ('67', '68', '69'), 'store_id': 1605, 'limit': 50, 'offset': 50, 'order_by': 'release_id', 'order_dir': 'asc', 'account': None, }, { 'distribution_format_ids': ('67', '68', '69'), 'store_id': 685, 'limit': 50, 'offset': 0, 'order_by': 'sale_start_date', 'order_dir': 'desc', 'account': 15063, }, ]) def test_get_products_eligible_for_update_delivery(valid_payload): """Test get_products_eligible_for_update_delivery.""" expected_db = [ [(2136606,), (2196244,)], [(2,)] ] expected_result = [2136606, 2196244] with patch.object( snowflake, 'fetchall', side_effect=expected_db ) as mock_fetch: result = model.get_products_eligible_for_update_delivery( **valid_payload) assert result assert result.message == { 'products': expected_result, 'total': len(expected_result), } assert mock_fetch.call_count == 2 calls = mock_fetch.call_args_list assert calls[0][0][1] == { 'store_id': valid_payload['store_id'], 'distribution_format_ids': valid_payload['distribution_format_ids'], 'limit': valid_payload['limit'], 'offset': valid_payload['offset'], 'account': valid_payload['account'] }