mirror of
https://github.com/umap-project/umap.git
synced 2025-04-30 12:12:36 +02:00
wip: add basic tests for group views
This commit is contained in:
parent
9b2a99019b
commit
eccbbda44d
3 changed files with 104 additions and 8 deletions
|
@ -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>
|
||||||
|
|
98
umap/tests/test_group_views.py
Normal file
98
umap/tests/test_group_views.py
Normal 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
|
12
umap/urls.py
12
umap/urls.py
|
@ -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"),
|
||||||
|
|
Loading…
Reference in a new issue