wip: add basic tests for group views

This commit is contained in:
Yohan Boniface 2024-08-20 11:05:59 +02:00
parent 9b2a99019b
commit eccbbda44d
3 changed files with 104 additions and 8 deletions

View file

@ -21,7 +21,7 @@
<input type="submit" value="{% trans 'Save' %}" /> <input type="submit" value="{% trans 'Save' %}" />
</form> </form>
{% if group.user_set.count == 1 %} {% if group.user_set.count == 1 %}
<a href="{% url 'group_delete' group.pk %}">{% trans "Delete this group" %}</a> <a href="{% url 'group_delete' group.pk %}">{% trans "Delete this team" %}</a>
{% endif %} {% endif %}
</div> </div>
</div> </div>

View file

@ -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

View file

@ -102,7 +102,7 @@ i18n_urls += decorated_patterns(
) )
i18n_urls += decorated_patterns( i18n_urls += decorated_patterns(
[login_required_if_not_anonymous_allowed, never_cache], [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( i18n_urls += decorated_patterns(
[login_required], [login_required],
@ -187,12 +187,10 @@ datalayer_urls = [
i18n_urls += decorated_patterns([can_edit_map, never_cache], *map_urls) i18n_urls += decorated_patterns([can_edit_map, never_cache], *map_urls)
i18n_urls += decorated_patterns([never_cache], *datalayer_urls) i18n_urls += decorated_patterns([never_cache], *datalayer_urls)
urlpatterns += i18n_patterns( urlpatterns += i18n_patterns(
re_path(r"^$", views.home, name="home"), path("", views.home, name="home"),
re_path( path("showcase/", cache_page(24 * 60 * 60)(views.showcase), name="maps_showcase"),
r"^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"^search/$", views.search, name="search"),
re_path(r"^about/$", views.about, name="about"),
re_path(r"^user/(?P<identifier>.+)/stars/$", views.user_stars, name="user_stars"), re_path(r"^user/(?P<identifier>.+)/stars/$", views.user_stars, name="user_stars"),
re_path(r"^user/(?P<identifier>.+)/$", views.user_maps, name="user_maps"), re_path(r"^user/(?P<identifier>.+)/$", views.user_maps, name="user_maps"),
path("group/<int:pk>/", views.group_maps, name="group_maps"), path("group/<int:pk>/", views.group_maps, name="group_maps"),