diff --git a/youtube/tests/test_youtubeapi.py b/youtube/tests/test_youtubeapi.py index 8c0afa2..4cfbbac 100644 --- a/youtube/tests/test_youtubeapi.py +++ b/youtube/tests/test_youtubeapi.py @@ -111,6 +111,25 @@ def test(self, requests_patch): self.assertTrue(resp_mock.raise_for_status.called) self.assertTrue(resp_mock.json.called) + @mock.patch('youtube.youtubeapi.requests') + def test__empty_data(self, requests_patch): + resp_mock = mock.Mock() + resp_mock.json.return_value = {} + requests_patch.get.return_value = resp_mock + + # Empty list, since the JSON response is an empty object. + self.assertEqual(fetch_videocategories([1, 2, 3]), []) + + requests_patch.get.assert_called_with( + 'https://www.googleapis.com/youtube/v3/videoCategories', + params={ + 'part': 'snippet', + 'id': '1,2,3', + 'key': settings.YOUTUBE_API_KEY, + }) + self.assertTrue(resp_mock.raise_for_status.called) + self.assertTrue(resp_mock.json.called) + class FetchChannelInfoTestCase(TestCase): diff --git a/youtube/youtubeapi.py b/youtube/youtubeapi.py index 4bab1c1..05e2e88 100644 --- a/youtube/youtubeapi.py +++ b/youtube/youtubeapi.py @@ -51,7 +51,12 @@ def fetch_videocategories(categoryids): 'key': settings.YOUTUBE_API_KEY, }) resp.raise_for_status() - return resp.json()['items'] + data = resp.json() + if 'items' in data: + return data['items'] + else: + # Happens for specific ids, at specific times. + return [] def fetch_channel_info(channelid, parts=('snippet', 'contentDetails')):