test_cli_status.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/usr/bin/env python3
  2. """
  3. Comprehensive tests for archivebox status command.
  4. Verify status reports accurate collection state from DB and filesystem.
  5. """
  6. import os
  7. import subprocess
  8. import sqlite3
  9. from .fixtures import *
  10. def test_status_runs_successfully(tmp_path, process):
  11. """Test that status command runs without error."""
  12. os.chdir(tmp_path)
  13. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  14. assert result.returncode == 0
  15. assert len(result.stdout) > 100
  16. def test_status_shows_zero_snapshots_in_empty_archive(tmp_path, process):
  17. """Test status shows 0 snapshots in empty archive."""
  18. os.chdir(tmp_path)
  19. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  20. output = result.stdout
  21. # Should indicate empty/zero state
  22. assert '0' in output
  23. def test_status_shows_correct_snapshot_count(tmp_path, process, disable_extractors_dict):
  24. """Test that status shows accurate snapshot count from DB."""
  25. os.chdir(tmp_path)
  26. # Add 3 snapshots
  27. for url in ['https://example.com', 'https://example.org', 'https://example.net']:
  28. subprocess.run(
  29. ['archivebox', 'add', '--index-only', '--depth=0', url],
  30. capture_output=True,
  31. env=disable_extractors_dict,
  32. )
  33. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  34. # Verify DB has 3 snapshots
  35. conn = sqlite3.connect("index.sqlite3")
  36. c = conn.cursor()
  37. db_count = c.execute("SELECT COUNT(*) FROM core_snapshot").fetchone()[0]
  38. conn.close()
  39. assert db_count == 3
  40. # Status output should show 3
  41. assert '3' in result.stdout
  42. def test_status_shows_archived_count(tmp_path, process, disable_extractors_dict):
  43. """Test status distinguishes archived vs unarchived snapshots."""
  44. os.chdir(tmp_path)
  45. subprocess.run(
  46. ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
  47. capture_output=True,
  48. env=disable_extractors_dict,
  49. )
  50. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  51. # Should show archived/unarchived categories
  52. assert 'archived' in result.stdout.lower() or 'queued' in result.stdout.lower()
  53. def test_status_shows_archive_directory_size(tmp_path, process):
  54. """Test status reports archive directory size."""
  55. os.chdir(tmp_path)
  56. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  57. output = result.stdout
  58. # Should show size info
  59. assert 'Size' in output or 'size' in output
  60. def test_status_counts_archive_directories(tmp_path, process, disable_extractors_dict):
  61. """Test status counts directories in archive/ folder."""
  62. os.chdir(tmp_path)
  63. subprocess.run(
  64. ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
  65. capture_output=True,
  66. env=disable_extractors_dict,
  67. )
  68. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  69. # Should show directory count
  70. assert 'present' in result.stdout.lower() or 'directories' in result.stdout
  71. def test_status_detects_orphaned_directories(tmp_path, process, disable_extractors_dict):
  72. """Test status detects directories not in DB (orphaned)."""
  73. os.chdir(tmp_path)
  74. # Add a snapshot
  75. subprocess.run(
  76. ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
  77. capture_output=True,
  78. env=disable_extractors_dict,
  79. )
  80. # Create an orphaned directory
  81. (tmp_path / "archive" / "fake_orphaned_dir").mkdir(parents=True, exist_ok=True)
  82. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  83. # Should mention orphaned dirs
  84. assert 'orphan' in result.stdout.lower() or '1' in result.stdout
  85. def test_status_shows_user_info(tmp_path, process):
  86. """Test status shows user/login information."""
  87. os.chdir(tmp_path)
  88. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  89. output = result.stdout
  90. # Should show user section
  91. assert 'user' in output.lower() or 'login' in output.lower()
  92. def test_status_reads_from_db_not_filesystem(tmp_path, process, disable_extractors_dict):
  93. """Test that status uses DB as source of truth, not filesystem."""
  94. os.chdir(tmp_path)
  95. # Add snapshot to DB
  96. subprocess.run(
  97. ['archivebox', 'add', '--index-only', '--depth=0', 'https://example.com'],
  98. capture_output=True,
  99. env=disable_extractors_dict,
  100. )
  101. # Verify DB has snapshot
  102. conn = sqlite3.connect("index.sqlite3")
  103. c = conn.cursor()
  104. db_count = c.execute("SELECT COUNT(*) FROM core_snapshot").fetchone()[0]
  105. conn.close()
  106. assert db_count == 1
  107. # Status should reflect DB count
  108. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  109. assert '1' in result.stdout
  110. def test_status_shows_index_file_info(tmp_path, process):
  111. """Test status shows index file information."""
  112. os.chdir(tmp_path)
  113. result = subprocess.run(['archivebox', 'status'], capture_output=True, text=True)
  114. # Should mention index
  115. assert 'index' in result.stdout.lower() or 'Index' in result.stdout