Files
ArchiveBox/archivebox/tests/test_cli_config.py
Nick Sweeting b749b26c5d wip
2026-03-23 03:58:32 -07:00

201 lines
5.1 KiB
Python

#!/usr/bin/env python3
"""
Comprehensive tests for archivebox config command.
Verify config reads/writes ArchiveBox.conf file correctly.
"""
import os
import subprocess
def test_config_displays_all_config(tmp_path, process):
"""Test that config without args displays all configuration."""
os.chdir(tmp_path)
result = subprocess.run(["archivebox", "config"], capture_output=True, text=True)
assert result.returncode == 0
output = result.stdout
# Should show config sections
assert len(output) > 100
# Should show at least some standard config keys
assert "TIMEOUT" in output or "OUTPUT_PERMISSIONS" in output
def test_config_get_specific_key(tmp_path, process):
"""Test that config --get KEY retrieves specific value."""
os.chdir(tmp_path)
result = subprocess.run(
["archivebox", "config", "--get", "TIMEOUT"],
capture_output=True,
text=True,
)
assert result.returncode == 0
assert "TIMEOUT" in result.stdout
def test_config_set_writes_to_file(tmp_path, process):
"""Test that config --set KEY=VALUE writes to ArchiveBox.conf."""
os.chdir(tmp_path)
result = subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=120"],
capture_output=True,
text=True,
)
assert result.returncode == 0
# Verify config file was updated
config_file = tmp_path / "ArchiveBox.conf"
assert config_file.exists()
content = config_file.read_text()
assert "TIMEOUT" in content or "120" in content
def test_config_set_and_get_roundtrip(tmp_path, process):
"""Test that set value can be retrieved with get."""
os.chdir(tmp_path)
# Set a unique value
subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=987"],
capture_output=True,
text=True,
)
# Get the value back
result = subprocess.run(
["archivebox", "config", "--get", "TIMEOUT"],
capture_output=True,
text=True,
)
assert "987" in result.stdout
def test_config_set_multiple_values(tmp_path, process):
"""Test setting multiple config values at once."""
os.chdir(tmp_path)
result = subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=111", "YTDLP_TIMEOUT=222"],
capture_output=True,
text=True,
)
assert result.returncode == 0
# Verify both were written
config_file = tmp_path / "ArchiveBox.conf"
content = config_file.read_text()
assert "111" in content
assert "222" in content
def test_config_set_invalid_key_fails(tmp_path, process):
"""Test that setting invalid config key fails."""
os.chdir(tmp_path)
result = subprocess.run(
["archivebox", "config", "--set", "TOTALLY_INVALID_KEY_XYZ=value"],
capture_output=True,
text=True,
)
assert result.returncode != 0
def test_config_set_requires_equals_sign(tmp_path, process):
"""Test that set requires KEY=VALUE format."""
os.chdir(tmp_path)
result = subprocess.run(
["archivebox", "config", "--set", "TIMEOUT"],
capture_output=True,
text=True,
)
assert result.returncode != 0
def test_config_search_finds_keys(tmp_path, process):
"""Test that config --search finds matching keys."""
os.chdir(tmp_path)
result = subprocess.run(
["archivebox", "config", "--search", "TIMEOUT"],
capture_output=True,
text=True,
)
# Should find timeout-related config
assert "TIMEOUT" in result.stdout
def test_config_preserves_existing_values(tmp_path, process):
"""Test that setting new values preserves existing ones."""
os.chdir(tmp_path)
# Set first value
subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=100"],
capture_output=True,
)
# Set second value
subprocess.run(
["archivebox", "config", "--set", "YTDLP_TIMEOUT=200"],
capture_output=True,
)
# Verify both are in config file
config_file = tmp_path / "ArchiveBox.conf"
content = config_file.read_text()
assert "TIMEOUT" in content
assert "YTDLP_TIMEOUT" in content
def test_config_file_is_valid_toml(tmp_path, process):
"""Test that config file remains valid TOML after set."""
os.chdir(tmp_path)
subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=150"],
capture_output=True,
)
config_file = tmp_path / "ArchiveBox.conf"
content = config_file.read_text()
# Basic TOML validation - should have sections and key=value pairs
assert "[" in content or "=" in content
def test_config_updates_existing_value(tmp_path, process):
"""Test that setting same key twice updates the value."""
os.chdir(tmp_path)
# Set initial value
subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=100"],
capture_output=True,
)
# Update to new value
subprocess.run(
["archivebox", "config", "--set", "TIMEOUT=200"],
capture_output=True,
)
# Get current value
result = subprocess.run(
["archivebox", "config", "--get", "TIMEOUT"],
capture_output=True,
text=True,
)
# Should show updated value
assert "200" in result.stdout