from app.jobs.sync_master_taxonomy_pipeline import run_master_taxonomy_pipeline


def test_taxonomy_mode_skip_returns_immediately(monkeypatch):
    # Should not open DB sessions when mode=skip.
    monkeypatch.setattr(
        "app.jobs.sync_master_taxonomy_pipeline.get_session",
        lambda: (_ for _ in ()).throw(AssertionError("get_session should not run")),
    )
    result = run_master_taxonomy_pipeline(taxonomy_mode="skip")
    assert result["status"] == "ok"
    assert result["taxonomy_mode"] == "skip"
    assert result["steps"]["taxonomy"]["status"] == "skipped"


def test_channel_full_publish_fast_sets_skip_mode(monkeypatch):
    from app.jobs import channel_full_publish as mod

    captured = {}

    class _Sess:
        def __enter__(self):
            return self

        def __exit__(self, *args):
            return False

    monkeypatch.setattr(mod, "get_session", lambda: _Sess())
    monkeypatch.setattr(
        mod,
        "_active_native_ids",
        lambda *a, **k: {"magento": 1, "shopify": None},
    )
    monkeypatch.setattr(mod, "_load_target_skus", lambda *a, **k: ["ACH-B12"])

    def _fake_pipeline(**kwargs):
        captured.update(kwargs)
        return {"status": "ok"}

    monkeypatch.setattr(
        "app.jobs.sync_master_taxonomy_pipeline.run_master_taxonomy_pipeline",
        _fake_pipeline,
    )
    monkeypatch.setattr(mod, "_provision_attributes", lambda *a, **k: {"status": "ok"})
    monkeypatch.setattr(mod, "_bootstrap_shopping_facets", lambda *a, **k: {"status": "ok"})
    monkeypatch.setattr(mod, "_push_collection_landings", lambda *a, **k: {"status": "ok"})
    monkeypatch.setattr(mod, "_push_magento_batches", lambda *a, **k: {"status": "ok"})
    monkeypatch.setattr(mod, "compat_connection_id", lambda *a, **k: 1)

    result = mod.run_channel_full_publish(
        dry_run=True,
        channels=["magento"],
        fast=True,
        skus=["ACH-B12"],
    )
    assert result["status"] == "ok"
    assert result["taxonomy_mode"] == "skip"
    assert result["steps"]["taxonomy"]["status"] == "skipped"
    assert "taxonomy_mode" not in captured  # pipeline not called when skip
