From 788d2550e6449087a9c1795d13ced05a82ea18fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Kierski?= Date: Tue, 5 Mar 2019 12:18:33 +0100 Subject: [PATCH] SDK-2552 optional achievement id or name --- galaxy/api/types.py | 7 ++++++- setup.py | 2 +- tests/test_achievements.py | 23 +++++++++++++++++++---- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/galaxy/api/types.py b/galaxy/api/types.py index ec92f54..20827da 100644 --- a/galaxy/api/types.py +++ b/galaxy/api/types.py @@ -28,8 +28,13 @@ class Game(): @dataclass class Achievement(): - achievement_id: str unlock_time: int + achievement_id: Optional[str] = None + achievement_name: Optional[str] = None + + def __post_init__(self): + assert self.achievement_id or self.achievement_name, \ + "One of achievement_id or achievement_name is required" @dataclass class LocalGame(): diff --git a/setup.py b/setup.py index 16e4fb9..6604796 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="galaxy.plugin.api", - version="0.11", + version="0.12", description="Galaxy python plugin API", author='Galaxy team', author_email='galaxy@gog.com', diff --git a/tests/test_achievements.py b/tests/test_achievements.py index cf5b2d7..1c8c9e2 100644 --- a/tests/test_achievements.py +++ b/tests/test_achievements.py @@ -1,9 +1,18 @@ import asyncio import json +from pytest import raises from galaxy.api.types import Achievement from galaxy.api.errors import UnknownError +def test_initialization_no_unlock_time(): + with raises(Exception): + Achievement(achievement_id="lvl30", achievement_name="Got level 30") + +def test_initialization_no_id_nor_name(): + with raises(AssertionError): + Achievement(unlock_time=1234567890) + def test_success(plugin, readline, write): request = { "jsonrpc": "2.0", @@ -15,8 +24,9 @@ def test_success(plugin, readline, write): } readline.side_effect = [json.dumps(request), ""] plugin.get_unlocked_achievements.return_value = [ - Achievement("lvl10", 1548421241), - Achievement("lvl20", 1548422395) + Achievement(achievement_id="lvl10", unlock_time=1548421241), + Achievement(achievement_name="Got level 20", unlock_time=1548422395), + Achievement(achievement_id="lvl30", achievement_name="Got level 30", unlock_time=1548495633) ] asyncio.run(plugin.run()) plugin.get_unlocked_achievements.assert_called_with(game_id="14") @@ -32,8 +42,13 @@ def test_success(plugin, readline, write): "unlock_time": 1548421241 }, { - "achievement_id": "lvl20", + "achievement_name": "Got level 20", "unlock_time": 1548422395 + }, + { + "achievement_id": "lvl30", + "achievement_name": "Got level 30", + "unlock_time": 1548495633 } ] } @@ -65,7 +80,7 @@ def test_failure(plugin, readline, write): } def test_unlock_achievement(plugin, write): - achievement = Achievement("lvl20", 1548422395) + achievement = Achievement(achievement_id="lvl20", unlock_time=1548422395) async def couritine(): plugin.unlock_achievement("14", achievement)