diff --git a/aircox/templates/aircox/program_detail.html b/aircox/templates/aircox/program_detail.html index cfd6e75..28e732e 100644 --- a/aircox/templates/aircox/program_detail.html +++ b/aircox/templates/aircox/program_detail.html @@ -2,6 +2,18 @@ {% comment %}Detail page of a show{% endcomment %} {% load i18n aircox %} +{% block top-nav-tools %} +{% has_perm page page.change_permission_codename simple=True as can_edit %} +{% if can_edit %} + + + + + {% translate "Edit" %} + +{% endif %} +{% endblock %} + {% block content-container %} {% with schedules=program.schedule_set.all %} {% if schedules %} diff --git a/aircox/templates/aircox/program_form.html b/aircox/templates/aircox/program_form.html new file mode 100644 index 0000000..0116ea4 --- /dev/null +++ b/aircox/templates/aircox/program_form.html @@ -0,0 +1,23 @@ +{% extends "aircox/basepage_detail.html" %} +{% load static i18n humanize honeypot aircox %} + + +{% block top-nav-tools %} + + + + + {% translate "View" %} + +{% endblock %} + +{% block main %} +
+{% endblock %} diff --git a/aircox/tests/test_permissions.py b/aircox/tests/test_permissions.py index 25866b3..a561f33 100644 --- a/aircox/tests/test_permissions.py +++ b/aircox/tests/test_permissions.py @@ -1,5 +1,6 @@ import pytest from django.contrib.auth.models import User, Group +from django.urls import reverse @pytest.mark.django_db() @@ -23,3 +24,13 @@ def test_group_can_change_program(user, client, program): user = User.objects.get(pk=user.pk) # reload user in order to have permissions set assert program.editors in user.groups.all() assert user.has_perm("aircox.%s" % program.change_permission_codename) + + +@pytest.mark.django_db() +def test_group_change_program(user, client, program): + client.force_login(user) + response = client.get(reverse("program-edit", kwargs={"pk": program.pk})) + assert response.status_code == 403 + user.groups.add(program.editors) + response = client.get(reverse("program-edit", kwargs={"pk": program.pk})) + assert response.status_code == 200 diff --git a/aircox/tests/test_program.py b/aircox/tests/test_program.py new file mode 100644 index 0000000..bf56b7f --- /dev/null +++ b/aircox/tests/test_program.py @@ -0,0 +1,17 @@ +import pytest +from django.urls import reverse + + +@pytest.mark.django_db() +def test_edit_program(user, client, program): + client.force_login(user) + response = client.get(reverse("program-detail", kwargs={"slug": program.slug})) + assert response.status_code == 200 + assert "🖉 ".encode() not in response.content + user.groups.add(program.editors) + response = client.get(reverse("program-detail", kwargs={"slug": program.slug})) + assert "🖉 ".encode() in response.content + assert b"foobar" not in response.content + response = client.post(reverse("program-edit", kwargs={"pk": program.pk}), {"content": "foobar"}) + response = client.get(reverse("program-detail", kwargs={"slug": program.slug})) + assert b"foobar" in response.content diff --git a/aircox/urls.py b/aircox/urls.py index f23c7d0..2783cdb 100755 --- a/aircox/urls.py +++ b/aircox/urls.py @@ -117,6 +117,11 @@ urls = [ path(_("podcasts/"), views.PodcastListView.as_view(), name="podcast-list"), path(_("podcasts/c/