generated from bisco/codex-bootstrap
78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
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")
|