import pytest
import tarzi
@pytest.fixture
def modern_config():
return """
[general]
log_level = "debug"
timeout = 60
[fetcher]
mode = "browser_headless"
format = "markdown"
timeout = 30
proxy = "http://proxy.example.com:8080"
[search]
engine = "google"
limit = 5
"""
@pytest.fixture
def minimal_config():
return """
[search]
engine = "duckduckgo"
"""
@pytest.mark.unit
class TestUpdatedConfig:
def test_proxy_configuration_integration(self):
config_str = """
[fetcher]
proxy = "http://proxy.company.com:8080"
timeout = 45
[search]
engine = "brave"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
engine = tarzi.SearchEngine.from_config(config)
assert isinstance(engine, tarzi.SearchEngine)
def test_web_driver_configuration(self):
driver_configs = [
('web_driver = "geckodriver"', None),
('web_driver = "chromedriver"', None),
('web_driver = "geckodriver"\nweb_driver_url = "http://selenium-hub:4444"', "http://selenium-hub:4444"),
]
for driver_config, _expected_url in driver_configs:
config_str = f"""
[fetcher]
{driver_config}
[search]
engine = "duckduckgo"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
def test_search_engine_options(self):
engines = [
"duckduckgo",
"brave",
"bing",
"google",
"google_serper",
"serper",
"baidu",
"sogou_weixin",
]
for engine in engines:
config_str = f"""
[search]
engine = "{engine}"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
search_engine = tarzi.SearchEngine.from_config(config)
assert isinstance(search_engine, tarzi.SearchEngine)
def test_search_mode_options(self):
modes = ["auto", "apiquery", "webquery"]
for mode in modes:
config_str = f"""
[search]
engine = "brave"
mode = "{mode}"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
search_engine = tarzi.SearchEngine.from_config(config)
assert isinstance(search_engine, tarzi.SearchEngine)
def test_fetcher_mode_options(self):
modes = ["plain_request", "browser_headless", "browser_head"]
for mode in modes:
config_str = f"""
[fetcher]
mode = "{mode}"
[search]
engine = "duckduckgo"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
def test_format_options(self):
formats = ["html", "markdown", "json", "yaml"]
for format_type in formats:
config_str = f"""
[fetcher]
format = "{format_type}"
[search]
engine = "duckduckgo"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
converter = tarzi.Converter.from_config(config)
assert isinstance(converter, tarzi.Converter)
def test_timeout_configurations(self):
config_str = """
[general]
timeout = 120
[fetcher]
timeout = 60
[search]
engine = "duckduckgo"
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
engine = tarzi.SearchEngine.from_config(config)
assert isinstance(engine, tarzi.SearchEngine)
def test_search_limit_configuration(self):
limits = [1, 5, 10, 20, 50]
for limit in limits:
config_str = f"""
[search]
engine = "duckduckgo"
limit = {limit}
"""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
engine = tarzi.SearchEngine.from_config(config)
assert isinstance(engine, tarzi.SearchEngine)
def test_invalid_configuration_handling(self):
invalid_configs = [
"""
[search]
engine = "duckduckgo"
limit = -1
""",
"""
[general]
timeout = -5
[search]
engine = "duckduckgo"
""",
]
for config_str in invalid_configs:
try:
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
engine = tarzi.SearchEngine.from_config(config)
assert isinstance(engine, tarzi.SearchEngine)
except Exception:
pass
def test_empty_configuration_defaults(self):
config_str = ""
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
engine = tarzi.SearchEngine.from_config(config)
assert isinstance(engine, tarzi.SearchEngine)
converter = tarzi.Converter.from_config(config)
assert isinstance(converter, tarzi.Converter)
def test_partial_configuration_sections(self):
partial_configs = [
"""
[general]
log_level = "debug"
""",
"""
[fetcher]
mode = "plain_request"
""",
"""
[search]
engine = "brave"
""",
]
for config_str in partial_configs:
config = tarzi.Config.from_str(config_str)
assert isinstance(config, tarzi.Config)
fetcher = tarzi.WebFetcher.from_config(config)
assert isinstance(fetcher, tarzi.WebFetcher)
engine = tarzi.SearchEngine.from_config(config)
assert isinstance(engine, tarzi.SearchEngine)
converter = tarzi.Converter.from_config(config)
assert isinstance(converter, tarzi.Converter)