Skip to content

Commit

Permalink
chore: add more tests for team related views
Browse files Browse the repository at this point in the history
  • Loading branch information
yohanboniface committed Dec 13, 2024
1 parent 7c80839 commit fe06a0f
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 75 deletions.
82 changes: 82 additions & 0 deletions umap/tests/test_dashboard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import pytest
from django.contrib.auth import get_user_model
from django.urls import reverse

from umap.models import Map

from .base import MapFactory, UserFactory

User = get_user_model()

pytestmark = pytest.mark.django_db


def test_user_dashboard_is_restricted_to_logged_in(client):
response = client.get(reverse("user_dashboard"))
assert response.status_code == 302
assert response["Location"] == "/en/login/?next=/en/me"


def test_user_dashboard_display_user_maps(client, map):
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name in body
assert f"{map.get_absolute_url()}?edit" in body
assert f"{map.get_absolute_url()}?share" in body
assert f"/map/{map.pk}/download" in body
assert "Everyone (public)" in body
assert "Owner only" in body


def test_user_dashboard_do_not_display_blocked_user_maps(client, map):
map.share_status = Map.BLOCKED
map.save()
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name not in body


def test_user_dashboard_do_not_display_deleted_user_maps(client, map):
map.share_status = Map.DELETED
map.save()
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name not in body


@pytest.mark.parametrize("share_status", [Map.DRAFT, Map.PRIVATE, Map.PUBLIC, Map.OPEN])
def test_user_dashboard_display_user_team_maps(client, map, team, user, share_status):
user.teams.add(team)
user.save()
map.team = team
map.share_status = share_status
map.save()
assert map.owner != user
client.login(username=user.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name in body
assert map.get_absolute_url() in body


def test_user_dashboard_display_user_maps_distinct(client, map):
# cf https://github.com/umap-project/umap/issues/1325
anonymap = MapFactory(name="Map witout owner should not appear")
user1 = UserFactory(username="user1")
user2 = UserFactory(username="user2")
map.editors.add(user1)
map.editors.add(user2)
map.save()
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert body.count(f'<a href="/en/map/test-map_{map.pk}">test map</a>') == 1
assert body.count(anonymap.name) == 0
33 changes: 32 additions & 1 deletion umap/tests/test_team_views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
from django.urls import reverse

from umap.models import Team
from umap.models import Map, Team

pytestmark = pytest.mark.django_db

Expand All @@ -15,6 +15,37 @@ def test_can_see_team_maps(client, map, team):
assert map.name in response.content.decode()


def test_others_cannot_see_team_private_maps_in_team_page(client, map, team, user):
map.team = team
map.share_status = Map.PRIVATE
map.save()
url = reverse("team_maps", args=(team.pk,))
response = client.get(url)
assert response.status_code == 200
assert map.name not in response.content.decode()
# User is not in team
client.login(username=user.username, password="123123")
response = client.get(url)
assert response.status_code == 200
assert map.name not in response.content.decode()


@pytest.mark.parametrize("share_status", [Map.PRIVATE, Map.DRAFT])
def test_members_can_see_private_maps_in_team_page(
client, map, team, user, share_status
):
map.team = team
map.share_status = share_status
map.save()
user.teams.add(team)
user.save()
url = reverse("team_maps", args=(team.pk,))
client.login(username=user.username, password="123123")
response = client.get(url)
assert response.status_code == 200
assert map.name not in response.content.decode()


def test_user_can_see_their_teams(client, team, user):
user.teams.add(team)
user.save()
Expand Down
74 changes: 0 additions & 74 deletions umap/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,80 +267,6 @@ def test_change_user_slug(client, user, settings):
assert f"/en/user/{user.pk}/" in response.content.decode()


@pytest.mark.django_db
def test_user_dashboard_is_restricted_to_logged_in(client):
response = client.get(reverse("user_dashboard"))
assert response.status_code == 302
assert response["Location"] == "/en/login/?next=/en/me"


@pytest.mark.django_db
def test_user_dashboard_display_user_maps(client, map):
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name in body
assert f"{map.get_absolute_url()}?edit" in body
assert f"{map.get_absolute_url()}?share" in body
assert f"/map/{map.pk}/download" in body
assert "Everyone (public)" in body
assert "Owner only" in body


@pytest.mark.django_db
def test_user_dashboard_do_not_display_blocked_user_maps(client, map):
map.share_status = Map.BLOCKED
map.save()
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name not in body


@pytest.mark.django_db
def test_user_dashboard_do_not_display_deleted_user_maps(client, map):
map.share_status = Map.DELETED
map.save()
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name not in body


@pytest.mark.django_db
def test_user_dashboard_display_user_team_maps(client, map, team, user):
user.teams.add(team)
user.save()
map.team = team
map.save()
client.login(username=user.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert map.name in body
assert map.get_absolute_url() in body


@pytest.mark.django_db
def test_user_dashboard_display_user_maps_distinct(client, map):
# cf https://github.com/umap-project/umap/issues/1325
anonymap = MapFactory(name="Map witout owner should not appear")
user1 = UserFactory(username="user1")
user2 = UserFactory(username="user2")
map.editors.add(user1)
map.editors.add(user2)
map.save()
client.login(username=map.owner.username, password="123123")
response = client.get(reverse("user_dashboard"))
assert response.status_code == 200
body = response.content.decode()
assert body.count(f'<a href="/en/map/test-map_{map.pk}">test map</a>') == 1
assert body.count(anonymap.name) == 0


@pytest.mark.django_db
def test_logout_should_return_redirect(client, user, settings):
client.login(username=user.username, password="123123")
Expand Down

0 comments on commit fe06a0f

Please sign in to comment.