Files
duty-teller/tests/test_handlers_errors.py
Nikolay Tatarinov aa89494bd5
All checks were successful
CI / lint-and-test (push) Successful in 22s
feat: enhance calendar ICS generation with event type filtering
- Added support for filtering calendar events by type in the ICS generation API endpoint, allowing users to specify whether to include only duty shifts or all event types (duty, unavailable, vacation).
- Updated the `get_duties_for_user` function to accept an optional `event_types` parameter, enabling more flexible data retrieval based on user preferences.
- Enhanced unit tests to cover the new event type filtering functionality, ensuring correct behavior and reliability of the ICS generation process.
2026-02-20 17:47:52 +03:00

55 lines
2.0 KiB
Python

"""Tests for duty_teller.handlers.errors (error_handler)."""
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from duty_teller.handlers.errors import error_handler
@pytest.mark.asyncio
async def test_error_handler_replies_with_generic_message():
"""error_handler: when update has effective_message, reply_text with errors.generic."""
# Handler checks isinstance(update, Update); patch Update so our mock passes.
class FakeUpdate:
pass
update = FakeUpdate()
update.effective_message = MagicMock()
update.effective_message.reply_text = AsyncMock()
update.effective_user = MagicMock()
context = MagicMock()
context.error = Exception("test error")
with patch("duty_teller.handlers.errors.Update", FakeUpdate):
with patch("duty_teller.handlers.errors.get_lang", return_value="en"):
with patch("duty_teller.handlers.errors.t") as mock_t:
mock_t.return_value = "An error occurred."
await error_handler(update, context)
update.effective_message.reply_text.assert_called_once_with("An error occurred.")
mock_t.assert_called_with("en", "errors.generic")
@pytest.mark.asyncio
async def test_error_handler_no_effective_message_does_not_send():
"""error_handler: when update has no effective_message, does not call reply_text."""
update = MagicMock()
update.effective_message = None
update.effective_user = MagicMock()
context = MagicMock()
context.error = Exception("test")
with patch("duty_teller.handlers.errors.get_lang", return_value="en"):
with patch("duty_teller.handlers.errors.t") as mock_t:
await error_handler(update, context)
mock_t.assert_not_called()
@pytest.mark.asyncio
async def test_error_handler_update_none_does_not_crash():
"""error_handler: when update is None, does not crash (no reply)."""
context = MagicMock()
context.error = Exception("test")
await error_handler(None, context)