forked from rc/aircox
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
from datetime import timedelta
|
|
|
|
from django.conf import settings as conf
|
|
from django.test import TestCase
|
|
from django.utils import timezone as tz
|
|
|
|
from aircox import models
|
|
from aircox.management.sound_file import SoundFile
|
|
|
|
|
|
__all__ = ('SoundFileTestCase',)
|
|
|
|
|
|
class SoundFileTestCase(TestCase):
|
|
path_infos = {
|
|
'test/20220101_10h13_1_sample_1.mp3': {
|
|
'year': 2022, 'month': 1, 'day': 1, 'hour': 10, 'minute': 13,
|
|
'n': 1, 'name': 'Sample 1'},
|
|
'test/20220102_10h13_sample_2.mp3': {
|
|
'year': 2022, 'month': 1, 'day': 2, 'hour': 10, 'minute': 13,
|
|
'name': 'Sample 2'},
|
|
'test/20220103_1_sample_3.mp3': {
|
|
'year': 2022, 'month': 1, 'day': 3, 'n': 1, 'name': 'Sample 3'},
|
|
'test/20220104_sample_4.mp3': {
|
|
'year': 2022, 'month': 1, 'day': 4, 'name': 'Sample 4'},
|
|
'test/20220105.mp3': {
|
|
'year': 2022, 'month': 1, 'day': 5, 'name': '20220105'},
|
|
}
|
|
subdir_prefix = 'test'
|
|
sound_files = {k: r for k, r in (
|
|
(path, SoundFile(conf.MEDIA_ROOT + '/' + path))
|
|
for path in path_infos.keys()
|
|
)}
|
|
|
|
def test_sound_path(self):
|
|
for path, sound_file in self.sound_files.items():
|
|
self.assertEqual(path, sound_file.sound_path)
|
|
|
|
def test_read_path(self):
|
|
for path, sound_file in self.sound_files.items():
|
|
expected = self.path_infos[path]
|
|
result = sound_file.read_path(path)
|
|
# remove None values
|
|
result = {k: v for k, v in result.items() if v is not None}
|
|
self.assertEqual(expected, result, "path: {}".format(path))
|
|
|
|
def _setup_diff(self, program, info):
|
|
episode = models.Episode(program=program, title='test-episode')
|
|
at = tz.datetime(**{
|
|
k: info[k] for k in ('year', 'month', 'day', 'hour', 'minute')
|
|
if info.get(k)
|
|
})
|
|
at = tz.make_aware(at)
|
|
diff = models.Diffusion(episode=episode, start=at,
|
|
end=at+timedelta(hours=1))
|
|
episode.save()
|
|
diff.save()
|
|
return diff
|
|
|
|
def test_find_episode(self):
|
|
station = models.Station(name='test-station')
|
|
program = models.Program(station=station, title='test')
|
|
station.save()
|
|
program.save()
|
|
|
|
for path, sound_file in self.sound_files.items():
|
|
infos = sound_file.read_path(path)
|
|
diff = self._setup_diff(program, infos)
|
|
sound = models.Sound(program=diff.program, file=path)
|
|
result = sound_file.find_episode(sound, infos)
|
|
self.assertEquals(diff.episode, result)
|
|
|
|
# TODO: find_playlist, sync
|