feat: Create a module for Mythic RPG’s Fate Chart

This commit is contained in:
2025-05-23 23:48:50 +02:00
parent bf69d7463e
commit 4d92935fda
2 changed files with 243 additions and 0 deletions

51
tests/test_fate_chart.py Normal file
View File

@@ -0,0 +1,51 @@
# SPDX-FileCopyrightText: 2025 2025
# SPDX-FileContributor: Gergely Polonkai
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""Tests for the Fate Chart module"""
import pytest
from pytest_mock import MockerFixture
from gm_assistant.fate_chart import FateOdds, FateOutcome, decide
@pytest.mark.parametrize("odds", FateOdds)
@pytest.mark.parametrize("chaos_level", range(9))
def test_all_valid_values(odds: FateOdds, chaos_level: int) -> None:
"""Test if every valid value yields some result"""
assert isinstance(decide(odds, chaos_level=chaos_level), FateOutcome)
# WARNING
#
# Tests below this line rely on exact values in the fate_chart module
def test_exceptional_yes(mocker: MockerFixture) -> None:
"""Test if exceptional yes result is returned"""
mocker.patch("gm_assistant.fate_chart.Die.roll", return_value=10)
assert decide(FateOdds.FIFTY_FIFTY, chaos_level=5) == FateOutcome.EXC_YES
def test_yes(mocker: MockerFixture) -> None:
"""Test if yes result is returned"""
mocker.patch("gm_assistant.fate_chart.Die.roll", return_value=50)
assert decide(FateOdds.FIFTY_FIFTY, chaos_level=5) == FateOutcome.YES
def test_exceptional_no(mocker: MockerFixture) -> None:
"""Test if exceptional no result is returned"""
mocker.patch("gm_assistant.fate_chart.Die.roll", return_value=91)
assert decide(FateOdds.FIFTY_FIFTY, chaos_level=5) == FateOutcome.EXC_NO
def test_no(mocker: MockerFixture) -> None:
"""Test if exceptional no result is returned"""
mocker.patch("gm_assistant.fate_chart.Die.roll", return_value=51)
assert decide(FateOdds.FIFTY_FIFTY, chaos_level=5) == FateOutcome.NO