import datetime
from rest_framework import status
from rest_framework.test import APITestCase
from radioco.apps.programmes.models import Programme
from radioco.apps.radioco.test_utils import TestDataMixin
[docs]class TestProgrammesAPI(TestDataMixin, APITestCase):
[docs] def setUp(self):
self.summer_programme = Programme.objects.create(
name='Summer Programme',
synopsis='',
language='en',
current_season=1,
_runtime=60,
start_date=datetime.date(2015, 6, 1),
end_date=datetime.date(2015, 8, 31),
)
[docs] def test_programmes_get_all(self):
response = self.client.get('/api/2/programmes')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn(
{
'category': None,
'id': self.summer_programme.id,
'language': 'en',
'name': 'Summer Programme',
'photo_url': u'http://testserver/media/defaults/default-programme-photo.jpg',
'rss_url': u'http://testserver/programmes/summer-programme/rss/',
'runtime': '01:00:00',
'slug': 'summer-programme',
'synopsis': ''
},
response.data)
[docs] def test_programmes_before(self):
response = self.client.get(
'/api/2/programmes',
{
'before': datetime.date(2015, 6, 1),
})
self.assertIn(u'summer-programme', map(lambda t: t['slug'], response.data))
response = self.client.get(
'/api/2/programmes',
{
'before': datetime.date(2015, 5, 30),
})
self.assertNotIn(u'summer-programme', map(lambda t: t['slug'], response.data))
[docs] def test_programmes_after(self):
response = self.client.get(
'/api/2/programmes',
{
'after': datetime.date(2015, 8, 31),
})
self.assertIn(u'summer-programme', map(lambda t: t['slug'], response.data))
response = self.client.get(
'/api/2/programmes',
{
'after': datetime.date(2015, 9, 1),
})
self.assertNotIn(u'summer-programme', map(lambda t: t['slug'], response.data))
[docs] def test_programmes_between(self):
response = self.client.get(
'/api/2/programmes',
{
'after': datetime.date(2015, 1, 1),
'before': datetime.date(2015, 12, 31),
})
self.assertIn(u'summer-programme', map(lambda t: t['slug'], response.data))
response = self.client.get(
'/api/2/programmes',
{
'after': datetime.date(2015, 1, 1),
'before': datetime.date(2015, 5, 30),
})
self.assertNotIn(u'summer-programme', map(lambda t: t['slug'], response.data))
[docs] def test_episodes_get_all(self):
response = self.client.get('/api/2/episodes')
self.assertEqual(response.status_code, status.HTTP_200_OK)
[docs] def test_episodes_get_by_programme(self):
response = self.client.get(
'/api/2/episodes', {'programme': self.programme.slug})
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data[0]['programme'], self.programme.slug)
[docs]class TestNotAllowedMethodsProgrammesAPI(TestDataMixin, APITestCase):
[docs] def test_programmes_post(self):
response = self.client.post('/api/2/programmes')
self.assertEqual(
response.status_code, status.HTTP_403_FORBIDDEN)
[docs] def test_programmes_put(self):
response = self.client.put('/api/2/programmes')
self.assertEqual(
response.status_code, status.HTTP_403_FORBIDDEN)
[docs] def test_programmes_delete(self):
response = self.client.delete('/api/2/programmes')
self.assertEqual(
response.status_code, status.HTTP_403_FORBIDDEN)
[docs] def test_episodes_post(self):
response = self.client.post('/api/2/episodes')
self.assertEqual(
response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
[docs] def test_episodes_put(self):
response = self.client.put('/api/2/episodes')
self.assertEqual(
response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
[docs] def test_episodes_delete(self):
response = self.client.delete('/api/2/episodes')
self.assertEqual(
response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)