gm-assistant/tests/test_load_oracle_from_yaml.py

56 lines
1.7 KiB
Python

# 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"]