"""Tests for Handlers.""" from oto import response from collections import namedtuple from unittest.mock import call from sales_goals import features from sales_goals.logic import marketing_highlights project_id = 1 territory_id = 1 def mock_good_digital_driver_response(mocker): """Mock a good digital driver response.""" mocker.patch.object( marketing_highlights, 'fetch_digital_marketing_drivers', return_value=[ ( DigitalDriver('digital value', 1), DigitalStore(1, 'Apple', 1), ) ]) def test_create_project_marketing_highlights( mocker, feature_engine): """Test create project marketing highlights logic.""" mocker.patch.object( marketing_highlights, 'upsert_global_marketing_driver', return_value=None) mocker.patch.object( marketing_highlights, 'upsert_global_sync_driver', return_value=None) mocker.patch.object( marketing_highlights, 'upsert_marketing_driver', return_value=None) result = marketing_highlights.create_project_marketing_highlights( project_id, [ { 'marketing_highlight': 'hi', 'sync_highlight': 'hi 2', 'country_id': None }, { 'marketing_highlight': 'hiya', 'sync_highlight': 'hi 2', 'country_id': 1 }, { 'marketing_highlight': 'hiyayo', 'sync_highlight': 'hi 2', 'country_id': 2 }, { 'marketing_highlight': 'Konnichiwa', 'country_id': 9, 'slogan': 'Banzai', 'sync_highlight': 'hi 2' } ] ) marketing_highlights.\ upsert_global_marketing_driver.assert_called_once_with( project_id, 'hi' ) marketing_highlights.\ upsert_global_sync_driver.assert_called_once_with( project_id, 'hi 2' ) calls = [ call(project_id, 1, 'hiya', None), call(project_id, 2, 'hiyayo', None), call(project_id, 9, 'Konnichiwa', 'Banzai') ] marketing_highlights.upsert_marketing_driver.assert_has_calls(calls) assert result.status == 201 def test_create_project_marketing_highlights_with_decoded_strings( mocker, feature_engine): """Test create project marketing highlights logic.""" feature_engine.force_flag( features.ENCODED_MARKETING_HIGHLIGHT, True) mocker.patch.object( marketing_highlights, 'upsert_global_marketing_driver', return_value=None) mocker.patch.object( marketing_highlights, 'upsert_global_sync_driver', return_value=None) mocker.patch.object( marketing_highlights, 'upsert_marketing_driver', return_value=None) result = marketing_highlights.create_project_marketing_highlights( project_id, [ { 'marketing_highlight': 'aGk=', 'sync_highlight': 'hi 2', 'country_id': None }, { 'marketing_highlight': 'aGl5YQ==', 'sync_highlight': 'hi 2', 'country_id': 1 }, { 'marketing_highlight': 'aGl5YXlv', 'sync_highlight': 'hi 2', 'country_id': 2 }, { 'marketing_highlight': 'S29ubmljaGl3YQ==', 'country_id': 9, 'slogan': 'Banzai', 'sync_highlight': 'hi 2' } ] ) marketing_highlights.\ upsert_global_marketing_driver.assert_called_once_with( project_id, 'hi' ) marketing_highlights.\ upsert_global_sync_driver.assert_called_once_with( project_id, 'hi 2' ) calls = [ call(project_id, 1, 'hiya', None), call(project_id, 2, 'hiyayo', None), call(project_id, 9, 'Konnichiwa', 'Banzai') ] marketing_highlights.upsert_marketing_driver.assert_has_calls(calls) assert result.status == 201 def test_upsert_project_marketing_highlights( mocker, feature_engine): """Test upsert project marketing highlights logic.""" data = [ { 'marketing_highlight': 'hi', 'sync_highlight': 'hi 2', 'country_id': None }, { 'marketing_highlight': 'hiya', 'sync_highlight': 'hi 2', 'country_id': 1 }, { 'marketing_highlight': 'hiyayo', 'sync_highlight': 'hi 2', 'country_id': 2 }, { 'marketing_highlight': 'Konnichiwa', 'country_id': 9, 'slogan': 'Banzai', 'sync_highlight': 'hi 2' } ] mocker.patch.object( marketing_highlights, 'get_project_marketing_highlights', return_value=response.Response([ { 'marketing_highlight': 'text 7', 'country_id': 7, }, { 'marketing_highlight': 'text 8', 'country_id': 8, 'slogan': 'Slogan 8', 'sync_highlight': 'hi 8' }, { 'marketing_highlight': 'Konnichiwa', 'country_id': 9, 'slogan': 'Banzai', 'sync_highlight': 'hi 2' } ]) ) mocker.patch.object( marketing_highlights, 'bulk_delete_marketing_drivers', return_value=None) mocker.patch.object( marketing_highlights, 'create_project_marketing_highlights', return_value=data) result = marketing_highlights.upsert_project_marketing_highlights( project_id, data ) marketing_highlights.\ get_project_marketing_highlights.assert_called_once_with(project_id) marketing_highlights.\ bulk_delete_marketing_drivers.assert_called_once_with( project_id, [7, 8] ) marketing_highlights.\ create_project_marketing_highlights.assert_called_once_with( project_id, data ) assert result == data def test_get_project_marketing_highlights_no_data( mocker): """Test get project marketing highlights with no data.""" mocker.patch.object( marketing_highlights, 'fetch_global_marketing_driver', return_value=None) mocker.patch.object( marketing_highlights, 'fetch_marketing_drivers', return_value=[]) mocker.patch.object( marketing_highlights, 'fetch_digital_marketing_drivers', return_value=[]) result = marketing_highlights.get_project_marketing_highlights( project_id, ) assert result.status == 200 assert result.message == [{ 'marketing_highlight': '', 'sync_highlight': '', 'country_id': None, 'country_name': None }] GlobalDriver = namedtuple('GlobalDriver', ['description']) TerritoryDriver = namedtuple( 'TerritoryDriver', ['value', 'country_id', 'country_name', 'slogan']) DigitalDriver = namedtuple( 'DigitalDriver', ['value', 'store_id']) DigitalStore = namedtuple( 'DigitalStore', ['id', 'store', 'customer_master_master_id']) def test_get_project_marketing_highlights_with_data( mocker): """Test get project marketing highlights.""" mocker.patch.object( marketing_highlights, 'fetch_global_marketing_driver', return_value=GlobalDriver('yummy')) mocker.patch.object( marketing_highlights, 'fetch_marketing_drivers', return_value=[ TerritoryDriver('a', 1, 'US', None), TerritoryDriver('b', 2, 'CA', None), TerritoryDriver('c', 9, 'JP', 'Banzai'), ]) mock_good_digital_driver_response(mocker) result = marketing_highlights.get_project_marketing_highlights( project_id, ) assert result.status == 200 assert result.message == [ { 'marketing_highlight': 'a', 'country_id': 1, 'country_name': 'US', 'slogan': None }, { 'marketing_highlight': 'b', 'country_id': 2, 'country_name': 'CA', 'slogan': None }, { 'marketing_highlight': 'c', 'country_id': 9, 'country_name': 'JP', 'slogan': 'Banzai' }, { 'marketing_highlight': 'yummy', 'sync_highlight': 'yummy', 'country_id': None, 'country_name': None }, { 'marketing_highlight': 'digital value', 'store_id': 1, 'store_name': 'apple', 'customer_master_master_id': 1 }, ] def test_delete_project_marketing_highlight( mocker): """Test delete project marketing highlights.""" mocker.patch.object( marketing_highlights, 'delete_marketing_driver', return_value=True) result = marketing_highlights.delete_project_marketing_highlight( project_id, territory_id, ) assert result.status == 200 assert result.message == {'ok': True} def test_delete_project_marketing_highlight_failure( mocker): """Test delete project marketing highlights failuger.""" mocker.patch.object( marketing_highlights, 'delete_marketing_driver', return_value=False) result = marketing_highlights.delete_project_marketing_highlight( project_id, territory_id, ) assert result.status == 200 assert result.message == {'ok': False}