Skip to content

Commit 3beb3ba

Browse files
sonic2kkDavidoTek
andauthored
test_util: Parametrize get_random_game_name (#538)
* test_util: Parametrize `get_random_game_name` Also adds some more test scenarios for ensuring we always get a `str` back, and to ensure we properly handle unknown objects and empty lists. * test_util: Remove import of `typing_extensions` --------- Co-authored-by: DavidoTek <54072917+DavidoTek@users.noreply.github.com>
1 parent 379d69d commit 3beb3ba

File tree

2 files changed

+58
-14
lines changed

2 files changed

+58
-14
lines changed

pupgui2/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,7 @@ def get_random_game_name(games: list[SteamApp] | list[LutrisGame] | list[HeroicG
953953
elif type(random_game) is HeroicGame:
954954
tooltip_game_name = random_game.title
955955

956-
return tooltip_game_name
956+
return str(tooltip_game_name)
957957

958958

959959
def detect_platform() -> HardwarePlatform:

tests/test_util.py

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from pupgui2.util import *
66

77
from pupgui2.constants import POSSIBLE_INSTALL_LOCATIONS, GITLAB_API, GITHUB_API
8-
from pupgui2.datastructures import SteamApp, LutrisGame, HeroicGame, Launcher
8+
from pupgui2.datastructures import SteamApp, LutrisGame, HeroicGame, Launcher, SteamUser
99

1010

1111
github_api_ratelimit_url: str = 'https://api.github.com/rate_limit/'
@@ -121,25 +121,69 @@ def test_get_launcher_from_installdir(launcher_paths: list[str], expected_launch
121121
assert all(launcher == expected_launcher for launcher in launcher_from_installdir)
122122

123123

124-
def test_get_random_game_name() -> None:
124+
@pytest.mark.parametrize(
125+
'game_list, game_name_attr', [
126+
pytest.param([SteamApp() for _ in range(3)], 'game_name', id = 'Steam Games'),
127+
pytest.param([LutrisGame() for _ in range(3)], 'name', id = 'Lutris Games'),
128+
pytest.param([HeroicGame() for _ in range(3)], 'title', id = 'Heroic Games'),
129+
]
130+
)
131+
def test_get_random_game_name(game_list: list[SteamApp] | list[LutrisGame] | list[HeroicGame], game_name_attr: str) -> None:
125132

126133
""" Test whether get_random_game_name returns a valid game name for each launcher game type. """
127134

128135
names: list[str] = ["game", "A super cool game", "A game with a very long name that is very long", "0123456789"]
136+
bad_names: list[str] = list("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor".split(','))
137+
138+
for i, game in enumerate(game_list):
139+
setattr(game, game_name_attr, names[i])
140+
141+
for i in range(len(names) * 2):
142+
result: str = get_random_game_name(game_list)
143+
144+
assert isinstance(result, str)
145+
146+
assert result in names
147+
assert result not in bad_names
148+
149+
150+
@pytest.mark.parametrize(
151+
'game_list, game_name_attr', [
152+
pytest.param([SteamApp() for _ in range(4)], 'game_name', id = 'Steam Games'),
153+
pytest.param([LutrisGame() for _ in range(4)], 'name', id = 'Lutris Games'),
154+
pytest.param([HeroicGame() for _ in range(4)], 'title', id = 'Heroic Games'),
155+
]
156+
)
157+
def test_get_random_game_name_returns_str(game_list: list[SteamApp] | list[LutrisGame] | list[HeroicGame], game_name_attr: str) -> None:
158+
159+
""" Test that get_random_game_name will always return a string. """
160+
161+
names: list[int | float] = [12, 3.14, [1, 734, 12112121][0], -85, 99999999999]
162+
str_names: list[str] = [str(name) for name in names]
163+
164+
for i, game in enumerate(game_list):
165+
setattr(game, game_name_attr, names[i])
129166

130-
steam_app: list[SteamApp] = [SteamApp() for _ in range(len(names))]
131-
lutris_game: list[LutrisGame] = [LutrisGame() for _ in range(len(names))]
132-
heroic_game: list[HeroicGame] = [HeroicGame() for _ in range(len(names))]
167+
for i in range(len(names) * 2):
133168

134-
for i, name in enumerate(names):
135-
steam_app[i].game_name = name
136-
lutris_game[i].name = name
137-
heroic_game[i].title = name
169+
result: str = get_random_game_name(game_list)
138170

139-
for i in range(10):
140-
assert get_random_game_name(steam_app) in names
141-
assert get_random_game_name(lutris_game) in names
142-
assert get_random_game_name(heroic_game) in names
171+
assert isinstance(result, str)
172+
assert result in str_names
173+
174+
175+
@pytest.mark.parametrize(
176+
'game_list', [
177+
pytest.param([], id = 'Empty List'),
178+
pytest.param((), id = 'Empty Tuple'),
179+
pytest.param([[], []], id = 'Empty List of Lists'),
180+
pytest.param([(), ()], id = 'Empty List of Tuples'),
181+
pytest.param([SteamUser(), SteamUser()], id = 'Empty List of SteamUser object')
182+
]
183+
)
184+
def test_get_random_game_name_unknown(game_list) -> None:
185+
""" Test that get_random_game_name returns an empty string when given a list that does not have a known game type. """
186+
assert get_random_game_name(game_list) == ''
143187

144188

145189
def test_is_online(responses: RequestsMock) -> None:

0 commit comments

Comments
 (0)