# -------------------------------------------------------------------------

# This file is part of the MindStudio project.

# Copyright (c) 2025 Huawei Technologies Co.,Ltd.

#

# MindStudio is licensed under Mulan PSL v2.

# You can use this software according to the terms and conditions of the Mulan PSL v2.

# You may obtain a copy of Mulan PSL v2 at:

#

#          http://license.coscl.org.cn/MulanPSL2

#

# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,

# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,

# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.

# See the Mulan PSL v2 for more details.

# -------------------------------------------------------------------------



import sys

from unittest.mock import MagicMock, Mock



import pytest





@pytest.fixture(autouse=True)

def _cleanup_meta_path_mocks():

    """移除可能残留在 sys.meta_path 中的 Mock,避免影响后续测试的导入(如 find_spec().name 导致 KeyError)。"""

    yield

    try:

        sys.meta_path[:] = [x for x in sys.meta_path if not isinstance(x, (Mock, MagicMock))]

    except Exception:

        pass





# 在任意测试或 patcher 代码导入前注入 mock,避免 ModuleNotFoundError: No module named 'prometheus_client'

if "prometheus_client" not in sys.modules:

    _mock_prom = MagicMock()

    # 构造返回值:Histogram/Counter/Gauge/Summary 被调用时返回带 labels().observe/inc/set 的 mock

    _mock_metric_instance = MagicMock()

    _mock_metric_instance.labels.return_value = _mock_metric_instance

    _mock_prom.Histogram = MagicMock(return_value=_mock_metric_instance)

    _mock_prom.Counter = MagicMock(return_value=_mock_metric_instance)

    _mock_prom.Gauge = MagicMock(return_value=_mock_metric_instance)

    _mock_prom.Summary = MagicMock(return_value=_mock_metric_instance)

    _mock_prom.REGISTRY = MagicMock()

    _mock_prom.CollectorRegistry = MagicMock(return_value=MagicMock())

    _mock_prom.multiprocess = MagicMock()

    _mock_prom.multiprocess.MultiProcessCollector = MagicMock()

    sys.modules["prometheus_client"] = _mock_prom