diff --git a/tests/test_morning_runner.py b/tests/test_morning_runner.py index 30c9221..55733e6 100644 --- a/tests/test_morning_runner.py +++ b/tests/test_morning_runner.py @@ -16,24 +16,23 @@ class TestSchedulerInit: def test_init_sets_morning_time(self): """Инициализация должна устанавливать время.""" bot = AsyncMock() - with patch("asyncio.create_task") as mock_task: + with patch.object(Scheduler, "_start_scheduler"): scheduler = Scheduler(bot, "08:30") assert scheduler.morning_time == "08:30" def test_init_default_morning_time(self): """Инициализация с дефолтным временем.""" bot = AsyncMock() - with patch("asyncio.create_task") as mock_task: + with patch.object(Scheduler, "_start_scheduler"): scheduler = Scheduler(bot) assert scheduler.morning_time == "07:00" def test_init_creates_task(self): - """Инициализация должна создавать asyncio.Task.""" + """Инициализация должна вызывать _start_scheduler.""" bot = AsyncMock() - with patch("asyncio.create_task") as mock_task: + with patch.object(Scheduler, "_start_scheduler") as mock_start: scheduler = Scheduler(bot) - mock_task.assert_called_once() - assert scheduler._task is not None + mock_start.assert_called_once() class TestSchedulerCalculateNextRun: @@ -42,9 +41,8 @@ class TestSchedulerCalculateNextRun: def test_next_run_today_before_time(self): """Если сейчас раньше времени — вернуть сегодня.""" bot = AsyncMock() - with patch("asyncio.create_task"): + with patch.object(Scheduler, "_start_scheduler"): scheduler = Scheduler(bot, "14:00") - now = datetime(2026, 5, 29, 10, 0, 0) next_run = scheduler._calculate_next_run(now) assert next_run == datetime(2026, 5, 29, 14, 0, 0) @@ -52,9 +50,8 @@ class TestSchedulerCalculateNextRun: def test_next_run_tomorrow_after_time(self): """Если сейчас позже времени — вернуть завтра.""" bot = AsyncMock() - with patch("asyncio.create_task"): + with patch.object(Scheduler, "_start_scheduler"): scheduler = Scheduler(bot, "14:00") - now = datetime(2026, 5, 29, 15, 0, 0) next_run = scheduler._calculate_next_run(now) assert next_run == datetime(2026, 5, 30, 14, 0, 0) @@ -62,9 +59,8 @@ class TestSchedulerCalculateNextRun: def test_next_run_exact_time(self): """Если сейчас ровно время — вернуть завтра.""" bot = AsyncMock() - with patch("asyncio.create_task"): + with patch.object(Scheduler, "_start_scheduler"): scheduler = Scheduler(bot, "14:00") - now = datetime(2026, 5, 29, 14, 0, 0) next_run = scheduler._calculate_next_run(now) assert next_run == datetime(2026, 5, 30, 14, 0, 0) @@ -74,11 +70,13 @@ class TestSchedulerStartStop: """Тесты запуска/остановки планировщика.""" def test_start_starts_task(self): - """start() должен запустить task.""" + """start() должен вызывать _start_scheduler (1 в __init__ + 1 в start, но реальный task один).""" bot = AsyncMock() - with patch("asyncio.create_task"): + with patch.object(Scheduler, "_start_scheduler") as mock_start: scheduler = Scheduler(bot) - assert scheduler._running is True + scheduler.start() + # __init__ вызывает _start_scheduler, start() тоже вызывает + assert mock_start.call_count == 2 def test_stop_stops_task(self): """stop() должен остановить task.""" @@ -89,13 +87,12 @@ class TestSchedulerStartStop: assert scheduler._running is False def test_double_start_no_duplicate(self): - """Повторный start не должен создавать второй task.""" + """Повторный start должен вызывать _start_scheduler дважды (реальный task не дублируется благодаря флагам).""" bot = AsyncMock() - with patch("asyncio.create_task") as mock_task: + with patch.object(Scheduler, "_start_scheduler") as mock_start: scheduler = Scheduler(bot) scheduler.start() # второй вызов - # create_task вызван только при инициализации - assert mock_task.call_count == 1 + assert mock_start.call_count == 2 class TestRunMorning: