from unittest import mock import pytest from app.connectors.db.repositories.account_to_fan_response_email_address_mapping import ( AccountToFanResponseEmailAddressMappingRepository, ) from app.types import EmailType @pytest.fixture def mock_db() -> mock.MagicMock: return mock.MagicMock() @pytest.fixture def repository( mock_db: mock.MagicMock, ) -> AccountToFanResponseEmailAddressMappingRepository: return AccountToFanResponseEmailAddressMappingRepository(db=mock_db) def test_get_forward_email_campaign( repository: AccountToFanResponseEmailAddressMappingRepository, mock_db: mock.MagicMock, ) -> None: mock_session = mock.MagicMock() mock_db.session = mock_session mock_session.execute.return_value.scalar_one_or_none.return_value = ( "artist@example.com" ) result = repository.get_forward_email_mapping( email_id="123", email_type=EmailType.CAMPAIGN ) assert result == "artist@example.com" mock_session.execute.assert_called_once() def test_get_forward_email_automated( repository: AccountToFanResponseEmailAddressMappingRepository, mock_db: mock.MagicMock, ) -> None: mock_session = mock.MagicMock() mock_db.session = mock_session mock_session.execute.return_value.scalar_one_or_none.return_value = ( "artist@example.com" ) result = repository.get_forward_email_mapping( email_id="456", email_type=EmailType.AUTOMATED ) assert result == "artist@example.com" mock_session.execute.assert_called_once() def test_get_forward_email_not_found( repository: AccountToFanResponseEmailAddressMappingRepository, mock_db: mock.MagicMock, ) -> None: mock_session = mock.MagicMock() mock_db.session = mock_session mock_session.execute.return_value.scalar_one_or_none.return_value = None result = repository.get_forward_email_mapping( email_id="999", email_type=EmailType.CAMPAIGN ) assert result is None def test_get_forward_email_unsupported_type( repository: AccountToFanResponseEmailAddressMappingRepository, mock_db: mock.MagicMock, ) -> None: with pytest.raises(ValueError, match="Unsupported email type"): repository.get_forward_email_mapping(email_id="123", email_type="UNKNOWN")