Coverage for tests/e2e/test_item.py : 100%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2from __future__ import annotations
4# -- stdlib --
5# -- third party --
6import gevent
8# -- own --
9from .mock import Environ, EventTap
12# -- code --
13class GameEnded(Exception):
14 pass
17def wait():
18 gevent.idle(-100)
19 gevent.sleep(0.01)
20 gevent.idle(-100)
23class TestItem(object):
24 def testEuropean(self):
25 env = Environ()
26 t = EventTap()
28 s = env.server_core()
29 a, b, c, d = [env.client_core() for _ in range(4)]
30 t.tap(a, b, c, d)
32 a.auth.login("Alice")
33 b.auth.login("Bob")
34 c.auth.login("Cirno")
35 d.auth.login("Daiyousei")
36 wait()
38 # Can't use non-existent item
39 a.room.create('Boom', 'THBattleDummy4', {}); wait()
40 gid = a.game.gid_of(t[a.events.game_joined])
41 b.room.join(gid)
42 c.room.join(gid)
43 d.room.join(gid)
44 a.room.use_item('whatever-blah-blah'); wait()
45 assert t.take(a.events.server_error) == 'invalid_item_sku'
47 # Can't use item not applicable to chosen mode
48 a.room.use_item('imperial-role:attacker'); wait()
49 assert t.take(a.events.server_error) == 'incorrect_game_mode'
51 # Can't use item which do not own
52 s.backend.items[a.auth.uid] = {'european': 0}
53 a.room.use_item('european'); wait()
54 assert t.take(a.events.server_error) == 'item_not_found'
56 # Happy path
57 s.backend.items[a.auth.uid] = {'european': 1}
58 a.room.use_item('european'); wait()
59 assert t.take(a.events.server_info) == 'use_item_success'
61 # 2nd use should conflict
62 s.backend.items[b.auth.uid] = {'european': 1}
63 b.room.use_item('european'); wait()
64 assert t.take(b.events.server_error) == 'european_conflict'
66 # Should consume item when game started
67 a.room.get_ready()
68 b.room.get_ready()
69 c.room.get_ready()
70 d.room.get_ready()
71 wait()
72 assert s.backend.items[a.auth.uid]['european'] == 0
73 assert s.backend.items[b.auth.uid]['european'] == 1