wip: add a ProgramUpdateView
This commit is contained in:
		@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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(),
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user