# Coverage for tests/e2e/test_contest.py : 100%

## 62 statements 62 run 0 missing 0 excluded 0 partial

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 -*-

2 from __future__ import annotations

3

4# -- stdlib --

5 import logging

6

7# -- third party --

8 import gevent

9

10# -- own --

11 from .mock import Environ, EventTap

12

13

14# -- code --

15 class GameEnded(Exception):

16 pass

17

18

19 log = logging.getLogger('UnitTest')

20

21

22 def wait():

23 gevent.idle(-100)

24 gevent.sleep(0.01)

25 gevent.idle(-100)

26

27

28 class TestContest(object):

29 def testContest(self):

30 env = Environ()

31 t = EventTap()

32

33 s = env.server_core()

34 proton = env.client_core()

35 a, b, c, d, e = [env.client_core() for _ in range(5)]

36 t.tap(proton, a, b, c, d, e)

37 proton.auth.login("Proton")

38 a.auth.login("Alice")

39 b.auth.login("Bob")

40 c.auth.login("Cirno")

41 e.auth.login("Eirin")

42 wait()

43

44 assert proton.auth.uid == 2

45 assert a.auth.uid > 0

46 assert b.auth.uid > 0

47 assert c.auth.uid > 0

48 assert e.auth.uid > 0

49

50 # Wrong players count

51 proton.contest.setup("TestContest", "THBattle2v2", [a.auth.uid, b.auth.uid]); wait()

52 assert t.take(proton.events.server_error) == 'wrong_players_count'

53 assert a.events.game_joined not in t

54 assert b.events.game_joined not in t

55

56 # Happy path

57 # Alice wondering in lobby,

58 # Bob fighting with Cirno,

59 # Cirno rubberducking Bob fighting Cirno (haha),

60 # and Daiyousei not showing at the time.

61 b.room.create('Wow', 'THBattleNewbie', {}); wait()

62 s.observe.add_bigbrother(c.auth.uid)

63 b.room.get_ready()

64 c.observe.observe(b.auth.uid); wait()

65 assert b.events.game_started in t

66 assert c.events.game_started in t

67 t.clear()

68 proton.contest.setup("TestContest", "THBattleDummy4", [i.auth.uid for i in (a, b, c)] + [s.backend.uid_of('Daiyousei')]); wait()

69 assert a.events.game_joined in t

70 assert b.events.game_joined not in t

71 assert c.events.game_joined in t

72 assert d.events.game_joined not in t

73 assert e.events.game_joined not in t

74

75 # Daiyousei poped up, should be pulled into contest

76 d.auth.login('Daiyousei'); wait()

77 gevent.sleep(0.02)

78 assert d.events.game_joined in t

79

80 # Bob exits, should be pulled into contest too

81 b.room.leave(); wait()

82 gevent.sleep(0.02)

83 assert b.events.game_joined in t

84

85 # Onlookers should not be able to interfere

86 gid = a.game.gid_of(t[a.events.game_joined])

87 e.room.join(gid); wait()

88 assert t.take(e.events.server_error) == 'not_competitor'

89

90 # Start the contest

91 t.clear()

92 a.room.get_ready()

93 b.room.get_ready()

94 c.room.get_ready()

95 d.room.get_ready()

96 wait()