feat(sync): add tests for the websocket token view

This commit is contained in:
Alexis Métaireau 2024-05-13 17:58:39 +02:00
parent 80eaa151de
commit 9be613e3ce
2 changed files with 58 additions and 0 deletions

View file

@ -249,3 +249,8 @@ def test_can_delete_datalayer(live_server, map, login, datalayer):
expect(markers).to_have_count(0) expect(markers).to_have_count(0)
# FIXME does not work, resolve to 1 element, even if this command is empty: # FIXME does not work, resolve to 1 element, even if this command is empty:
expect(layers).to_have_count(0) expect(layers).to_have_count(0)
def test_something(live_server, map, login, user):
page = login(user)
page.goto(f"{live_server.url}/map/{map.id}/ws-token")

View file

@ -5,6 +5,7 @@ from datetime import datetime, timedelta
import pytest import pytest
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user, get_user_model from django.contrib.auth import get_user, get_user_model
from django.core.signing import TimestampSigner
from django.test import RequestFactory from django.test import RequestFactory
from django.urls import reverse from django.urls import reverse
from django.utils.timezone import make_aware from django.utils.timezone import make_aware
@ -430,3 +431,55 @@ def test_home_feed(client, settings, user, tilelayer):
assert "A public map starred by non staff" not in content assert "A public map starred by non staff" not in content
assert "A private map starred by staff" not in content assert "A private map starred by staff" not in content
assert "A reserved map starred by staff" not in content assert "A reserved map starred by staff" not in content
@pytest.mark.django_db
def test_websocket_token_returns_login_required_if_not_connected(client, user, map):
token_url = reverse("map_websocket_auth_token", kwargs={"map_id": map.id})
resp = client.get(token_url)
assert "login_required" in resp.json()
@pytest.mark.django_db
def test_websocket_token_returns_403_if_unauthorized(client, user, user2, map):
client.login(username=map.owner.username, password="123123")
map.owner = user2
map.save()
token_url = reverse("map_websocket_auth_token", kwargs={"map_id": map.id})
resp = client.get(token_url)
assert resp.status_code == 403
@pytest.mark.django_db
def test_websocker_token_is_generated_for_anonymous(client, user, user2, map):
map.edit_status = Map.ANONYMOUS
map.save()
token_url = reverse("map_websocket_auth_token", kwargs={"map_id": map.id})
resp = client.get(token_url)
token = resp.json().get("token")
assert TimestampSigner().unsign_object(token, max_age=30)
@pytest.mark.django_db
def test_websocket_token_returns_a_valid_token_when_authorized(client, user, map):
client.login(username=map.owner.username, password="123123")
token_url = reverse("map_websocket_auth_token", kwargs={"map_id": map.id})
resp = client.get(token_url)
assert resp.status_code == 200
token = resp.json().get("token")
assert TimestampSigner().unsign_object(token, max_age=30)
@pytest.mark.django_db
def test_websocket_token_is_generated_for_editors(client, user, user2, map):
map.edit_status = Map.EDITORS
map.editors.add(user2)
map.save()
assert client.login(username=user2.username, password="456456")
token_url = reverse("map_websocket_auth_token", kwargs={"map_id": map.id})
resp = client.get(token_url)
token = resp.json().get("token")
assert TimestampSigner().unsign_object(token, max_age=30)