"""Tests for the shared bootstrap decorators.""" from unittest import TestCase from unittest.mock import MagicMock from unittest.mock import patch from feed_ingestion.tasks import bootstrap FEED = 'youtube_asset_conflict' class TestBlockNonSequentialDecorator(TestCase): """Tests for block_non_sequential_then_reset_on_reload.""" def _decorated(self): """Return a trivial bootstrap-like func wrapped by the decorator.""" @bootstrap.block_non_sequential_then_reset_on_reload(FEED) def fake_bootstrap(activity, date, dw_config=None, stop=None): return {'date': date, 'stop': stop} return fake_bootstrap @patch('feed_ingestion.tasks.bootstrap.garcon_feed_status') @patch('feed_ingestion.tasks.feed_status_tasks.has_newer_ingested_date', return_value=True) def test_blocks_past_date_and_keeps_status(self, _guard, mock_status): """Past date stops the flow and the status row is NOT deleted.""" result = self._decorated()( MagicMock(), '2026-06-20', reload='True') assert result['stop'] is True assert not mock_status.delete_status.called @patch('feed_ingestion.tasks.bootstrap.garcon_feed_status') @patch('feed_ingestion.tasks.feed_status_tasks.has_newer_ingested_date', return_value=False) def test_allowed_reload_deletes_status(self, _guard, mock_status): """An allowed reload proceeds and deletes status to reprocess.""" result = self._decorated()( MagicMock(), '2026-06-22', reload='True') assert result['stop'] is False mock_status.delete_status.assert_called_with(FEED, '2026-06-22')