from db.push_ready_skus import select_push_ready_skus


class _FakeSession:
    pass


def test_select_push_ready_skus_intersection(monkeypatch):
    def fake_ready(session, channel, **kwargs):
        if channel == "magento":
            return {"A", "B", "C", "D"}
        if channel == "shopify":
            return {"B", "C", "E"}
        return set()

    monkeypatch.setattr("db.push_ready_skus.ready_skus_for_channel", fake_ready)
    result = select_push_ready_skus(
        _FakeSession(),
        ["magento", "shopify"],
        limit=2,
        require_all_channels=True,
    )
    assert result["selected_skus"] == ["B", "C"]
    assert result["per_channel_skus"]["magento"] == ["B", "C"]
    assert result["per_channel_skus"]["shopify"] == ["B", "C"]


def test_select_push_ready_skus_per_channel(monkeypatch):
    def fake_ready(session, channel, **kwargs):
        if channel == "magento":
            return {"A", "B", "C"}
        if channel == "shopify":
            return {"X", "Y"}
        return set()

    monkeypatch.setattr("db.push_ready_skus.ready_skus_for_channel", fake_ready)
    result = select_push_ready_skus(
        _FakeSession(),
        ["magento", "shopify"],
        limit=2,
        require_all_channels=False,
    )
    assert result["per_channel_skus"]["magento"] == ["A", "B"]
    assert result["per_channel_skus"]["shopify"] == ["X", "Y"]
    assert result["selected_skus"] == ["A", "B", "X", "Y"]
