feat: Create a module for Mythic RPG’s Fate Chart
This commit is contained in:
51
tests/test_fate_chart.py
Normal file
51
tests/test_fate_chart.py
Normal 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
|
Reference in New Issue
Block a user