async def test_achievement_zero_steps_increment(service: AchievementService): assert service.increment(achievement_id='3-4-5', steps=2, queue=[]) is None assert service.increment(achievement_id='3-4-5', steps=0, queue=[]) is None assert service.set_steps_at_least( achievement_id='3-4-5', steps=2, queue=[]) is None assert service.set_steps_at_least( achievement_id='3-4-5', steps=0, queue=[]) is None
async def test_update_multiple(service: AchievementService): content = '''{"updated_achievements": [ { "achievement_id": "1-2-3", "current_state": "UNLOCKED", "newly_unlocked": true}, { "achievement_id": "2-3-4", "current_state": "REVEALED", "newly_unlocked": false}, { "achievement_id": "3-4-5", "current_state": "LOCKED", "current_steps": 2, "newly_unlocked": false}, { "achievement_id": "4-5-6", "current_state": "UNLOCKED", "current_steps": 50, "newly_unlocked": false} ]}'''.encode('utf-8') service.api_accessor.api_post.coro.return_value = (None, content) queue = [] service.unlock('1-2-3', queue) service.reveal('2-3-4', queue) service.increment('3-4-5', 2, queue) service.set_steps_at_least('4-5-6', 3, queue) assert queue == [ dict(achievement_id='1-2-3', update_type='UNLOCK'), dict(achievement_id='2-3-4', update_type='REVEAL'), dict(achievement_id='3-4-5', update_type='INCREMENT', steps=2), dict(achievement_id='4-5-6', update_type='SET_STEPS_AT_LEAST', steps=3) ] result = await service.execute_batch_update(42, queue) assert result == json.loads(content.decode('utf-8'))['updated_achievements'] service.api_accessor.api_post.assert_called_once_with("/achievements/updateMultiple", 42, data=dict(updates=queue))
async def test_update_multiple(service: AchievementService): content = '''{"updated_achievements": [ { "achievement_id": "1-2-3", "current_state": "UNLOCKED", "newly_unlocked": true}, { "achievement_id": "2-3-4", "current_state": "REVEALED", "newly_unlocked": false}, { "achievement_id": "3-4-5", "current_state": "LOCKED", "current_steps": 2, "newly_unlocked": false}, { "achievement_id": "4-5-6", "current_state": "UNLOCKED", "current_steps": 50, "newly_unlocked": false} ]}'''.encode('utf-8') service.api_accessor.api_post.coro.return_value = (None, content) queue = [] service.unlock('1-2-3', queue) service.reveal('2-3-4', queue) service.increment('3-4-5', 2, queue) service.set_steps_at_least('4-5-6', 3, queue) assert queue == [ dict(achievement_id='1-2-3', update_type='UNLOCK'), dict(achievement_id='2-3-4', update_type='REVEAL'), dict(achievement_id='3-4-5', update_type='INCREMENT', steps=2), dict(achievement_id='4-5-6', update_type='SET_STEPS_AT_LEAST', steps=3) ] result = await service.execute_batch_update(42, queue) assert result == json.loads( content.decode('utf-8'))['updated_achievements'] service.api_accessor.api_post.assert_called_once_with( "/achievements/updateMultiple", 42, data=dict(updates=queue))
async def test_fill_queue(service: AchievementService): queue = [] service.unlock('1-2-3', queue) service.reveal('2-3-4', queue) service.increment('3-4-5', 2, queue) service.set_steps_at_least('4-5-6', 3, queue) assert queue == [ dict(achievement_id='1-2-3', update_type='UNLOCK'), dict(achievement_id='2-3-4', update_type='REVEAL'), dict(achievement_id='3-4-5', update_type='INCREMENT', steps=2), dict(achievement_id='4-5-6', update_type='SET_STEPS_AT_LEAST', steps=3) ]
async def test_fill_queue(service: AchievementService): queue = [] service.unlock("1-2-3", queue) service.reveal("2-3-4", queue) service.increment("3-4-5", 2, queue) service.set_steps_at_least("4-5-6", 3, queue) assert queue == [ dict(achievement_id="1-2-3", update_type="UNLOCK"), dict(achievement_id="2-3-4", update_type="REVEAL"), dict(achievement_id="3-4-5", update_type="INCREMENT", steps=2), dict(achievement_id="4-5-6", update_type="SET_STEPS_AT_LEAST", steps=3) ]
def achievement_service(api_accessor): from server.stats.achievement_service import AchievementService return AchievementService(api_accessor)
def service(api_accessor: ApiAccessor): return AchievementService(api_accessor)