wip: add a ProgramUpdateView

This commit is contained in:
Chris Tactic 2023-10-18 16:26:57 +02:00
parent 5e9b0ad301
commit 7cdba90bed
4 changed files with 35 additions and 2 deletions

View File

@ -1,5 +1,6 @@
import pytest import pytest
from django.contrib.auth.models import User, Group from django.contrib.auth.models import User, Group
from django.urls import reverse
@pytest.mark.django_db() @pytest.mark.django_db()
@ -21,7 +22,16 @@ def test_group_can_change_program(user, client, program):
assert program_editors in Group.objects.all() assert program_editors in Group.objects.all()
assert not user.has_perm("aircox.%s" % program.change_permission_codename) assert not user.has_perm("aircox.%s" % program.change_permission_codename)
user.groups.add(program_editors) user.groups.add(program_editors)
user.save()
user = User.objects.get(pk=user.pk) # reload user in order to have permissions set user = User.objects.get(pk=user.pk) # reload user in order to have permissions set
assert program_editors in user.groups.all() assert program_editors in user.groups.all()
assert user.has_perm("aircox.%s" % program.change_permission_codename) 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={"slug": program.slug}))
assert response.status_code == 403
user.groups.add(program.editors)
response = client.get(reverse("program-edit", kwargs={"slug": program.slug}))
assert response.status_code == 200

View File

@ -92,6 +92,11 @@ urls = [
views.ProgramDetailView.as_view(), views.ProgramDetailView.as_view(),
name="program-detail", name="program-detail",
), ),
path(
_("program/<slug:slug>/edit/"),
views.ProgramUpdateView.as_view(),
name="program-edit",
),
path( path(
_("programs/<slug:parent_slug>/episodes/"), _("programs/<slug:parent_slug>/episodes/"),
views.EpisodeListView.as_view(), views.EpisodeListView.as_view(),

View File

@ -138,3 +138,7 @@ class PageDetailView(BasePageDetailView):
comment.page = self.object comment.page = self.object
comment.save() comment.save()
return self.get(request, *args, **kwargs) return self.get(request, *args, **kwargs)
class PageUpdateView(PageDetailView):
pass

View File

@ -1,8 +1,10 @@
from django.urls import reverse from django.urls import reverse
from django.contrib.auth.mixins import UserPassesTestMixin
from ..models import Page, Program, StaticPage from ..models import Page, Program, StaticPage
from .mixins import ParentMixin from .mixins import ParentMixin
from .page import PageDetailView, PageListView from .page import PageDetailView, PageListView, PageUpdateView
__all__ = ["ProgramPageDetailView", "ProgramDetailView", "ProgramPageListView"] __all__ = ["ProgramPageDetailView", "ProgramDetailView", "ProgramPageListView"]
@ -27,6 +29,18 @@ class ProgramDetailView(BaseProgramMixin, PageDetailView):
return super().get_sidebar_queryset().filter(parent=self.program) return super().get_sidebar_queryset().filter(parent=self.program)
class ProgramUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
model = Program
def get_sidebar_queryset(self):
return super().get_sidebar_queryset().filter(parent=self.program)
def test_func(self):
program = self.get_object()
print("XXX, aircox.%s" % program.change_permission_codename)
return self.request.user.has_perm("aircox.%s" % program.change_permission_codename)
class ProgramListView(PageListView): class ProgramListView(PageListView):
model = Program model = Program
attach_to_value = StaticPage.ATTACH_TO_PROGRAMS attach_to_value = StaticPage.ATTACH_TO_PROGRAMS