from pathlib import Path ROOT = Path(__file__).resolve().parents[1] def test_promo_crawlers_append_full_snapshots_for_unchanged_items(): scheduler_source = (ROOT / "scheduler.py").read_text(encoding="utf-8") assert 'status_change=status_change if is_changed else "ACTIVE"' in scheduler_source assert "snapshot_count = 0" in scheduler_source assert "snapshot_count += 1" in scheduler_source assert '"snapshot_records": snapshot_count' in scheduler_source assert "無變動快照已寫入" in scheduler_source assert "Snapshot Written" in scheduler_source assert "Skip Write" not in scheduler_source assert "無變動跳過" not in scheduler_source def test_promo_product_model_contains_crawled_fields_needed_for_history(): model_source = (ROOT / "database/edm_models.py").read_text(encoding="utf-8") for field in [ "batch_id", "crawled_at", "time_slot", "activity_time_text", "session_time_text", "i_code", "name", "price", "discount_text", "url", "image_url", "previous_price", "remain_qty", "status_change", "page_type", ]: assert field in model_source