From eccbbda44d579893b911ad932808037aa7fc2ea1 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Tue, 20 Aug 2024 11:05:59 +0200 Subject: [PATCH] wip: add basic tests for group views --- umap/templates/auth/group_form.html | 2 +- umap/tests/test_group_views.py | 98 +++++++++++++++++++++++++++++ umap/urls.py | 12 ++-- 3 files changed, 104 insertions(+), 8 deletions(-) create mode 100644 umap/tests/test_group_views.py diff --git a/umap/templates/auth/group_form.html b/umap/templates/auth/group_form.html index 3709a8c8..6a6261c0 100644 --- a/umap/templates/auth/group_form.html +++ b/umap/templates/auth/group_form.html @@ -21,7 +21,7 @@ {% if group.user_set.count == 1 %} - {% trans "Delete this group" %} + {% trans "Delete this team" %} {% endif %} diff --git a/umap/tests/test_group_views.py b/umap/tests/test_group_views.py new file mode 100644 index 00000000..0138e38a --- /dev/null +++ b/umap/tests/test_group_views.py @@ -0,0 +1,98 @@ +import pytest +from django.urls import reverse +from django.contrib.auth.models import Group + +pytestmark = pytest.mark.django_db + + +def test_can_see_group_maps(client, map, group): + map.group = group + map.save() + url = reverse("group_maps", args=(group.pk,)) + response = client.get(url) + assert response.status_code == 200 + assert map.name in response.content.decode() + + +def test_user_can_see_their_groups(client, group, user): + user.groups.add(group) + user.save() + url = reverse("user_groups") + client.login(username=user.username, password="123123") + response = client.get(url) + assert response.status_code == 200 + assert group.name in response.content.decode() + + +def test_can_create_a_group(client, user): + assert not Group.objects.count() + url = reverse("group_new") + client.login(username=user.username, password="123123") + response = client.post(url, {"name": "my new group", "members": [user.pk]}) + assert response.status_code == 302 + assert response["Location"] == "/en/me/groups" + assert Group.objects.count() == 1 + group = Group.objects.first() + assert group.name == "my new group" + assert group in user.groups.all() + + +def test_can_edit_a_group(client, user, group): + user.groups.add(group) + user.save() + assert Group.objects.count() == 1 + url = reverse("group_update", args=(group.pk,)) + client.login(username=user.username, password="123123") + response = client.post(url, {"name": "my new group", "members": [user.pk]}) + assert response.status_code == 302 + assert response["Location"] == "/en/me/groups" + assert Group.objects.count() == 1 + modified = Group.objects.first() + assert modified.name == "my new group" + assert modified in user.groups.all() + + +def test_cannot_edit_a_group_if_not_member(client, user, user2, group): + user.groups.add(group) + user.save() + assert Group.objects.count() == 1 + url = reverse("group_update", args=(group.pk,)) + client.login(username=user2.username, password="123123") + response = client.post(url, {"name": "my new group", "members": [user.pk]}) + assert response.status_code == 403 + + +def test_can_delete_a_group(client, user, group): + user.groups.add(group) + user.save() + assert Group.objects.count() == 1 + url = reverse("group_delete", args=(group.pk,)) + client.login(username=user.username, password="123123") + response = client.post(url) + assert response.status_code == 302 + assert response["Location"] == "/en/me/groups" + assert Group.objects.count() == 0 + + +def test_cannot_delete_a_group_if_not_member(client, user, user2, group): + user.groups.add(group) + user.save() + assert Group.objects.count() == 1 + url = reverse("group_delete", args=(group.pk,)) + client.login(username=user2.username, password="123123") + response = client.post(url) + assert response.status_code == 403 + assert Group.objects.count() == 1 + + +def test_cannot_delete_a_group_if_more_than_one_member(client, user, user2, group): + user.groups.add(group) + user.save() + user2.groups.add(group) + user2.save() + assert Group.objects.count() == 1 + url = reverse("group_delete", args=(group.pk,)) + client.login(username=user.username, password="123123") + response = client.post(url) + assert response.status_code == 400 + assert Group.objects.count() == 1 diff --git a/umap/urls.py b/umap/urls.py index 02accb2d..0f466ae4 100644 --- a/umap/urls.py +++ b/umap/urls.py @@ -102,7 +102,7 @@ i18n_urls += decorated_patterns( ) i18n_urls += decorated_patterns( [login_required_if_not_anonymous_allowed, never_cache], - re_path(r"^map/create/$", views.MapCreate.as_view(), name="map_create"), + path("map/create/", views.MapCreate.as_view(), name="map_create"), ) i18n_urls += decorated_patterns( [login_required], @@ -187,12 +187,10 @@ datalayer_urls = [ i18n_urls += decorated_patterns([can_edit_map, never_cache], *map_urls) i18n_urls += decorated_patterns([never_cache], *datalayer_urls) urlpatterns += i18n_patterns( - re_path(r"^$", views.home, name="home"), - re_path( - r"^showcase/$", cache_page(24 * 60 * 60)(views.showcase), name="maps_showcase" - ), - re_path(r"^search/$", views.search, name="search"), - re_path(r"^about/$", views.about, name="about"), + path("", views.home, name="home"), + path("showcase/", cache_page(24 * 60 * 60)(views.showcase), name="maps_showcase"), + path("search/", views.search, name="search"), + path("about/", views.about, name="about"), re_path(r"^user/(?P.+)/stars/$", views.user_stars, name="user_stars"), re_path(r"^user/(?P.+)/$", views.user_maps, name="user_maps"), path("group//", views.group_maps, name="group_maps"),