ok, ok. It's time to start testing this thing;git push

This commit is contained in:
Greg Gauthier 2024-07-03 23:01:01 +01:00
parent 6c0254f664
commit 217c4e32f8
7 changed files with 116 additions and 6 deletions

View File

@ -2,15 +2,31 @@ import random
from app.functions.get_character_age import get_age from app.functions.get_character_age import get_age
def get_sex():
return random.choice(['male', 'female'])
def get_hair():
return random.choice(['black', 'brown', 'auburn', 'blonde', 'copper', 'brass', 'blue', 'bald'])
def get_eyes():
return random.choice(['blue', 'brown', 'green', 'hazel', 'gray'])
def get_skin_tone():
return random.choice(['dark', 'olive', 'medium', 'light', 'pale'])
def generate_profile(chartype): def generate_profile(chartype):
profile = { profile = {
'name': "Anon", 'name': "Anon",
'sex': random.choice(['male', 'female', 'male', 'female', 'male', 'female']), 'sex': get_sex(),
'age': get_age(chartype) 'age': get_age(chartype)
} }
if chartype == 'human': if chartype == 'human':
profile['hair'] = random.choice(['black', 'brown', 'auburn', 'blonde', 'copper', 'brass', 'blue', 'bald']) profile['hair'] = get_hair()
profile['eyes'] = random.choice(['blue', 'brown', 'green', 'hazel', 'gray']) profile['eyes'] = get_eyes()
profile['skintone'] = random.choice(['dark', 'olive', 'medium', 'light', 'pale']) profile['skintone'] = get_skin_tone()
return profile return profile

View File

@ -11,4 +11,4 @@ def get_score_list(count, modifier):
roll = 100 roll = 100
tmp_scores.append(roll) tmp_scores.append(roll)
return tmp_scores return tmp_scores

View File

@ -3,4 +3,6 @@ flask-restx~=1.3.0
marshmallow~=3.21.3 marshmallow~=3.21.3
pandas~=2.2.2 pandas~=2.2.2
flask-cors~=4.0.1 flask-cors~=4.0.1
numpy~=2.0.0 numpy~=2.0.0
pytest~=8.2.2
coverage~=7.5.4

0
tests/__init__.py Normal file
View File

View File

@ -0,0 +1,30 @@
import pytest
from unittest.mock import patch
from app.functions.generate_profile import generate_profile
@patch('app.functions.generate_profile.get_sex', return_value='male')
@patch('app.functions.generate_profile.get_age', return_value=30)
@patch('app.functions.generate_profile.get_hair', return_value='black')
@patch('app.functions.generate_profile.get_eyes', return_value='blue')
@patch('app.functions.generate_profile.get_skin_tone', return_value='dark')
@pytest.mark.parametrize("chartype", ["human", "humanoid", "mutant", "cyborg"])
def test_generate_profile(
mock_get_skin_tone, mock_get_eyes, mock_get_hair, mock_get_age, mock_get_sex, chartype):
profile = generate_profile(chartype)
# Assertions common to all character types
assert profile["name"] == 'Anon'
assert profile["sex"] == 'male'
assert profile["age"] == 30
# Additional assertions for 'human' character type
if chartype == 'human':
assert profile["hair"] == 'black'
assert profile["eyes"] == 'blue'
assert profile["skintone"] == 'dark'
else:
# 'hair', 'eyes' and 'skintone' should not exist for non-human types
assert "hair" not in profile
assert "eyes" not in profile
assert "skintone" not in profile

View File

@ -0,0 +1,24 @@
import pytest
from unittest.mock import patch, MagicMock
from app.functions.get_score_list import get_score_list
@patch('app.functions.get_score_list.roll_dices')
def test_get_score_list(mock_roll_dices):
# Setup the mock to return a specific value
mock_roll_dices.return_value = {'result': 50}
# Test that the modifier is applied correctly when the roll value is less than 100 after applying modifier
scores = get_score_list(4, 10)
assert scores == [60, 60, 60, 60]
# Test that the score is capped at 100
scores = get_score_list(4, 60)
assert scores == [100, 100, 100, 100]
# Test that the duplicates are handled You may need to setup some specific behavior on your mock object. Here we
# are making it return 50 on the first call, and 60 on any subsequent calls. This simulates a scenario where
# get_score_list may returns duplicate value
mock_roll_dices.side_effect = [{'result': 50}, {'result': 60}]
scores = get_score_list(2, 10)
assert scores == [60, 70]

38
tests/test_roll_dices.py Normal file
View File

@ -0,0 +1,38 @@
import pytest
from app.functions.roll_dices import roll_dices
from unittest.mock import patch
@patch('random.randint')
def test_roll_dices_no_discard(mock_randint):
# mocks
mock_randint.return_value = 4
# Test with discard_lowest = False
result = roll_dices(4, 6, False)
assert 'dice-set' in result
assert 'rolls' in result
assert 'result' in result
assert len(result['rolls']) == 4
assert 'discarded' not in result
mnemonic = result['dice-set']['mnemonic']
assert mnemonic == '4d6'
@patch('random.randint')
def test_roll_dices_with_discard(mock_randint):
# mocks
mock_randint.return_value = 4
# Test with discard_lowest = True
result = roll_dices(4, 6, True)
assert 'dice-set' in result
assert 'rolls' in result
assert 'result' in result
assert len(result['rolls']) == 3
assert 'discarded' in result
assert len(result['discarded']) == 1
mnemonic = result['dice-set']['mnemonic']
assert mnemonic == '4(-1)d6'