# Radioco - Broadcasting Radio Recording Scheduling system.
# Copyright (C) 2014 Iago Veloso Abalo
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import datetime
import pytz
from django.contrib.admin.options import ModelAdmin
from django.contrib.admin.sites import AdminSite
from django.core.exceptions import ValidationError, FieldError
from django.test import TestCase
from radioco.apps.radioco.test_utils import TestDataMixin
from radioco.apps.programmes.models import Programme, Episode, EpisodeManager
[docs]class ProgrammeModelTests(TestCase):
[docs] def setUp(self):
self.programme = Programme.objects.create(
name="Test programme",
synopsis="This is a description",
_runtime=540,
current_season=1)
[docs] def test_save_programme(self):
self.assertEqual(
self.programme, Programme.objects.get(id=self.programme.id))
[docs] def test_slug(self):
self.assertEqual(self.programme.slug, "test-programme")
[docs] def test_runtime(self):
self.assertEqual(datetime.timedelta(hours=+9), self.programme.runtime)
[docs] def test_runtime_not_get(self):
programme = Programme(name="foo", current_season=1)
with self.assertRaises(FieldError):
programme.runtime
[docs] def test_runtime_not_set(self):
programme = Programme(name="foo", current_season=1, slug="foo")
with self.assertRaises(ValidationError):
programme.clean_fields()
[docs] def test_runtime_is_zero(self):
programme = Programme(name="foo", current_season=1, slug="foo")
programme.runtime = 0
with self.assertRaises(ValidationError):
programme.clean_fields()
[docs] def test_absolute_url(self):
self.assertEqual(
self.programme.get_absolute_url(), "/programmes/test-programme/")
[docs] def test_str(self):
self.assertEqual(str(self.programme), "Test programme")
# def test_save_episode(self):
# date_published = datetime.datetime(2014, 1, 31, 0, 0, 0, 0)
# episode = Episode.create_episode(
# date=date_published, programme=self.programme)
#
# self.assertEqual(episode, Episode.objects.get(id=episode.id))
# self.assertEqual(
# episode.programme, Programme.objects.get(id=episode.programme.id))
[docs]class ProgrammeModelAdminTests(TestCase):
[docs] def setUp(self):
self.site = AdminSite()
[docs] def test_fieldset(self):
ma = ModelAdmin(Programme, self.site)
self.assertEqual(
ma.get_fields(None),
['name', 'synopsis', 'photo', 'language', 'current_season', 'category', 'slug', '_runtime', 'start_date', 'end_date'])
[docs]class EpisodeManagerTests(TestDataMixin, TestCase):
[docs] def setUp(self):
self.manager = EpisodeManager()
self.episode = self.manager.create_episode(
pytz.utc.localize(datetime.datetime(2014, 6, 14, 10, 0, 0)), self.programme)
[docs] def test_create_episode(self):
self.assertIsInstance(self.episode, Episode)
[docs] def test_season(self):
self.assertEqual(self.episode.season, self.programme.current_season)
[docs] def test_number_in_season(self):
self.assertEqual(self.episode.number_in_season, 6)
[docs] def test_programme(self):
self.assertEqual(self.episode.programme, self.programme)
[docs] def test_issue_date(self):
self.assertEqual(
self.episode.issue_date, pytz.utc.localize(datetime.datetime(2014, 6, 14, 10, 0, 0)))
[docs] def test_people(self):
self.assertQuerysetEqual(
self.episode.people.all(), self.programme.announcers.all())
[docs] def test_last(self):
episode = self.manager.last(self.programme)
self.assertEqual(episode.season, 7)
self.assertEqual(episode.number_in_season, 6)
[docs] def test_last_none(self):
episode = self.manager.last(Programme())
self.assertIsNone(episode)
[docs] def test_unfinished(self):
episodes = self.manager.unfinished(
self.programme, pytz.utc.localize(datetime.datetime(2015, 1, 1)))
self.assertEqual(
episodes.next().issue_date, pytz.utc.localize(datetime.datetime(2015, 1, 1, 14, 0)))
[docs] def test_unfinished_none(self):
episodes = self.manager.unfinished(Programme())
with self.assertRaises(StopIteration):
episodes.next()
[docs]class EpisodeModelTests(TestCase):
[docs] def setUp(self):
self.programme = Programme.objects.create(
name="Test programme",
synopsis="This is a description",
_runtime=540,
current_season=8)
self.episode = Episode.objects.create_episode(
pytz.utc.localize(datetime.datetime(2014, 1, 14, 10, 0, 0)), self.programme)
[docs] def test_model_manager(self):
self.assertIsInstance(self.episode, Episode)
[docs] def test_runtime(self):
self.assertEqual(self.episode.runtime, datetime.timedelta(0, 32400))
[docs] def test_absoulte_url(self):
self.assertEqual(
self.episode.get_absolute_url(), "/programmes/test-programme/8x1/")
[docs] def test_str(self):
self.assertEqual(str(self.episode), "8x1 Test programme")