generated from bisco/codex-bootstrap
feat(shows): add uploaded show images
This commit is contained in:
77
backend/shows/test_api.py
Normal file
77
backend/shows/test_api.py
Normal file
@@ -0,0 +1,77 @@
|
||||
from datetime import timedelta
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import override_settings
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from shows.models import Performance, Show, Venue
|
||||
|
||||
|
||||
SMALL_GIF = (
|
||||
b"GIF89a\x01\x00\x01\x00\x80\x00\x00"
|
||||
b"\x00\x00\x00\xff\xff\xff!\xf9\x04\x01"
|
||||
b"\x00\x00\x00\x00,\x00\x00\x00\x00\x01"
|
||||
b"\x00\x01\x00\x00\x02\x02D\x01\x00;"
|
||||
)
|
||||
|
||||
|
||||
class ShowApiTests(APITestCase):
|
||||
def setUp(self):
|
||||
self.temp_media = TemporaryDirectory()
|
||||
self.addCleanup(self.temp_media.cleanup)
|
||||
self.settings_override = override_settings(MEDIA_ROOT=self.temp_media.name)
|
||||
self.settings_override.enable()
|
||||
self.addCleanup(self.settings_override.disable)
|
||||
|
||||
self.show = Show.objects.create(
|
||||
title="Open Stage",
|
||||
slug="open-stage-media",
|
||||
summary="A contemporary theatre performance.",
|
||||
description="Full public show description.",
|
||||
poster_image="https://cdn.example.com/open-stage-poster.jpg",
|
||||
is_published=True,
|
||||
)
|
||||
self.external_only_show = Show.objects.create(
|
||||
title="External Poster Stage",
|
||||
slug="external-poster-stage",
|
||||
summary="External image only.",
|
||||
description="External image only.",
|
||||
poster_image="https://cdn.example.com/external-only.jpg",
|
||||
is_published=True,
|
||||
)
|
||||
self.venue = Venue.objects.create(
|
||||
name="AzioneLab Theatre",
|
||||
slug="azionelab-theatre-show-api",
|
||||
address="Via Example 1",
|
||||
city="Rome",
|
||||
)
|
||||
self.performance = Performance.objects.create(
|
||||
show=self.show,
|
||||
venue=self.venue,
|
||||
starts_at=timezone.now() + timedelta(days=7),
|
||||
room_capacity=20,
|
||||
)
|
||||
|
||||
def test_show_list_prefers_uploaded_image_url_when_present(self):
|
||||
self.show.uploaded_image.save(
|
||||
"open-stage.gif",
|
||||
SimpleUploadedFile("open-stage.gif", SMALL_GIF, content_type="image/gif"),
|
||||
save=True,
|
||||
)
|
||||
|
||||
response = self.client.get(reverse("api-show-list"))
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
list_item = next(item for item in response.data["results"] if item["slug"] == self.show.slug)
|
||||
self.assertTrue(list_item["image_url"].endswith("/media/shows/open-stage.gif"))
|
||||
self.assertEqual(list_item["poster_image"], "https://cdn.example.com/open-stage-poster.jpg")
|
||||
|
||||
def test_show_detail_falls_back_to_existing_external_image_url(self):
|
||||
response = self.client.get(reverse("api-show-detail", kwargs={"slug": self.external_only_show.slug}))
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data["image_url"], "https://cdn.example.com/external-only.jpg")
|
||||
Reference in New Issue
Block a user