"""Test file for mkt_priority_project model.""" from unittest.mock import MagicMock from oto import response import pytest from project_manager.connector import mysql from project_manager.constant import error_const from project_manager.models import mkt_priority, project from tests.utils import db @pytest.fixture def mkt_priority_data(): """Data used to create a mkt_priority_project.""" return { 'mkt_id': 1, 'project_id': 1, 'priority': 'b', 'country_id': 1} def test_to_dict_properties(mkt_priority_data): """Test that the expected properties are returned.""" new_mkt_priority = mkt_priority.MktPriority(**mkt_priority_data) assert new_mkt_priority.to_dict() == { 'id': new_mkt_priority.mkt_id, 'priority': new_mkt_priority.priority, 'project_id': new_mkt_priority.project_id, 'territory_id': new_mkt_priority.country_id} def test_get_mkt_priority_project(db_fixture): """Test that the marketing priority is returned for given project_id.""" project_id = 1 mkt_priority_data = [{ 'id': 1, 'project_id': project_id, 'priority': 'b', 'territory_id': 1}] result = mkt_priority.get_mkt_priority_by_project_id(project_id) assert result.status == 200 assert result.message == mkt_priority_data def test_get_bulk_mkt_priorities_project(db_fixture): """Test that marketing priorities are returned for given project_ids.""" project_ids = [1, 2, 3] mkt_priority_data = [ { 'id': 1, 'project_id': 1, 'priority': 'b', 'territory_id': 1 }, { 'id': 2, 'project_id': 2, 'priority': 'a', 'territory_id': 3 }, { 'id': 3, 'project_id': 3, 'priority': 'b', 'territory_id': 5 }, ] result = mkt_priority.get_bulk_mkt_priority_by_project_ids(project_ids) assert result.status == 200 assert result.message == mkt_priority_data def test_set_mkt_priority_by_project_id_update(db_fixture, monkeypatch): """Test that the marketing priority is updated for existing object.""" country_id = 1 priority = 'b' project_id = 1 mkt_priority_data = { 'id': 1, 'priority': priority, 'project_id': project_id, 'country_id': country_id } monkeypatch.setattr( mkt_priority, 'update_mkt_priority', MagicMock(return_value=response.Response(message=mkt_priority_data))) result = mkt_priority.set_mkt_priority_by_project_id(project_id, country_id, priority, 1) assert result.status == 200 assert result.message == mkt_priority_data def test_set_mkt_priority_by_project_id_create(db_fixture, monkeypatch): """Test that the marketing priority is created for given project_id.""" country_id = 2 priority = 'b' project_id = 1 mkt_priority_data = { 'id': 2, 'priority': priority, 'project_id': project_id, 'country_id': country_id} monkeypatch.setattr( mkt_priority, 'create_mkt_priority', MagicMock(return_value=response.Response(message=mkt_priority_data))) result = mkt_priority.set_mkt_priority_by_project_id(project_id, country_id, priority, 1) assert result.status == 200 assert result.message == mkt_priority_data def test_update_mkt_priority(db_fixture): """Test that the marketing priority is updated for given project_id.""" project_id = 1 country_id = 1 priority = 'b' with mysql.pm_session_scope() as session: mkt_priority_obj = session.query(mkt_priority.MktPriority).filter_by( project_id=project_id, country_id=country_id, ).first() result = mkt_priority.update_mkt_priority(session, mkt_priority_obj, priority, 1) assert result.status == 200 assert result.message['priority'] == 'b' def test_create_mkt_priority(db_fixture, monkeypatch): """Test that the marketing priority is created for given project_id.""" priority = 'a' country_id = 5 project_id = 2 monkeypatch.setattr( project, 'get_project_instance', MagicMock(return_value=response.Response(message={'project_id': 1}))) with mysql.pm_session_scope() as session: priority_obj = mkt_priority.MktPriority( priority=priority, country_id=country_id, project_id=project_id, ) session.add(priority_obj) session.flush() result = mkt_priority.create_mkt_priority(session, project_id, country_id, priority, 1) assert result.status == 200 def test_get_mkt_priority_by_project_id_when_db_error(db_exception, mocker): """Test that the db exception is handled.""" mock_session = db.mock_db_session(mocker) mock_session.query.side_effect = db_exception result = mkt_priority.get_mkt_priority_by_project_id(1) assert result.status == 500 def test_create_mkt_priority_project_not_found(db_fixture, monkeypatch): """Test that the marketing priority returns not found for given project_id.""" priority = 'a' country_id = 5 project_id = 2 monkeypatch.setattr( project, 'get_project_instance', MagicMock(return_value=response.create_error_response( code=error_const.ERROR_CODE_NOT_FOUND, message='no project id', status=404 ))) with mysql.pm_session_scope() as session: result = mkt_priority.create_mkt_priority(session, project_id, country_id, priority, 1) assert result.status == 404 def test_delete_mkt_priority_by_project_id(db_fixture, monkeypatch): """Test that the marketing priority is deleted for given project_id.""" project_id = 1 country_id = 1 with mysql.pm_session_scope() as session: existing_mkt_priority_obj = session.query(mkt_priority.MktPriority).filter( mkt_priority.MktPriority.project_id == project_id, mkt_priority.MktPriority.country_id == country_id, ).first() assert existing_mkt_priority_obj delete_result = mkt_priority.delete_mkt_priority_by_project_id(project_id, country_id) assert delete_result.status == 200 def test_delete_mkt_priority_by_project_id_not_found(db_fixture, monkeypatch): """Test that the marketing priority is not found for given project_id.""" project_id = 6 projection_id = 1 delete_result = mkt_priority.delete_mkt_priority_by_project_id(project_id, projection_id) assert delete_result.status == 404 def test_bulk_delete_mkt_priority_by_project_id(db_fixture, monkeypatch): """Test that all marketing priorities are deleted for given project.""" project_id = 1 with mysql.pm_session_scope() as session: existing_mkt_priority_obj = session.query(mkt_priority.MktPriority).filter( mkt_priority.MktPriority.project_id == project_id ).first() assert existing_mkt_priority_obj delete_result = mkt_priority.bulk_delete_mkt_priority_for_project(project_id) assert delete_result.status == 200