wip: add a ProgramUpdateView

This commit is contained in:
Chris Tactic 2023-10-18 16:26:57 +02:00
parent c4ed89329a
commit 0f1ca3017e
5 changed files with 36 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

@ -16,6 +16,7 @@ from .program import (
ProgramListView, ProgramListView,
ProgramPageDetailView, ProgramPageDetailView,
ProgramPageListView, ProgramPageListView,
ProgramUpdateView,
) )
__all__ = ( __all__ = (
@ -39,4 +40,5 @@ __all__ = (
"ProgramListView", "ProgramListView",
"ProgramPageDetailView", "ProgramPageDetailView",
"ProgramPageListView", "ProgramPageListView",
"ProgramUpdateView",
) )

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,17 @@ 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()
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