| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #!/usr/bin/env python3
- """
- Comprehensive tests for archivebox status command.
- Verify status reports accurate collection state from DB and filesystem.
- """
- import os
- import subprocess
- import sqlite3
- from .fixtures import *
- def test_status_runs_successfully(tmp_path, process):
- """Test that status command runs without error."""
- os.chdir(tmp_path)
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- assert result.returncode == 0
- assert len(result.stdout) > 100
- def test_status_shows_zero_snapshots_in_empty_archive(tmp_path, process):
- """Test status shows 0 snapshots in empty archive."""
- os.chdir(tmp_path)
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- output = result.stdout
- # Should indicate empty/zero state
- assert '0' in output
- def test_status_shows_correct_snapshot_count(tmp_path, process, disable_extractors_dict):
- """Test that status shows accurate snapshot count from DB."""
- os.chdir(tmp_path)
- # Add 3 snapshots
- for url in ['https://example.com', 'https://example.org', 'https://example.net']:
- subprocess.run(
- ['archivebox', 'add', '--index-only', '--depth=0', url],
- capture_output=True,
- env=disable_extractors_dict,
- )
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- # Verify DB has 3 snapshots
- conn = sqlite3.connect("index.sqlite3")
- c = conn.cursor()
- db_count = c.execute("SELECT COUNT(*) FROM core_snapshot").fetchone()[0]
- conn.close()
- assert db_count == 3
- # Status output should show 3
- assert '3' in result.stdout
- def test_status_shows_archived_count(tmp_path, process, disable_extractors_dict):
- """Test status distinguishes archived vs unarchived snapshots."""
- os.chdir(tmp_path)
- subprocess.run(
- ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
- capture_output=True,
- env=disable_extractors_dict,
- )
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- # Should show archived/unarchived categories
- assert 'archived' in result.stdout.lower() or 'queued' in result.stdout.lower()
- def test_status_shows_archive_directory_size(tmp_path, process):
- """Test status reports archive directory size."""
- os.chdir(tmp_path)
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- output = result.stdout
- # Should show size info
- assert 'Size' in output or 'size' in output
- def test_status_counts_archive_directories(tmp_path, process, disable_extractors_dict):
- """Test status counts directories in archive/ folder."""
- os.chdir(tmp_path)
- subprocess.run(
- ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
- capture_output=True,
- env=disable_extractors_dict,
- )
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- # Should show directory count
- assert 'present' in result.stdout.lower() or 'directories' in result.stdout
- def test_status_detects_orphaned_directories(tmp_path, process, disable_extractors_dict):
- """Test status detects directories not in DB (orphaned)."""
- os.chdir(tmp_path)
- # Add a snapshot
- subprocess.run(
- ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
- capture_output=True,
- env=disable_extractors_dict,
- )
- # Create an orphaned directory
- (tmp_path / "archive" / "fake_orphaned_dir").mkdir(parents=True, exist_ok=True)
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- # Should mention orphaned dirs
- assert 'orphan' in result.stdout.lower() or '1' in result.stdout
- def test_status_shows_user_info(tmp_path, process):
- """Test status shows user/login information."""
- os.chdir(tmp_path)
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- output = result.stdout
- # Should show user section
- assert 'user' in output.lower() or 'login' in output.lower()
- def test_status_reads_from_db_not_filesystem(tmp_path, process, disable_extractors_dict):
- """Test that status uses DB as source of truth, not filesystem."""
- os.chdir(tmp_path)
- # Add snapshot to DB
- subprocess.run(
- ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
- capture_output=True,
- env=disable_extractors_dict,
- )
- # Verify DB has snapshot
- conn = sqlite3.connect("index.sqlite3")
- c = conn.cursor()
- db_count = c.execute("SELECT COUNT(*) FROM core_snapshot").fetchone()[0]
- conn.close()
- assert db_count == 1
- # Status should reflect DB count
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- assert '1' in result.stdout
- def test_status_shows_index_file_info(tmp_path, process):
- """Test status shows index file information."""
- os.chdir(tmp_path)
- result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
- # Should mention index
- assert 'index' in result.stdout.lower() or 'Index' in result.stdout
|