parent
2ec76d7690
commit
8ca356303b
|
@ -1,10 +1,10 @@
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.test import SimpleTestCase
|
from django.test import TestCase
|
||||||
from libretimeapi.models import Schedule, ShowInstance
|
from libretimeapi.models import Schedule, ShowInstance
|
||||||
|
|
||||||
|
|
||||||
class TestSchedule(SimpleTestCase):
|
class TestSchedule(TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
cls.show_instance = ShowInstance(
|
cls.show_instance = ShowInstance(
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import os
|
import os
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta, timezone
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
|
@ -66,13 +66,13 @@ class TestScheduleViewSet(APITestCase):
|
||||||
)
|
)
|
||||||
show = baker.make(
|
show = baker.make(
|
||||||
"libretimeapi.ShowInstance",
|
"libretimeapi.ShowInstance",
|
||||||
starts=datetime.now(tz=datetime.timezone.utc) - timedelta(minutes=5),
|
starts=datetime.now(tz=timezone.utc) - timedelta(minutes=5),
|
||||||
ends=datetime.now(tz=datetime.timezone.utc) + timedelta(minutes=5),
|
ends=datetime.now(tz=timezone.utc) + timedelta(minutes=5),
|
||||||
)
|
)
|
||||||
scheduleItem = baker.make(
|
scheduleItem = baker.make(
|
||||||
"libretimeapi.Schedule",
|
"libretimeapi.Schedule",
|
||||||
starts=datetime.now(tz=datetime.timezone.utc),
|
starts=datetime.now(tz=timezone.utc),
|
||||||
ends=datetime.now(tz=datetime.timezone.utc) + f.length,
|
ends=datetime.now(tz=timezone.utc) + f.length,
|
||||||
cue_out=f.cueout,
|
cue_out=f.cueout,
|
||||||
instance=show,
|
instance=show,
|
||||||
file=f,
|
file=f,
|
||||||
|
@ -100,13 +100,13 @@ class TestScheduleViewSet(APITestCase):
|
||||||
)
|
)
|
||||||
show = baker.make(
|
show = baker.make(
|
||||||
"libretimeapi.ShowInstance",
|
"libretimeapi.ShowInstance",
|
||||||
starts=datetime.now(tz=datetime.timezone.utc) - timedelta(minutes=5),
|
starts=datetime.now(tz=timezone.utc) - timedelta(minutes=5),
|
||||||
ends=datetime.now(tz=datetime.timezone.utc) + timedelta(seconds=20),
|
ends=datetime.now(tz=timezone.utc) + timedelta(seconds=20),
|
||||||
)
|
)
|
||||||
scheduleItem = baker.make(
|
scheduleItem = baker.make(
|
||||||
"libretimeapi.Schedule",
|
"libretimeapi.Schedule",
|
||||||
starts=datetime.now(tz=datetime.timezone.utc),
|
starts=datetime.now(tz=timezone.utc),
|
||||||
ends=datetime.now(tz=datetime.timezone.utc) + f.length,
|
ends=datetime.now(tz=timezone.utc) + f.length,
|
||||||
instance=show,
|
instance=show,
|
||||||
file=f,
|
file=f,
|
||||||
)
|
)
|
||||||
|
@ -120,3 +120,47 @@ class TestScheduleViewSet(APITestCase):
|
||||||
self.assertNotEqual(
|
self.assertNotEqual(
|
||||||
dateparse.parse_datetime(result[0]["ends"]), scheduleItem.ends
|
dateparse.parse_datetime(result[0]["ends"]), scheduleItem.ends
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_schedule_item_invalid(self):
|
||||||
|
music_dir = baker.make(
|
||||||
|
"libretimeapi.MusicDir",
|
||||||
|
directory=os.path.join(os.path.dirname(__file__), "resources"),
|
||||||
|
)
|
||||||
|
f = baker.make(
|
||||||
|
"libretimeapi.File",
|
||||||
|
directory=music_dir,
|
||||||
|
mime="audio/mp3",
|
||||||
|
filepath="song.mp3",
|
||||||
|
length=timedelta(seconds=40.86),
|
||||||
|
cuein=timedelta(seconds=0),
|
||||||
|
cueout=timedelta(seconds=40.8131),
|
||||||
|
)
|
||||||
|
show = baker.make(
|
||||||
|
"libretimeapi.ShowInstance",
|
||||||
|
starts=datetime.now(tz=timezone.utc) - timedelta(minutes=5),
|
||||||
|
ends=datetime.now(tz=timezone.utc) + timedelta(minutes=5),
|
||||||
|
)
|
||||||
|
scheduleItem = baker.make(
|
||||||
|
"libretimeapi.Schedule",
|
||||||
|
starts=datetime.now(tz=timezone.utc),
|
||||||
|
ends=datetime.now(tz=timezone.utc) + f.length,
|
||||||
|
cue_out=f.cueout,
|
||||||
|
instance=show,
|
||||||
|
file=f,
|
||||||
|
)
|
||||||
|
invalidScheduleItem = baker.make(
|
||||||
|
"libretimeapi.Schedule",
|
||||||
|
starts=show.ends + timedelta(minutes=1),
|
||||||
|
ends=show.ends + timedelta(minutes=1) + f.length,
|
||||||
|
cue_out=f.cueout,
|
||||||
|
instance=show,
|
||||||
|
file=f,
|
||||||
|
)
|
||||||
|
self.client.credentials(HTTP_AUTHORIZATION="Api-Key {}".format(self.token))
|
||||||
|
response = self.client.get(self.path, {"is_valid": True})
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
result = response.json()
|
||||||
|
# The invalid item should be filtered out and not returned
|
||||||
|
self.assertEqual(len(result), 1)
|
||||||
|
self.assertEqual(dateparse.parse_datetime(result[0]["ends"]), scheduleItem.ends)
|
||||||
|
self.assertEqual(dateparse.parse_duration(result[0]["cue_out"]), f.cueout)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db.models import F
|
||||||
from django.http import FileResponse
|
from django.http import FileResponse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from rest_framework import status, viewsets
|
from rest_framework import status, viewsets
|
||||||
|
@ -141,9 +142,19 @@ class PreferenceViewSet(viewsets.ModelViewSet):
|
||||||
class ScheduleViewSet(viewsets.ModelViewSet):
|
class ScheduleViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Schedule.objects.all()
|
queryset = Schedule.objects.all()
|
||||||
serializer_class = ScheduleSerializer
|
serializer_class = ScheduleSerializer
|
||||||
filter_fields = ("starts", "ends", "playout_status", "broadcasted", "is_valid")
|
filter_fields = ("starts", "ends", "playout_status", "broadcasted")
|
||||||
model_permission_name = "schedule"
|
model_permission_name = "schedule"
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
filter_valid = self.request.query_params.get("is_valid")
|
||||||
|
if filter_valid is None:
|
||||||
|
return self.queryset.all()
|
||||||
|
filter_valid = filter_valid.strip().lower() in ["true", "yes", "1"]
|
||||||
|
if filter_valid:
|
||||||
|
return self.queryset.filter(starts__lt=F("instance__ends"))
|
||||||
|
else:
|
||||||
|
return self.queryset.filter(starts__gte=F("instance__ends"))
|
||||||
|
|
||||||
|
|
||||||
class ServiceRegisterViewSet(viewsets.ModelViewSet):
|
class ServiceRegisterViewSet(viewsets.ModelViewSet):
|
||||||
queryset = ServiceRegister.objects.all()
|
queryset = ServiceRegister.objects.all()
|
||||||
|
|
Loading…
Reference in New Issue