import pytest

from fastmcp import settings
from fastmcp.settings import Settings
from fastmcp.utilities.tests import temporary_settings


def test_get_setting_reads_nested_values():
    test_settings = Settings()

    assert test_settings.get_setting("docket__name") == "fastmcp"
    assert test_settings.get_setting("docket__redelivery_timeout__seconds") == 300


def test_set_setting_updates_nested_values():
    test_settings = Settings()

    test_settings.set_setting("docket__name", "worker-queue")

    assert test_settings.docket.name == "worker-queue"
    assert test_settings.get_setting("docket__name") == "worker-queue"


def test_temporary_settings_restores_nested_values():
    original_name = settings.get_setting("docket__name")

    with temporary_settings(docket__name="temporary-queue"):
        assert settings.get_setting("docket__name") == "temporary-queue"

    assert settings.get_setting("docket__name") == original_name


def test_get_setting_raises_for_missing_nested_parent():
    test_settings = Settings()

    with pytest.raises(AttributeError) as exc_info:
        test_settings.get_setting("docket__missing__value")

    assert str(exc_info.value) == "Setting missing does not exist."
