#!/usr/bin/env python3 """ Comprehensive tests for archivebox install command. Verify install detects and records binary dependencies in DB. """ import os import subprocess import sqlite3 from .fixtures import * def test_install_runs_successfully(tmp_path, process): """Test that install command runs without error.""" os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'install', '--dry-run'], capture_output=True, text=True, timeout=60, ) # Dry run should complete quickly assert result.returncode in [0, 1] # May return 1 if binaries missing def test_install_creates_binary_records_in_db(tmp_path, process): """Test that install creates Binary records in database.""" os.chdir(tmp_path) subprocess.run( ['archivebox', 'install', '--dry-run'], capture_output=True, timeout=60, ) # Check that binary records were created conn = sqlite3.connect("index.sqlite3") c = conn.cursor() # Check machine_binary table exists tables = c.execute( "SELECT name FROM sqlite_master WHERE type='table' AND name='machine_binary'" ).fetchall() conn.close() assert len(tables) == 1 def test_install_dry_run_does_not_install(tmp_path, process): """Test that --dry-run doesn't actually install anything.""" os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'install', '--dry-run'], capture_output=True, text=True, timeout=60, ) # Should complete without actually installing assert 'dry' in result.stdout.lower() or result.returncode in [0, 1] def test_install_detects_system_binaries(tmp_path, process): """Test that install detects existing system binaries.""" os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'install', '--dry-run'], capture_output=True, text=True, timeout=60, ) # Should detect at least some common binaries (python, curl, etc) assert result.returncode in [0, 1] def test_install_shows_binary_status(tmp_path, process): """Test that install shows status of binaries.""" os.chdir(tmp_path) result = subprocess.run( ['archivebox', 'install', '--dry-run'], capture_output=True, text=True, timeout=60, ) output = result.stdout + result.stderr # Should show some binary information assert len(output) > 50 def test_install_updates_binary_table(tmp_path, process): """Test that install updates the machine_binary table.""" os.chdir(tmp_path) # Run install subprocess.run( ['archivebox', 'install', '--dry-run'], capture_output=True, timeout=60, ) # Check binary table has entries conn = sqlite3.connect("index.sqlite3") c = conn.cursor() binary_count = c.execute("SELECT COUNT(*) FROM machine_binary").fetchone()[0] conn.close() # Should have detected some binaries assert binary_count > 0