from unittest.mock import MagicMock, patch

from app.jobs.shopify_attribute_sync import run_shopify_attribute_sync
from db.models import ShopifyConnection


def test_run_shopify_attribute_sync_decodes_compat_connection_id():
    session = MagicMock()
    connection = MagicMock()
    connection.id = 1
    connection.shop_code = "main-shop"
    connection.shop_domain = "example.myshopify.com"
    connection.api_version = "2026-04"
    session.get.return_value = connection

    with patch("db.session.get_session") as get_session:
        get_session.return_value.__enter__.return_value = session
        with patch("shopify.connections.build_client") as build_client:
            build_client.return_value = MagicMock(shop_domain="example.myshopify.com")
            with patch("app.jobs.shopify_attribute_sync._fetch_metafield_definitions", return_value=[]):
                with patch("app.jobs.shopify_attribute_sync._fetch_product_option_rows", return_value=[]):
                    with patch(
                        "db.shopify_repositories.SqlAlchemyShopifyAttributeRegistryRepository"
                    ) as repo_cls:
                        repo_cls.return_value.consolidate_shop_codes.return_value = {
                            "merged": 0,
                            "deleted_conflicts": 0,
                            "purged_alternate_shops": 0,
                        }
                        repo_cls.return_value.bulk_replace.return_value = 12
                        result = run_shopify_attribute_sync(connection_id=1_000_001)

    session.get.assert_called_once_with(ShopifyConnection, 1)
    repo_cls.return_value.consolidate_shop_codes.assert_called_once()
    assert result["status"] == "success"
    assert result["shop_code"] == "main-shop"
