mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-06-24 07:08:48 +02:00
Use a unique socket for the drawing system
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
270
draw/tests.py
270
draw/tests.py
@ -1,6 +1,6 @@
|
||||
# Copyright (C) 2023 by Animath
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import asyncio
|
||||
from random import shuffle
|
||||
|
||||
from asgiref.sync import sync_to_async
|
||||
@ -48,25 +48,26 @@ class TestDraw(TestCase):
|
||||
"""
|
||||
await sync_to_async(self.async_client.force_login)(self.superuser)
|
||||
|
||||
tid = self.tournament.id
|
||||
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Connect to Websocket
|
||||
headers = [(b'cookie', self.async_client.cookies.output(header='', sep='; ').encode())]
|
||||
communicator = WebsocketCommunicator(AuthMiddlewareStack(URLRouter(routing.websocket_urlpatterns)),
|
||||
f"/ws/draw/{self.tournament.id}/",
|
||||
headers)
|
||||
"/ws/draw/", headers)
|
||||
connected, subprotocol = await communicator.connect()
|
||||
self.assertTrue(connected)
|
||||
|
||||
# Define language
|
||||
await communicator.send_json_to({'type': 'set_language', 'language': 'en'})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'set_language', 'language': 'en'})
|
||||
|
||||
# Ensure that Draw has not started
|
||||
self.assertFalse(await Draw.objects.filter(tournament=self.tournament).aexists())
|
||||
|
||||
# Must be an error since 1+1+1 != 12
|
||||
await communicator.send_json_to({'type': 'start_draw', 'fmt': '1+1+1'})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'start_draw', 'fmt': '1+1+1'})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], 'alert')
|
||||
self.assertEqual(resp['alert_type'], 'danger')
|
||||
@ -74,29 +75,30 @@ class TestDraw(TestCase):
|
||||
self.assertFalse(await Draw.objects.filter(tournament=self.tournament).aexists())
|
||||
|
||||
# Now start the draw
|
||||
await communicator.send_json_to({'type': 'start_draw', 'fmt': '3+4+5'})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'start_draw', 'fmt': '3+4+5'})
|
||||
|
||||
# Receive data after the start
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'alert')
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_poules', 'round': 1,
|
||||
{'tid': tid, 'type': 'set_poules', 'round': 1,
|
||||
'poules': [{'letter': 'A', 'teams': []},
|
||||
{'letter': 'B', 'teams': []},
|
||||
{'letter': 'C', 'teams': []}]})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_poules', 'round': 2,
|
||||
{'tid': tid, 'type': 'set_poules', 'round': 2,
|
||||
'poules': [{'letter': 'A', 'teams': []},
|
||||
{'letter': 'B', 'teams': []},
|
||||
{'letter': 'C', 'teams': []}]})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'alert')
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'draw_start', 'fmt': [5, 4, 3],
|
||||
{'tid': tid, 'type': 'draw_start', 'fmt': [5, 4, 3],
|
||||
'trigrams': ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF',
|
||||
'GGG', 'HHH', 'III', 'JJJ', 'KKK', 'LLL']})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_active', 'round': 1, 'poule': None, 'team': None})
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': None, 'team': None})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'notification')
|
||||
|
||||
# Ensure that now tournament has started
|
||||
@ -107,7 +109,7 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Try to relaunch the draw
|
||||
await communicator.send_json_to({'type': 'start_draw', 'fmt': '3+4+5'})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'start_draw', 'fmt': '3+4+5'})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], 'alert')
|
||||
self.assertEqual(resp['alert_type'], 'danger')
|
||||
@ -119,7 +121,7 @@ class TestDraw(TestCase):
|
||||
|
||||
for i, team in enumerate(self.teams):
|
||||
# Launch a new dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': team.trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': team.trigram})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], "dice")
|
||||
self.assertEqual(resp['team'], team.trigram)
|
||||
@ -130,7 +132,7 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp['result'], td.passage_dice)
|
||||
|
||||
# Try to relaunch the dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': team.trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': team.trigram})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], 'alert')
|
||||
self.assertEqual(resp['message'], "You've already launched the dice.")
|
||||
@ -151,7 +153,7 @@ class TestDraw(TestCase):
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'alert')
|
||||
|
||||
for i in range(dup_count):
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': None})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': None})
|
||||
await communicator.receive_json_from()
|
||||
|
||||
# Reset dices
|
||||
@ -161,8 +163,10 @@ class TestDraw(TestCase):
|
||||
self.assertIsNone(resp['result'])
|
||||
|
||||
# Hide and re-display the dice
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': True})
|
||||
|
||||
# Set pools for the two rounds
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_poules')
|
||||
@ -172,7 +176,7 @@ class TestDraw(TestCase):
|
||||
|
||||
# Manage the first pool
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_active', 'round': 1, 'poule': 'A', 'team': None})
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'A', 'team': None})
|
||||
r: Round = await Round.objects.prefetch_related('current_pool__current_team__participation__team')\
|
||||
.aget(number=1, draw=draw)
|
||||
p = r.current_pool
|
||||
@ -188,7 +192,7 @@ class TestDraw(TestCase):
|
||||
i = 0
|
||||
async for td in p.teamdraw_set.prefetch_related('participation__team').all():
|
||||
# Launch a new dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], "dice")
|
||||
trigram = td.participation.team.trigram
|
||||
@ -200,7 +204,7 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp['result'], td.choice_dice)
|
||||
|
||||
# Try to relaunch the dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': trigram})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], 'alert')
|
||||
self.assertEqual(resp['message'], "You've already launched the dice.")
|
||||
@ -222,7 +226,7 @@ class TestDraw(TestCase):
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'alert')
|
||||
|
||||
for i in range(dup_count):
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': None})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': None})
|
||||
await communicator.receive_json_from()
|
||||
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
@ -232,27 +236,32 @@ class TestDraw(TestCase):
|
||||
td = p.current_team
|
||||
trigram = td.participation.team.trigram
|
||||
self.assertEqual(td.choose_index, 0)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'A',
|
||||
'team': td.participation.team.trigram})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1,
|
||||
'poule': 'A', 'team': td.participation.team.trigram})
|
||||
# Dice is hidden for everyone first
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': False})
|
||||
# The draw box is displayed for the current team and for volunteers
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Try to launch a dice while it is not the time
|
||||
await communicator.send_json_to({'type': 'dice', 'trigram': None})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'dice', 'trigram': None})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], 'alert')
|
||||
self.assertEqual(resp['message'], "This is not the time for this.")
|
||||
|
||||
# Draw a problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': True})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -265,17 +274,19 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Try to redraw a problem while it is not the time
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
resp = await communicator.receive_json_from()
|
||||
self.assertEqual(resp['type'], 'alert')
|
||||
self.assertEqual(resp['message'], "This is not the time for this.")
|
||||
|
||||
# Reject the first problem
|
||||
await communicator.send_json_to({'type': 'reject'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'reject'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'reject_problem', 'round': 1, 'team': trigram, 'rejected': [purposed]})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'reject_problem', 'round': 1, 'team': trigram, 'rejected': [purposed]})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
@ -287,17 +298,19 @@ class TestDraw(TestCase):
|
||||
td = p.current_team
|
||||
trigram = td.participation.team.trigram
|
||||
self.assertEqual(td.choose_index, i + 1)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'A',
|
||||
'team': trigram})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'A', 'team': trigram})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Draw a problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': True})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -313,11 +326,13 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Accept the problem
|
||||
await communicator.send_json_to({'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': 1 + (i % 2)})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': 1 + (i % 2)})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
@ -332,15 +347,17 @@ class TestDraw(TestCase):
|
||||
td = p.current_team
|
||||
trigram = td.participation.team.trigram
|
||||
self.assertEqual(td.choose_index, 0)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'A',
|
||||
'team': trigram})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'A', 'team': trigram})
|
||||
|
||||
# Draw and reject 100 times a problem
|
||||
for _i in range(100):
|
||||
# Draw a problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': True})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -349,10 +366,12 @@ class TestDraw(TestCase):
|
||||
self.assertIn(td.purposed, range(3, len(settings.PROBLEMS) + 1))
|
||||
|
||||
# Reject
|
||||
await communicator.send_json_to({'type': 'reject'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'reject'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'reject_problem')
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
@ -361,8 +380,8 @@ class TestDraw(TestCase):
|
||||
# Ensures that this is still the first team
|
||||
p: Pool = await Pool.objects.prefetch_related('current_team__participation__team').aget(round=r, letter=1)
|
||||
self.assertEqual(p.current_team, td)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'A',
|
||||
'team': trigram})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'A', 'team': trigram})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
@ -372,9 +391,11 @@ class TestDraw(TestCase):
|
||||
self.assertGreaterEqual(td.penalty, 1)
|
||||
|
||||
# Draw a last problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': True})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -382,19 +403,21 @@ class TestDraw(TestCase):
|
||||
self.assertIn(td.purposed, range(1, len(settings.PROBLEMS) + 1))
|
||||
|
||||
# Accept the problem
|
||||
await communicator.send_json_to({'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': td.purposed})
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': td.purposed})
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
|
||||
# Reorder the pool since there are 5 teams
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'reorder_poule')
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_active', 'round': 1, 'poule': 'B', 'team': None})
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'B', 'team': None})
|
||||
|
||||
# Start pool 2
|
||||
r: Round = await Round.objects.prefetch_related('current_pool__current_team__participation__team')\
|
||||
@ -412,7 +435,7 @@ class TestDraw(TestCase):
|
||||
i = 0
|
||||
async for td in p.teamdraw_set.prefetch_related('participation__team').all():
|
||||
# Launch a new dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.receive_json_from()
|
||||
await td.arefresh_from_db()
|
||||
td.choice_dice = 101 + i # Avoid duplicates
|
||||
@ -427,20 +450,24 @@ class TestDraw(TestCase):
|
||||
td = p.current_team
|
||||
trigram = td.participation.team.trigram
|
||||
self.assertEqual(td.choose_index, i)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'B',
|
||||
'team': trigram})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'B', 'team': trigram})
|
||||
if i == 0:
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Draw a problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': True})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -458,14 +485,17 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Accept the problem
|
||||
await communicator.send_json_to({'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': i + 1})
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': i + 1})
|
||||
if i < 3:
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
else:
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
@ -483,8 +513,8 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(p.size, 3)
|
||||
self.assertEqual(await p.teamdraw_set.acount(), 3)
|
||||
self.assertEqual(p.current_team, None)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'C',
|
||||
'team': None})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'C', 'team': None})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
@ -493,7 +523,7 @@ class TestDraw(TestCase):
|
||||
i = 0
|
||||
async for td in p.teamdraw_set.prefetch_related('participation__team').all():
|
||||
# Launch a new dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.receive_json_from()
|
||||
await td.arefresh_from_db()
|
||||
td.choice_dice = 101 + i # Avoid duplicates
|
||||
@ -508,20 +538,24 @@ class TestDraw(TestCase):
|
||||
td = p.current_team
|
||||
trigram = td.participation.team.trigram
|
||||
self.assertEqual(td.choose_index, i)
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'set_active', 'round': 1, 'poule': 'C',
|
||||
'team': trigram})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 1, 'poule': 'C', 'team': trigram})
|
||||
if i == 0:
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Draw a problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': True})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -539,16 +573,18 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Accept the problem
|
||||
await communicator.send_json_to({'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'buttons_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': i + 1})
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'set_problem', 'round': 1, 'team': trigram, 'problem': i + 1})
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
self.assertEqual(td.accepted, i + 1)
|
||||
if i == 2:
|
||||
break
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
# Render page
|
||||
@ -572,8 +608,10 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(resp['type'], 'set_poules')
|
||||
self.assertEqual(resp['round'], 2)
|
||||
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'export_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'export_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
# Render page
|
||||
@ -589,12 +627,12 @@ class TestDraw(TestCase):
|
||||
self.assertEqual(p.size, 5 - i)
|
||||
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_active', 'round': 2, 'poule': chr(65 + i), 'team': None})
|
||||
{'tid': tid, 'type': 'set_active', 'round': 2, 'poule': chr(65 + i), 'team': None})
|
||||
|
||||
j = 0
|
||||
async for td in p.teamdraw_set.prefetch_related('participation__team').all():
|
||||
# Launch a new dice
|
||||
await communicator.send_json_to({'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "dice", 'trigram': td.participation.team.trigram})
|
||||
await communicator.receive_json_from()
|
||||
await td.arefresh_from_db()
|
||||
td.choice_dice = 101 + j # Avoid duplicates
|
||||
@ -612,23 +650,24 @@ class TestDraw(TestCase):
|
||||
trigram = td.participation.team.trigram
|
||||
self.assertEqual(td.choose_index, j)
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'set_active', 'round': 2, 'poule': chr(65 + i),
|
||||
{'tid': tid, 'type': 'set_active', 'round': 2, 'poule': chr(65 + i),
|
||||
'team': trigram})
|
||||
if j == 0:
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'dice_visibility', 'visible': False})
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'box_visibility', 'visible': True})
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
|
||||
# Render page
|
||||
resp = await self.async_client.get(reverse('draw:index'))
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# Draw a problem
|
||||
await communicator.send_json_to({'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'draw_problem'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'buttons_visibility', 'visible': True})
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': False})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
@ -640,44 +679,55 @@ class TestDraw(TestCase):
|
||||
self.assertNotEqual(td.purposed, old_td.accepted)
|
||||
|
||||
# Accept the problem
|
||||
await communicator.send_json_to({'type': 'accept'})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'accept'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'type': 'buttons_visibility', 'visible': False})
|
||||
{'tid': tid, 'type': 'buttons_visibility', 'visible': False})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_problem')
|
||||
td: TeamDraw = await TeamDraw.objects.prefetch_related('participation__team').aget(pk=td.pk)
|
||||
self.assertIsNone(td.purposed)
|
||||
if j == 4 - i:
|
||||
break
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'box_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
if i == 0:
|
||||
# Reorder the pool since there are 5 teams
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'reorder_poule')
|
||||
if i < 2:
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'dice_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'dice_visibility', 'visible': True})
|
||||
else:
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'export_visibility', 'visible': True})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'export_visibility', 'visible': True})
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_info')
|
||||
|
||||
self.assertEqual((await communicator.receive_json_from())['type'], 'set_active')
|
||||
|
||||
# Export the draw
|
||||
await communicator.send_json_to({'type': 'export'})
|
||||
self.assertEqual(await communicator.receive_json_from(), {'type': 'export_visibility', 'visible': False})
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'export'})
|
||||
self.assertEqual(await communicator.receive_json_from(),
|
||||
{'tid': tid, 'type': 'export_visibility', 'visible': False})
|
||||
|
||||
# Cancel all steps and reset all
|
||||
for i in range(1000):
|
||||
await communicator.send_json_to({'type': 'cancel'})
|
||||
if not await Draw.objects.filter(tournament=self.tournament).aexists():
|
||||
await communicator.send_json_to({'tid': tid, 'type': 'cancel'})
|
||||
|
||||
# Purge receive queue
|
||||
while True:
|
||||
try:
|
||||
await communicator.receive_json_from()
|
||||
except asyncio.TimeoutError:
|
||||
break
|
||||
else:
|
||||
current_state = (await Draw.objects.filter(tournament=self.tournament).prefetch_related(
|
||||
|
||||
if await Draw.objects.filter(tournament_id=tid).aexists():
|
||||
print((await Draw.objects.filter(tournament_id=tid).aexists()))
|
||||
current_state = (await Draw.objects.filter(tournament_id=tid).prefetch_related(
|
||||
'current_round__current_pool__current_team__participation__team').aget()).get_state()
|
||||
raise AssertionError("Draw wasn't aborted after 1000 steps, current state: " + current_state)
|
||||
|
||||
# Abort while the tournament is already aborted
|
||||
await communicator.send_json_to({'type': "abort"})
|
||||
await communicator.send_json_to({'tid': tid, 'type': "abort"})
|
||||
|
||||
def test_admin_pages(self):
|
||||
"""
|
||||
|
Reference in New Issue
Block a user