You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.3 KiB
Python

"""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"]