"""Tests for site manifest parsing and config merging.""" import pytest from pathlib import Path def test_indeed_manifest_loads(): """indeed.yaml parses into SiteManifest without errors.""" from gimme_job.config import load_site_manifest manifest = load_site_manifest("indeed") assert manifest.site_id == "indeed" assert manifest.enabled is True assert manifest.identity.base_url == "https://www.indeed.com" assert len(manifest.extract.container_selectors) > 0 def test_manifest_start_url_template(): """build_start_url substitutes keyword correctly.""" from gimme_job.config import load_site_manifest from gimme_job.models.dto import SearchQuery manifest = load_site_manifest("indeed") query = SearchQuery(keywords=["orthodontist"]) url = manifest.build_start_url(query) assert "orthodontist" in url.lower() def test_merge_query_global_defaults(): """merge_query returns global defaults when no overrides.""" from gimme_job.config import load_global_config, load_site_manifest, merge_query cfg = load_global_config() manifest = load_site_manifest("indeed") query = merge_query(cfg, manifest) assert query.keywords == cfg.search_defaults.keywords def test_merge_query_site_override(): """Site search_override takes precedence over global defaults.""" from gimme_job.config import load_global_config, merge_query from gimme_job.models.manifest import SiteManifest, SiteIdentity, SearchOverride # Build a minimal manifest with keyword override manifest = SiteManifest( site_id="test", identity=SiteIdentity( label="Test", base_url="https://test.com", start_url_template="https://test.com/jobs?q={keywords_urlencoded}", ), search_override=SearchOverride(keywords=["dentist"]), ) cfg = load_global_config() query = merge_query(cfg, manifest) assert query.keywords == ["dentist"] def test_merge_query_cli_override(): """CLI override takes precedence over site and global.""" from gimme_job.config import load_global_config, load_site_manifest, merge_query cfg = load_global_config() manifest = load_site_manifest("indeed") query = merge_query(cfg, manifest, cli_overrides={"keywords": ["pediatric dentist"]}) assert query.keywords == ["pediatric dentist"]