from unittest.mock import MagicMock, patch

from magento.collection_landing_push import _shopping_taxonomy_nodes, push_magento_shopping_category_icons


def test_shopping_taxonomy_nodes_uses_siblings_on_collection_pages():
    metadata = {
        "is_collection": True,
        "sibling_taxonomy_nodes": [
            {"path_slug": "kitchen-cabinets/base-cabinets", "node_kind": "category"},
            {"path_slug": "kitchen-cabinets/anna-gray", "node_kind": "collection"},
        ],
    }
    nodes = _shopping_taxonomy_nodes(metadata)
    assert [node["path_slug"] for node in nodes] == ["kitchen-cabinets/base-cabinets"]


def test_push_magento_shopping_category_icons_updates_linked_categories():
    api = MagicMock()
    session = MagicMock()
    with patch(
        "db.collection_landing_push.build_taxonomy_relationship_metadata",
        return_value={
            "is_collection": True,
            "sibling_taxonomy_nodes": [
                {
                    "path_slug": "kitchen-cabinets/base-cabinets",
                    "node_kind": "category",
                    "remote_id": "42",
                    "name": "Base Cabinets",
                    "category_icon_url": "https://cdn.example.com/base.png",
                }
            ],
        },
    ), patch(
        "db.collection_landing_push._authoritative_magento_collection_row",
        return_value={
            "path_slug": "kitchen-cabinets/base-cabinets",
            "category_l1": "Kitchen Cabinets",
            "collection": "Base Cabinets",
            "title": "Base Cabinets",
        },
    ), patch(
        "db.collection_landing_push.ensure_verified_magento_category_target",
        return_value={"remote_id": "42", "source": "listing_path_target"},
    ), patch(
        "magento.collection_landing_push.push_magento_collection_landing",
        return_value={"pushed": 1},
    ) as push:
        result = push_magento_shopping_category_icons(
            api,
            session,
            collection_row={"path_slug": "kitchen-cabinets/anna-gray"},
            connection_id=1,
            dry_run=False,
        )

    assert result["pushed"] == 1
    push.assert_called_once()
    assert push.call_args.kwargs["category_id"] == 42
    assert push.call_args.kwargs["field_keys"] == {"category_icon_url"}
