44
55import pandas as pd # noqa: TID253
66import pytest
7+ import requests
78from pytest_mock import MockerFixture
89from sqlglot import exp , parse_one
910
1011from sqlmesh .core .engine_adapter import FabricEngineAdapter
12+ from sqlmesh .core .engine_adapter .fabric import FabricHttpClient
1113from tests .core .engine_adapter import to_sql_calls
1214from sqlmesh .core .engine_adapter .shared import DataObject
1315
@@ -19,6 +21,26 @@ def adapter(make_mocked_engine_adapter: t.Callable) -> FabricEngineAdapter:
1921 return make_mocked_engine_adapter (FabricEngineAdapter )
2022
2123
24+ @pytest .fixture
25+ def fabric_http_client (mocker : MockerFixture ) -> FabricHttpClient :
26+ client = FabricHttpClient (
27+ tenant_id = "tenant-id" ,
28+ workspace_id = "workspace-id" ,
29+ client_id = "client-id" ,
30+ client_secret = "client-secret" ,
31+ )
32+ client .session = mocker .MagicMock ()
33+ return client
34+
35+
36+ def _conflict_response (mocker : MockerFixture , error_code : str ) -> t .Any :
37+ resp = mocker .MagicMock ()
38+ resp .status_code = 409
39+ resp .json .return_value = {"errorCode" : error_code }
40+ resp .raise_for_status .side_effect = requests .HTTPError (response = resp )
41+ return resp
42+
43+
2244def test_get_current_catalog_uses_only_explicit_target_catalog (
2345 make_mocked_engine_adapter : t .Callable ,
2446):
@@ -451,3 +473,24 @@ def test_comments(make_mocked_engine_adapter: t.Callable, mocker: MockerFixture)
451473 create_table_comment_mock .assert_not_called ()
452474 create_column_comments_mock .assert_not_called ()
453475 assert to_sql_calls (adapter ) == []
476+
477+
478+ def test_create_warehouse_already_exists_is_noop (
479+ fabric_http_client : FabricHttpClient , mocker : MockerFixture
480+ ) -> None :
481+ fabric_http_client .session .post .return_value = _conflict_response (
482+ mocker , "ItemDisplayNameAlreadyInUse"
483+ )
484+
485+ fabric_http_client .create_warehouse ("my_warehouse" )
486+
487+ fabric_http_client .session .post .assert_called_once ()
488+
489+
490+ def test_create_warehouse_unrelated_conflict_still_raises (
491+ fabric_http_client : FabricHttpClient , mocker : MockerFixture
492+ ) -> None :
493+ fabric_http_client .session .post .return_value = _conflict_response (mocker , "SomeOtherError" )
494+
495+ with pytest .raises (requests .HTTPError ):
496+ fabric_http_client .create_warehouse ("my_warehouse" )
0 commit comments