diff --git a/umap/tests/test_dashboard.py b/umap/tests/test_dashboard.py new file mode 100644 index 000000000..30debc41c --- /dev/null +++ b/umap/tests/test_dashboard.py @@ -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'test map') == 1 + assert body.count(anonymap.name) == 0 diff --git a/umap/tests/test_team_views.py b/umap/tests/test_team_views.py index 7bce42b04..299280564 100644 --- a/umap/tests/test_team_views.py +++ b/umap/tests/test_team_views.py @@ -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 @@ -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() diff --git a/umap/tests/test_views.py b/umap/tests/test_views.py index 420fe16e6..a0de69f86 100644 --- a/umap/tests/test_views.py +++ b/umap/tests/test_views.py @@ -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'test map') == 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")