views/program: allow changing program cover
This commit is contained in:
parent
c0465e67b6
commit
2751abcabc
|
@ -1,5 +1,14 @@
|
|||
import pytest
|
||||
from django.urls import reverse
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
|
||||
from aircox.models import Program
|
||||
|
||||
|
||||
png_content = (
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde"
|
||||
+ b"\x00\x00\x00\x0cIDATx\x9cc`\xf8\xcf\x00\x00\x02\x02\x01\x00{\t\x81x\x00\x00\x00\x00IEND\xaeB`\x82"
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
|
@ -15,3 +24,17 @@ def test_edit_program(user, client, program):
|
|||
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
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_add_cover(user, client, program):
|
||||
assert program.cover is None
|
||||
user.groups.add(program.editors)
|
||||
client.force_login(user)
|
||||
cover = SimpleUploadedFile("cover1.png", png_content, content_type="image/png")
|
||||
r = client.post(
|
||||
reverse("program-edit", kwargs={"pk": program.pk}), {"content": "foobar", "new_cover": cover}, follow=True
|
||||
)
|
||||
assert r.status_code == 200
|
||||
p = Program.objects.get(pk=program.pk)
|
||||
assert "cover1.png" in p.cover.url
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
from django.forms import ModelForm, ImageField
|
||||
from django.urls import reverse
|
||||
|
||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
from filer.models.imagemodels import Image
|
||||
|
||||
from ..models import Page, Program, StaticPage
|
||||
from .mixins import ParentMixin
|
||||
|
@ -32,10 +34,25 @@ class ProgramDetailView(BaseProgramMixin, PageDetailView):
|
|||
return super().get_sidebar_queryset().filter(parent=self.program)
|
||||
|
||||
|
||||
class ProgramUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
||||
class ProgramForm(ModelForm):
|
||||
new_cover = ImageField(required=False)
|
||||
|
||||
class Meta:
|
||||
model = Program
|
||||
fields = ["content"]
|
||||
|
||||
def save(self, commit=True):
|
||||
file_obj = self.cleaned_data["new_cover"]
|
||||
if file_obj:
|
||||
obj, _ = Image.objects.get_or_create(original_filename=file_obj.name, file=file_obj)
|
||||
self.instance.cover = obj
|
||||
super().save(commit=commit)
|
||||
|
||||
|
||||
class ProgramUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
||||
model = Program
|
||||
form_class = ProgramForm
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
return super().get_sidebar_queryset().filter(parent=self.program)
|
||||
|
||||
|
@ -43,6 +60,9 @@ class ProgramUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
|||
program = self.get_object()
|
||||
return self.request.user.has_perm("aircox.%s" % program.change_permission_codename)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("program-detail", kwargs={"slug": self.get_object().slug})
|
||||
|
||||
|
||||
class ProgramListView(PageListView):
|
||||
model = Program
|
||||
|
|
Loading…
Reference in New Issue
Block a user