123 lines
4.6 KiB
Python
123 lines
4.6 KiB
Python
import os
|
|
from datetime import datetime, timedelta
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import AnonymousUser
|
|
from django.utils import dateparse
|
|
from libretimeapi.views import FileViewSet
|
|
from model_bakery import baker
|
|
from rest_framework.test import APIRequestFactory, APITestCase
|
|
|
|
|
|
class TestFileViewSet(APITestCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.path = "/api/v2/files/{id}/download/"
|
|
cls.token = settings.CONFIG.get("general", "api_key")
|
|
|
|
def test_invalid(self):
|
|
path = self.path.format(id="a")
|
|
self.client.credentials(HTTP_AUTHORIZATION="Api-Key {}".format(self.token))
|
|
response = self.client.get(path)
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
def test_does_not_exist(self):
|
|
path = self.path.format(id="1")
|
|
self.client.credentials(HTTP_AUTHORIZATION="Api-Key {}".format(self.token))
|
|
response = self.client.get(path)
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_exists(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",
|
|
)
|
|
path = self.path.format(id=str(f.pk))
|
|
self.client.credentials(HTTP_AUTHORIZATION="Api-Key {}".format(self.token))
|
|
response = self.client.get(path)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
class TestScheduleViewSet(APITestCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.path = "/api/v2/schedule/"
|
|
cls.token = settings.CONFIG.get("general", "api_key")
|
|
|
|
def test_schedule_item_full_length(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=datetime.timezone.utc) - timedelta(minutes=5),
|
|
ends=datetime.now(tz=datetime.timezone.utc) + timedelta(minutes=5),
|
|
)
|
|
scheduleItem = baker.make(
|
|
"libretimeapi.Schedule",
|
|
starts=datetime.now(tz=datetime.timezone.utc),
|
|
ends=datetime.now(tz=datetime.timezone.utc) + 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)
|
|
self.assertEqual(response.status_code, 200)
|
|
result = response.json()
|
|
self.assertEqual(dateparse.parse_datetime(result[0]["ends"]), scheduleItem.ends)
|
|
self.assertEqual(dateparse.parse_duration(result[0]["cue_out"]), f.cueout)
|
|
|
|
def test_schedule_item_trunc(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=datetime.timezone.utc) - timedelta(minutes=5),
|
|
ends=datetime.now(tz=datetime.timezone.utc) + timedelta(seconds=20),
|
|
)
|
|
scheduleItem = baker.make(
|
|
"libretimeapi.Schedule",
|
|
starts=datetime.now(tz=datetime.timezone.utc),
|
|
ends=datetime.now(tz=datetime.timezone.utc) + f.length,
|
|
instance=show,
|
|
file=f,
|
|
)
|
|
self.client.credentials(HTTP_AUTHORIZATION="Api-Key {}".format(self.token))
|
|
response = self.client.get(self.path)
|
|
self.assertEqual(response.status_code, 200)
|
|
result = response.json()
|
|
self.assertEqual(dateparse.parse_datetime(result[0]["ends"]), show.ends)
|
|
expected = show.ends - scheduleItem.starts
|
|
self.assertEqual(dateparse.parse_duration(result[0]["cue_out"]), expected)
|
|
self.assertNotEqual(
|
|
dateparse.parse_datetime(result[0]["ends"]), scheduleItem.ends
|
|
)
|