mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2026-01-03 01:15:57 +10:00
204 lines
5.2 KiB
Python
204 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Comprehensive tests for archivebox config command.
|
|
Verify config reads/writes ArchiveBox.conf file correctly.
|
|
"""
|
|
|
|
import os
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
from .fixtures import *
|
|
|
|
|
|
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
|