generateur_v3/backend/api/tests/test_room.py

498 lines
25 KiB
Python

from fastapi import HTTPException
from fastapi.testclient import TestClient
from tests.test_auth import test_register
def test_create_room_no_auth(client: TestClient, public=False):
r = client.post('/room', json={"name": "test_room",
"public": public}, params={'username': "lilian"})
print(r.json())
assert "id_code" in r.json()['room']
assert r.json()['member']['reconnect_code'] is not None
assert "id_code" in r.json()['member']
assert {"room": {**r.json()['room'], 'id_code': None}, "member": {**r.json()['member'], "reconnect_code": None, "id_code": None}} == {"room": {"id_code": None, "name": "test_room",
"public": public}, 'member': {"username": "lilian", "reconnect_code": None, "isUser": False, "isAdmin": True, "id_code": None}}
return r.json()
def test_create_room_no_auth_invalid(client: TestClient):
r = client.post('/room', json={"name": "test_room"*21,
"public": False}, params={'username': "lilian"*21})
print(r.json())
assert r.json() == {'detail': {'username_error': 'ensure this value has at most 20 characters',
'name_error': 'ensure this value has at most 20 characters'}}
def test_create_room_auth(client: TestClient, token=None):
if token is None:
token = test_register(client=client)['access']
r = client.post('/room', json={"name": "test_room",
"public": False}, headers={"Authorization": "Bearer " + token})
print(r.json())
assert "id_code" in r.json()['room']
assert "id_code" in r.json()['member']
assert {**r.json(), "room": {**r.json()['room'], 'id_code': None}} == {"room": {"id_code": None, "name": "test_room",
"public": False}, 'member': {"username": "lilian", "reconnect_code": "", "isUser": True, "isAdmin": True, "id_code": r.json()['member']['id_code']}}
return r.json()
def test_room_not_found(client: TestClient):
try:
with client.websocket_connect('/ws/room/eee') as r:
pass
except HTTPException as e:
assert True
except Exception:
assert False
def test_login_no_auth(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as ws:
ws.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
data = ws.receive_json()
assert "id_code" in data['data']['member']
assert data == {'type': "loggedIn", "data": {"member": {
"username": member['username'], "reconnect_code": member['reconnect_code'], "isAdmin": True, "isUser": False, "id_code": data['data']["member"]["id_code"]}}}
def test_login_no_auth_not_in_room(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as ws:
ws.send_json({"type": "login", "data": {
"reconnect_code": "lol"}})
data = ws.receive_json()
print(data)
assert data == {'type': "error", "data": {
"msg": "Utilisateur introuvable dans cette salle"}}
def test_login_auth(client: TestClient):
token = test_register(client=client)['access']
room = test_create_room_auth(client=client, token=token)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as ws:
ws.send_json({"type": "login", "data": {"token": token}})
data = ws.receive_json()
print(data)
assert "id_code" in data["data"]['member']
assert data == {'type': "loggedIn", "data": {"member": {
"username": member['username'], "isAdmin": True, "isUser": True, 'reconnect_code': "", "id_code": data['data']["member"]["id_code"]}}}
def test_login_auth_not_in_room(client: TestClient):
token = test_register(client=client, username="lilian2")['access']
room = test_create_room_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as ws:
ws.send_json({"type": "login", "data": {"token": token}})
data = ws.receive_json()
print(data)
assert data == {'type': "error", "data": {
"msg": "Utilisateur introuvable dans cette salle"}}
def test_join_auth(client: TestClient):
token = test_register(client, username="lilian2")['access']
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"token": token}})
mdata = member.receive_json()
assert "waiter_id" in mdata['data']['waiter']
assert mdata == {"type": "waiting", "data": {"waiter": {
"username": "lilian2", "waiter_id": mdata['data']['waiter']['waiter_id']}}}
admin.send_json({"type": "ping_room"})
adata = admin.receive_json()
assert adata == {'type': "waiter", 'data': {
"waiter": {"waiter_id": mdata['data']['waiter']['waiter_id'], "username": "lilian2"}}}
admin.send_json({"type": "accept", "data": {
"waiter_id": mdata['data']['waiter']['waiter_id']}})
mdata = member.receive_json()
print('MDATA', mdata)
assert mdata == {"type": "accepted", "data": {"member": {
"username": "lilian2", "isUser": True, "isAdmin": False, "reconnect_code": "", "id_code": mdata['data']["member"]["id_code"]}}}
adata = admin.receive_json()
assert adata == {'type': "joined", 'data': {
"member": {"reconnect_code": "", "username": "lilian2", "isUser": True, "isAdmin": False, "id_code": adata['data']["member"]["id_code"]}}}
admin.send_json({"type": "ping_room"})
mdata = member.receive_json()
assert mdata == {"type": "ping", "data": {}}
def test_join_waiter_not_found(client: TestClient):
token = test_register(client, username="lilian2")['access']
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
admin.send_json({"type": "accept", "data": {"waiter_id": "OOOO"}})
data = admin.receive_json()
assert data == {"type": "error", "data": {"msg": "Utilisateur introuvable"}}
def test_join_no_auth(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json(
{"type": "join", "data": {"username": "member"}})
mdata = memberws.receive_json()
assert "waiter_id" in mdata['data']['waiter']
assert mdata == {"type": "waiting", "data": {"waiter": {
"username": "member", "waiter_id": mdata['data']['waiter']['waiter_id']}}}
adata = admin.receive_json()
assert adata == {'type': "waiter", 'data': {
"waiter": {"waiter_id": mdata['data']['waiter']['waiter_id'], "username": "member"}}}
admin.send_json({"type": "accept", "data": {
"waiter_id": mdata['data']['waiter']['waiter_id']}})
mdata = memberws.receive_json()
new_reconnect = mdata['data']['member']['reconnect_code']
assert 'reconnect_code' in mdata['data']['member']
assert mdata == {"type": "accepted", "data": {"member": {
"username": "member", "reconnect_code": new_reconnect, "isUser": False, "isAdmin": False, "id_code": mdata['data']["member"]["id_code"]}}}
adata = admin.receive_json()
assert adata == {'type': "joined", 'data': {
"member": {"reconnect_code": new_reconnect, "username": "member", "isUser": False, "isAdmin": False, "id_code": adata['data']["member"]["id_code"]}}}
admin.send_json({"type": "ping_room"})
mdata = memberws.receive_json()
assert mdata == {"type": "ping", "data": {}}
return {"room": room['room'], "members": [member['reconnect_code'], new_reconnect]}
def test_join_no_auth_username_error(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"username": "lilian"}})
mdata = member.receive_json()
assert mdata == {"type": "error", "data": {
"msg": "Nom d'utilisateur invalide ou indisponible"}}
def test_join_no_auth_username_too_long(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"username": "lilian"*21}})
mdata = member.receive_json()
assert mdata == {"type": "error", "data": {"msg": "Nom d'utilisateur invalide ou indisponible"}}
def test_join_auth_refused(client: TestClient):
token = test_register(client, username="lilian2")['access']
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"token": token}})
mdata = member.receive_json()
assert "waiter_id" in mdata['data']['waiter']
assert mdata == {"type": "waiting", "data": {"waiter": {
"username": "lilian2", "waiter_id": mdata['data']['waiter']['waiter_id']}}}
waiter_id = mdata['data']['waiter']['waiter_id']
adata = admin.receive_json()
assert adata == {'type': "waiter", 'data': {
"waiter": {"waiter_id": waiter_id, "username": "lilian2"}}}
admin.send_json({"type": "refuse", "data": {
"waiter_id": waiter_id}})
mdata = member.receive_json()
assert mdata == {"type": "refused", "data": {
"waiter_id": waiter_id}}
def test_join_auth_in_room_yet(client: TestClient):
token = test_register(client, username="lilian")['access']
room = test_create_room_auth(client=client, token=token)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"token": token}})
mdata = member.receive_json()
assert mdata == {"type": "loggedIn", "data": {"member": {
"username": "lilian", "isAdmin": True, "isUser": True, 'reconnect_code': "", "id_code": mdata['data']["member"]["id_code"]}}}
def test_join_auth_public(client: TestClient):
token = test_register(client, username="lilian2")['access']
room = test_create_room_no_auth(client=client, public=True)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"token": token}})
mdata = member.receive_json()
assert mdata == {"type": "accepted", "data": {"member": {
"username": "lilian2", "isUser": True, "isAdmin": False, "reconnect_code": "", "id_code": mdata['data']["member"]["id_code"]}}}
adata = admin.receive_json()
assert adata == {'type': "joined", 'data': {
"member": {"reconnect_code": "", "username": "lilian2", "isUser": True, "isAdmin": False, "id_code": mdata['data']["member"]["id_code"]}}}
admin.send_json({"type": "ping_room"})
mdata = member.receive_json()
assert mdata == {"type": "ping", "data": {}}
def test_join_no_auth_public(client: TestClient):
room = test_create_room_no_auth(client=client, public=True)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"username": "member"}})
mdata = member.receive_json()
assert 'reconnect_code' in mdata['data']['member']
assert mdata == {"type": "accepted", "data": {"member": {
"username": "member", "reconnect_code": mdata['data']['member']['reconnect_code'], "isUser": False, "isAdmin": False, "id_code": mdata['data']["member"]["id_code"]}}}
adata = admin.receive_json()
assert adata == {'type': "joined", 'data': {
"member": {"reconnect_code": mdata['data']['member']['reconnect_code'], "username": "member", "isUser": False, "isAdmin": False, "id_code": mdata['data']["member"]["id_code"]}}}
member.send_json({"type": "update_groups"})
admin.send_json({"type": "ping_room"})
mdata = member.receive_json()
assert mdata == {"type": "ping", "data": {}}
def test_join_auth_unauthorized(client: TestClient):
token = test_register(client, username="lilian2")['access']
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({"type": "join", "data": {"token": token}})
mdata = member.receive_json()
assert "waiter_id" in mdata['data']['waiter']
assert mdata == {"type": "waiting", "data": {"waiter": {
"username": "lilian2", "waiter_id": mdata['data']['waiter']['waiter_id']}}}
adata = admin.receive_json()
assert adata == {'type': "waiter", 'data': {
"waiter": {"waiter_id": mdata['data']['waiter']['waiter_id'], "username": "lilian2"}}}
member.send_json({"type": "refuse", "data": {
"waiter_id": mdata['data']['waiter']['waiter_id']}})
mdata = member.receive_json()
assert mdata == {"type": "error", "data": {
"msg": "Vous n'avez pas la permission de faire ca"}}
def test_connect_admin(client: TestClient):
room = test_join_no_auth(client=client)
members = room['members']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": members[0]}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as member:
member.send_json({'type': "login", "data": {
"reconnect_code": members[1]}})
adata = admin.receive_json()
assert adata == {"type": "connect", "data": {"member": {
"username": "member", "reconnect_code": members[1], "isAdmin": False, "isUser": False, "id_code": adata['data']["member"]["id_code"]}}}
def test_connect_member(client: TestClient):
room = test_join_no_auth(client=client)
members = room['members']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "login", "data": {
"reconnect_code": members[1]}})
memberws.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({'type': "login", "data": {
"reconnect_code": members[0]}})
mdata = memberws.receive_json()
assert mdata == {"type": "connect", "data": {"member": {
"username": "lilian", "reconnect_code": "", "isAdmin": True, "isUser": False, "id_code": mdata['data']["member"]["id_code"]}}}
def test_disconnect(client: TestClient):
room = test_join_no_auth(client=client)
members = room['members']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "login", "data": {
"reconnect_code": members[1]}})
memberws.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({'type': "login", "data": {
"reconnect_code": members[0]}})
memberws.receive_json()
admin.close()
mdata = memberws.receive_json()
assert mdata == {"type": "disconnect", "data": {"member": {
"username": "lilian", "reconnect_code": "", "isAdmin": True, "isUser": False, "id_code": mdata['data']["member"]["id_code"]}}}
def test_disconnect_waiter(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({'type': "join", "data": {
"username": "test"}})
mdata = memberws.receive_json()
admin.receive_json()
memberws.close()
adata = admin.receive_json()
assert adata == {"type": "disconnect_waiter", "data": {"waiter": {**mdata['data']['waiter']}}}
def test_leave(client: TestClient):
room = test_create_room_no_auth(client=client, public=True)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member["reconnect_code"]}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "join", "data": {
"username":"test"}})
m = memberws.receive_json()
admin.receive_json()
memberws.send_json({"type": "leave"})
data = memberws.receive_json()
assert data == {"type": "successfully_leaved", "data": {}}
adata = admin.receive_json()
assert adata == {"type": "leaved", "data": {"member": {
"username": "test", "reconnect_code": m["data"]['member']["reconnect_code"], "isAdmin": False, "isUser": False, "id_code": adata['data']["member"]["id_code"]}}}
def test_leave_not_connected(client: TestClient):
room = test_create_room_no_auth(client=client)
members = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "leave"})
data = memberws.receive_json()
assert data == {"type": "error", "data": {
"msg": "Vous n'êtes connecté à aucune salle"}}
def test_leave_admin(client: TestClient):
room = test_create_room_no_auth(client=client)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member["reconnect_code"]}})
admin.receive_json()
admin.send_json({"type": "leave"})
data = admin.receive_json()
assert data == {"type": "error", "data": {
"msg": "Vous ne pouvez pas quitter une salle dont vous êtes l'administrateur"}}
def test_ban_anonymous(client: TestClient):
room = test_create_room_no_auth(client=client, public=True)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member['reconnect_code']}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "join", "data": {
"username": "test"}})
m = memberws.receive_json()
reconnect_code = m['data']['member']['reconnect_code']
id_code = m['data']['member']['id_code']
admin.receive_json()
admin.send_json({"type": "ban", "data": {"member_id": m['data']['member']['id_code']}})
mdata = memberws.receive_json()
assert mdata == {"type": "banned", "data": {}}
adata = admin.receive_json()
assert adata == {"type": "leaved", "data": {"member": {
"username": "test", "reconnect_code": reconnect_code, "isUser": False, "isAdmin": False, "id_code": id_code}}}
def test_ban_anonymous_unauthorized(client: TestClient):
room = test_create_room_no_auth(client=client, public=True)
members = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": members["reconnect_code"]}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "join", "data": {
"username": "test"}})
memberws.receive_json()
memberws.send_json({"type": "ban", "data": {"member_id": "OOO"}})
mdata = memberws.receive_json()
assert mdata == {"type": "error", "data": {
"msg": "Vous n'avez pas la permission de faire ca"}}
def test_ban_admin(client: TestClient):
room = test_create_room_no_auth(client=client)
members = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": members["reconnect_code"]}})
data = admin.receive_json()
admin.send_json({"type": "ban", "data": {"member_id": data['data']['member']['id_code']}})
a = admin.receive_json()
assert a == {'type': "error", "data": {
"msg": "Vous ne pouvez pas bannir un administrateur"}}
def test_ban_user(client: TestClient):
token = test_register(client=client, username="lilian2")['access']
room = test_create_room_no_auth(client=client, public=True)
member = room['member']
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as admin:
admin.send_json({"type": "login", "data": {
"reconnect_code": member["reconnect_code"]}})
admin.receive_json()
with client.websocket_connect(f"/ws/room/" + room['room']['id_code']) as memberws:
memberws.send_json({"type": "join", "data": {"token": token}})
m = memberws.receive_json()
admin.receive_json()
admin.send_json(
{"type": "ban", "data": {"member_id": m['data']['member']['id_code']}})
mdata = memberws.receive_json()
assert mdata == {"type": "banned", "data": {}}
adata = admin.receive_json()
assert adata == {"type": "leaved", "data": {"member": {
"username": "lilian2", "reconnect_code": "", "isUser": True, "isAdmin": False, "id_code": m['data']['member']['id_code']}}}