from unittest.mock import patch
import time

from app.jobs.channel_catalog_provision_enqueue import (
    get_catalog_provision_job,
    start_catalog_provision_job,
)


def test_start_and_poll_catalog_provision_job():
    with patch(
        "app.jobs.channel_catalog_provision_enqueue._execute_catalog_provision",
        return_value={"status": "ok", "dry_run": True, "product_count": 3},
    ):
        job_id = start_catalog_provision_job({"dry_run": True, "only_assigned": True})

    assert job_id
    row = None
    for _ in range(50):
        row = get_catalog_provision_job(job_id)
        if row and row.get("status") in {"completed", "failed"}:
            break
        time.sleep(0.05)
    assert row is not None
    assert row["status"] == "completed"
    assert row["result"]["product_count"] == 3


def test_get_catalog_provision_job_missing():
    assert get_catalog_provision_job("missing-job-id") is None
