# SPDX-FileCopyrightText: 2025 2025 # SPDX-FileContributor: Gergely Polonkai # # SPDX-License-Identifier: GPL-3.0-or-later """Tests for the ``load_oracle_from_yaml`` function""" import pytest from pytest_mock import MockerFixture from gm_assistant.oracle import load_oracle_from_yaml from gm_assistant.oracle.random_choice import RandomChoiceOracle def test_non_object(mocker: MockerFixture) -> None: """Test loading something that is not a YAML object""" mocker.patch("gm_assistant.oracle.open") mocker.patch("gm_assistant.oracle.yaml.safe_load", return_value=[]) with pytest.raises(TypeError) as ctx: load_oracle_from_yaml("test_file") assert str(ctx.value) == "Oracle data must be a YAML object" # WARNING # # Tests below this line rely on specific classes getting loaded into gm_assistant.oracle.TYPE_CLASSES def test_unknown_type(mocker: MockerFixture) -> None: """Test loading an oracle with an unknown type""" mocker.patch("gm_assistant.oracle.open") mocker.patch("gm_assistant.oracle.yaml.safe_load", return_value={"type": "something-non-existing"}) with pytest.raises(KeyError) as ctx: load_oracle_from_yaml("test_file") assert str(ctx.value) == "'No information on how to handle something-non-existing data'" def test_load_oracle(mocker: MockerFixture) -> None: """Test loading a specific oracle""" mocker.patch("gm_assistant.oracle.open") mocker.patch( "gm_assistant.oracle.yaml.safe_load", return_value={"type": "random-choice", "name": "Test Oracle", "source": "Test Source", "choices": ["A", "B"]}, ) oracle = load_oracle_from_yaml("test_file") assert isinstance(oracle, RandomChoiceOracle) assert oracle.choices == ["A", "B"]