"""Unit tests for the marketing priority model.""" from unittest import mock from oto import response from product_digital.connectors import mysql from product_digital.models import mkt_priority from product_digital.utils import error_handling from tests.factories import release as release_factory from tests.testutils import db @db.test_schema def test_get_mkt_priority_by_release_id_success(): """Test to get mkt priority by product id.""" expected_data = [ { 'id': 1, 'upc': 829410910552, 'priority': 'a', 'country_id': 0, 'release_id': 92949 }, { 'id': 2, 'upc': 829410750950, 'priority': 'a', 'country_id': 0, 'release_id': 92949 } ] db.insert_mkt_priority_data() response = mkt_priority.get_mkt_priority_by_release_id('92949') assert response.message == expected_data @db.test_schema def test_get_mkt_priority_by_release_id_success_not_found(): """Test that an existing product id is not found.""" response = mkt_priority.get_mkt_priority_by_release_id('12') expected_data = [] assert response.message == expected_data def test_get_mkt_priority_by_release_id_failed(db_exception, mocker): """Check mkt priority by product id failed (exception).""" mock_session = db.mock_db_session(mocker) mock_session.query.side_effect = db_exception mocker.patch.object(error_handling, 'log_db_exception', mock.Mock()) result = mkt_priority.get_mkt_priority_by_release_id('123') assert result.status == 500 @db.test_schema def test_get_bulk_mkt_priority_by_release_ids_success(): """Test to get bulk mkt priority by product ids.""" release_ids = [92949, 92950, 92951] expected_data = [ { 'id': 1, 'upc': 829410910552, 'priority': 'a', 'country_id': 0, 'release_id': 92949 }, { 'id': 2, 'upc': 829410750950, 'priority': 'a', 'country_id': 0, 'release_id': 92949 }, { 'id': 3, 'upc': 829410910553, 'priority': 'b', 'country_id': 1, 'release_id': 92950 }, { 'id': 4, 'upc': 829410750954, 'priority': 'a', 'country_id': 2, 'release_id': 92951 } ] db.insert_mkt_priority_data() response = mkt_priority.get_bulk_mkt_priority_by_release_ids(release_ids) assert response.message == expected_data @db.test_schema def test_get_bulk_mkt_priority_by_release_ids_success_not_found(): """Test that an existing product id is not found.""" release_ids = [123, 456, 789] expected_data = [] db.insert_mkt_priority_data() response = mkt_priority.get_bulk_mkt_priority_by_release_ids(release_ids) assert response.message == expected_data def test_get_bulk_mkt_priority_by_release_ids_failed(db_exception, mocker): """Check mkt priority by product id failed (exception).""" release_ids = [123, 456, 789] mock_session = db.mock_db_session(mocker) mock_session.query.side_effect = db_exception mocker.patch.object(error_handling, 'log_db_exception', mock.Mock()) result = mkt_priority.get_bulk_mkt_priority_by_release_ids(release_ids) assert result.status == 500 @db.test_schema def test_set_mkt_priority_by_release_id_insert(product_id): """Test to set mkt priority by product id.""" existing_release = release_factory.ReleaseFactory.build( release_id=product_id) db.seed_models(existing_release) response = mkt_priority.set_mkt_priority_by_release_id(product_id, '1', 'a', 1) assert response.message == { 'country_id': '1', 'id': None, 'priority': 'a', 'release_id': '12345', 'upc': existing_release.upc } @db.test_schema def test_set_mkt_priority_by_release_id_update(product_id): """Test to update mkt priority by product id.""" existing_release = release_factory.ReleaseFactory.build( release_id=product_id) db.seed_models(existing_release) mkt_priority.set_mkt_priority_by_release_id(product_id, '1', 'a', 1) response = mkt_priority.set_mkt_priority_by_release_id(product_id, '1', 'b', 2) assert response.message['country_id'] == 1 assert response.message['priority'] == 'b' assert response.message['release_id'] == 12345 assert response.message['upc'] == existing_release.upc @db.test_schema def test_set_mkt_priority_by_release_id_success_not_found(): """Test that an existing product id is not found.""" response = mkt_priority.set_mkt_priority_by_release_id('12', '1', 'a', 1) assert response.status == 500 @db.test_schema def test_delete_mkt_priority_by_release_id(product_id): """Test to update mkt priority by product id.""" existing_release = release_factory.ReleaseFactory.build( release_id=product_id) db.seed_models(existing_release) country_id = 1 mkt_priority.set_mkt_priority_by_release_id(product_id, country_id, 'a', 1) response = mkt_priority.delete_mkt_priority_by_release_id(product_id, country_id) assert response.status == 200 with mysql.db_session() as session: assert len(session.query(mkt_priority.MktPriority).all()) == 0 @db.test_schema def test_delete_mkt_priority_by_release_id_no_id(): """Test to delete mkt priority by product id.""" response = mkt_priority.delete_mkt_priority_by_release_id(100000, 60003) assert response.status == 404 @db.test_schema def test_bulk_delete_mkt_priority_by_release_id(product_id): """Test to bulk delete mkt priority by product id.""" existing_release = release_factory.ReleaseFactory.build( release_id=product_id) db.seed_models(existing_release) country_id = 1 mkt_priority.set_mkt_priority_by_release_id(product_id, country_id, 'a', 1) with mysql.db_session() as session: mkt_priority.bulk_delete_mkt_priority_by_release_id(product_id, session) result = session.query(mkt_priority.MktPriority).all() assert result == [] @db.test_schema def test_delete_mkt_priority_for_product(mocker, product_id): """Test to bulk delete mkt priority by product id.""" mocker.patch.object( mkt_priority, 'bulk_delete_mkt_priority_by_release_id', return_value=response.Response() ) result = mkt_priority.delete_mkt_priority_for_product(product_id) assert result.status == 200