from unittest.mock import MagicMock, patch

from shopify.media_sync import _create_media


def test_create_media_uploads_one_image_at_a_time():
    client = MagicMock()
    client.graphql.side_effect = [
        {"productCreateMedia": {"media": [{"id": "1"}], "mediaUserErrors": []}},
        {
            "productCreateMedia": {
                "media": [],
                "mediaUserErrors": [
                    {"field": ["media", "0", "originalSource"], "message": "Image URL is invalid"}
                ],
            }
        },
        {"productCreateMedia": {"media": [{"id": "2"}], "mediaUserErrors": []}},
        {"productCreateMedia": {"media": [{"id": "3"}], "mediaUserErrors": []}},
    ]

    with patch("shopify.media_sync.fetch_and_stage_image", return_value="https://shopify.staged/ok.jpg"):
        uploaded, errors = _create_media(
            client,
            "gid://shopify/Product/1",
            [
                "https://cdn.example/a.jpg",
                "https://cdn.example/bad.jpg",
                "https://cdn.example/c.jpg",
            ],
            alt="SKU-1",
        )

    assert uploaded == 3
    assert errors == []
    assert client.graphql.call_count == 4
