#!/usr/bin/env python3 """Integration tests for the database-backed archivebox schedule command.""" import os import sqlite3 import subprocess import pytest from .fixtures import process def _fetchone(tmp_path, query): conn = sqlite3.connect(tmp_path / "index.sqlite3") try: return conn.execute(query).fetchone() finally: conn.close() def test_schedule_creates_enabled_db_schedule(tmp_path, process): os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'schedule', '--every=daily', '--depth=1', 'https://example.com/feed.xml'], capture_output=True, text=True, ) assert result.returncode == 0 schedule_row = _fetchone( tmp_path, "SELECT schedule, is_enabled, label FROM crawls_crawlschedule ORDER BY created_at DESC LIMIT 1", ) crawl_row = _fetchone( tmp_path, "SELECT urls, status, max_depth FROM crawls_crawl ORDER BY created_at DESC LIMIT 1", ) assert schedule_row == ('daily', 1, 'Scheduled import: https://example.com/feed.xml') assert crawl_row == ('https://example.com/feed.xml', 'sealed', 1) def test_schedule_show_lists_enabled_schedules(tmp_path, process): os.chdir(tmp_path) subprocess.run( ['archivebox', 'schedule', '--every=weekly', 'https://example.com/feed.xml'], capture_output=True, text=True, check=True, ) result = subprocess.run( ['archivebox', 'schedule', '--show'], capture_output=True, text=True, ) assert result.returncode == 0 assert 'Active scheduled crawls' in result.stdout assert 'https://example.com/feed.xml' in result.stdout assert 'weekly' in result.stdout def test_schedule_clear_disables_existing_schedules(tmp_path, process): os.chdir(tmp_path) subprocess.run( ['archivebox', 'schedule', '--every=daily', 'https://example.com/feed.xml'], capture_output=True, text=True, check=True, ) result = subprocess.run( ['archivebox', 'schedule', '--clear'], capture_output=True, text=True, ) assert result.returncode == 0 assert 'Disabled 1 scheduled crawl' in result.stdout disabled_count = _fetchone( tmp_path, "SELECT COUNT(*) FROM crawls_crawlschedule WHERE is_enabled = 0", )[0] enabled_count = _fetchone( tmp_path, "SELECT COUNT(*) FROM crawls_crawlschedule WHERE is_enabled = 1", )[0] assert disabled_count == 1 assert enabled_count == 0 def test_schedule_every_requires_valid_period(tmp_path, process): os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'schedule', '--every=invalid_period', 'https://example.com/feed.xml'], capture_output=True, text=True, ) assert result.returncode != 0 assert 'Invalid schedule' in result.stderr or 'Invalid schedule' in result.stdout class TestScheduleCLI: def test_cli_help(self, tmp_path, process): os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'schedule', '--help'], capture_output=True, text=True, ) assert result.returncode == 0 assert '--every' in result.stdout assert '--show' in result.stdout assert '--clear' in result.stdout assert '--run-all' in result.stdout if __name__ == '__main__': pytest.main([__file__, '-v'])