"""Test BlacklistReasons Model.""" from unittest.mock import MagicMock from unittest.mock import patch from sqlalchemy.exc import SQLAlchemyError from blacklist_manager.models import blacklist_reasons from tests.unit.utils import db def test_blacklist_reasons_success(db_fixture): """Test successful retrieval of blacklist reasons.""" db.insert_mock_records() result = blacklist_reasons.get_blacklist_reasons() assert result.message['items'][0]['reason'] == 'Valid Reason' @patch('blacklist_manager.models.blacklist_reasons.capture_exception') @patch('blacklist_manager.connectors.mysql.ar_database_session') def test_get_blacklist_reasons_failure(ar_db_session, mock_sentry): """Test fatal db error while retrieval of blacklist reasons.""" session = MagicMock() session.query = MagicMock(side_effect=SQLAlchemyError()) ar_db_session.return_value = session result = blacklist_reasons.get_blacklist_reasons() assert result.status == 500 assert mock_sentry.called def test_get_blacklist_reasons_by_id_success(db_fixture): """Test successful retrieval of blacklist reasons.""" db.insert_mock_records() with db.ar_db_session() as session: result = blacklist_reasons.get_blacklist_reasons_by_id([3], session) assert result.message == { 3: { 'reason': 'Valid Reason', 'alert': 'Alert of reason', 'contact': 'schauhan@theorchard.com' } } @patch('blacklist_manager.models.blacklist_reasons.capture_exception') @patch('blacklist_manager.connectors.mysql.ar_database_session') def test_get_blacklist_reasons_by_id_failure(ar_db_session, mock_sentry): """Test fatal db error while retrieval of blacklist reasons.""" session = MagicMock() session.query = MagicMock(side_effect=SQLAlchemyError()) ar_db_session.return_value = session result = blacklist_reasons.get_blacklist_reasons() assert result.status == 500 assert mock_sentry.called def test_create_blacklist_reason_success( db_fixture, create_blacklist_reason_response, blacklist_reason_data): """Test successful creation of blacklist reason.""" result = blacklist_reasons.create_blacklist_reason(blacklist_reason_data) assert result.message == create_blacklist_reason_response assert result.status == 201 @patch('blacklist_manager.models.blacklist_reasons.capture_exception') @patch('blacklist_manager.connectors.mysql.ar_database_session', side_effect=SQLAlchemyError()) def test_create_blacklist_reason_failure( ar_db_session, mock_sentry, blacklist_reason_data, monkeypatch): """Test fatal db error while creating a blacklist reason.""" monkeypatch.setattr( ar_db_session, 'add', value=MagicMock(return_value='')) result = blacklist_reasons.create_blacklist_reason(blacklist_reason_data) assert result.status == 500 assert mock_sentry.called def test_update_blacklist_reason_success( db_fixture, blacklist_reason_response, blacklist_update_reason_data): """Test successful update of blacklist reason.""" blacklist_id = 3 db.insert_mock_records() result = blacklist_reasons.update_blacklist_reason( blacklist_id, blacklist_update_reason_data) assert result.message == blacklist_reason_response assert result.status == 200 @patch('blacklist_manager.models.blacklist_reasons.capture_exception') @patch('blacklist_manager.connectors.mysql.ar_database_session', side_effect=SQLAlchemyError()) def test_update_blacklist_reason_failure( ar_db_session, mock_sentry, blacklist_update_reason_data): """Test fatal db error while updating a blacklist reason.""" blacklist_id = 3 result = blacklist_reasons.update_blacklist_reason( blacklist_id, blacklist_update_reason_data) assert result.status == 500 assert mock_sentry.called def test_update_blacklist_reason_not_found_reason_id_error( db_fixture, blacklist_update_reason_data): """Check that update blacklist reason works when it is missed.""" blacklist_id = 2000 db.insert_mock_records() response = blacklist_reasons.update_blacklist_reason( blacklist_id, blacklist_update_reason_data) assert response.status == 404