def test_subscriptions_with_runtime_exceeded_error(self, defer_mock): defer_mock.defer.side_effect = MockExecute([RuntimeExceededError(), None]) last_week = timezone.now() - timedelta(7) sub1 = SubscriptionFactory.create(user=self.user, channel_id="123", last_update=last_week) sub2 = SubscriptionFactory.create(user=self.user, channel_id="456", last_update=last_week) subscriptions(self.user.id) self.assertEqual(self.subscription_mock.call_count, 1) self.assertEqual(self.channel_mock.call_count, 1) self.assertEqual(defer_mock.defer.call_count, 2) sub1.refresh_from_db() sub2.refresh_from_db() self.assertEqual( defer_mock.defer.call_args_list[0], ((import_videos, self.user.id, sub1.pk, sub1.upload_playlist, []), {"only_first_page": False}) ) self.assertEqual(defer_mock.defer.call_args_list[1], ((subscriptions, self.user.id, None), {})) self.assertNotEqual(sub1.last_update, last_week) self.assertEqual(sub2.last_update, last_week)
def test_update_subscriptions_with_last_pk(self): last_week = timezone.now() - timedelta(7) sub1 = SubscriptionFactory.create(user=self.user, channel_id="123", last_update=last_week) sub2 = SubscriptionFactory.create(user=self.user, channel_id="456", last_update=last_week) first, second = sorted([sub1, sub2], key=lambda x: x.pk) self.subscription_mock.return_value.execute.return_value['items'] = [{ 'snippet': { 'resourceId': {'channelId': second.channel_id}, 'thumbnails': {}, }, }] self.channel_mock.return_value.execute.return_value['items'] = [{ 'id': second.channel_id, 'contentDetails': { 'relatedPlaylists': {'uploads': 'upload%s' % second.channel_id}, }, }] subscriptions(self.user.id, last_pk=first.id) self.assertEqual(self.subscription_mock.call_count, 1) self.assertEqual(self.channel_mock.call_count, 1) first.refresh_from_db() self.assertEqual(first.last_update, last_week) second.refresh_from_db() self.assertNotEqual(second.last_update, last_week) # the update task end by deferring itself with the last PK, plus one # import_video calls self.assertNumTasksEquals(2) # make sure it doens't infinitely loop self.process_task_queues()
def test_subscriptions(self): subscriptions(self.user.id) self.assertEqual(self.subscription_mock.call_count, 1) self.assertEqual(self.channel_mock.call_count, 1) self.assertEqual(Subscription.objects.count(), 2) # two import video tasks for the two subscriptions self.assertNumTasksEquals(2) self.assertEqual(self.subscription_mock.call_args, ( (), {'mine': True, 'part': 'snippet', 'fields': 'items(snippet(resourceId(channelId),thumbnails))', 'maxResults': API_MAX_RESULTS, 'pageToken': None} )) self.assertEqual(self.channel_mock.call_args, ( (), {'id': '123,456', 'part': 'contentDetails', 'fields': 'items(contentDetails(relatedPlaylists))', 'maxResults': API_MAX_RESULTS} )) self.flush_task_queues() subscriptions(self.user.id) self.assertEqual(self.subscription_mock.call_count, 2) self.assertEqual(self.channel_mock.call_count, 2) self.assertEqual(Subscription.objects.count(), 2) self.assertNumTasksEquals(2) # two import_video tasks
def test_missing_oauth_token(self): OauthToken.objects.get(user_id=self.user.id).delete() last_week = timezone.now() - timedelta(7) SubscriptionFactory.create(user=self.user, channel_id="123", last_update=last_week) SubscriptionFactory.create(user=self.user, channel_id="456", last_update=last_week) self.service_patch.stop() # should raise no exceptions subscriptions(self.user.id)
def test_subscriptions(self): last_week = timezone.now() - timedelta(7) sub1 = SubscriptionFactory.create(user=self.user, channel_id="123", last_update=last_week) sub2 = SubscriptionFactory.create(user=self.user, channel_id="456", last_update=last_week) subscriptions(self.user.id) self.assertEqual(self.subscription_mock.call_count, 1) self.assertEqual(self.channel_mock.call_count, 1) sub1.refresh_from_db() self.assertNotEqual(sub1.last_update, last_week) sub2.refresh_from_db() self.assertNotEqual(sub2.last_update, last_week) # two import_video calls self.assertNumTasksEquals(2) # make sure it doens't infinitely loop self.process_task_queues()
def test_subscriptions_runtime_exceeded(self): self.subscription_mock.return_value.execute = MockExecute([ { 'items': [], 'nextPageToken': '123', }, RuntimeExceededError(), { 'items': [], } ]) self.channel_mock.return_value.execute.return_value = {'items': []} subscriptions(self.user.id) self.assertEqual(self.subscription_mock.call_count, 2) # deadline exceeded will cause a new task to be spawned self.assertNumTasksEquals(1) # run the task self.process_task_queues() self.assertEqual(self.subscription_mock.call_count, 3)
def test_subscriptions_pagination(self): self.subscription_mock.return_value.execute = MockExecute([ { 'items': [], 'nextPageToken': '123', }, { 'items': [], }, ]) self.channel_mock.return_value.execute.return_value = {'items': []} subscriptions(self.user.id) self.assertEqual(self.subscription_mock.call_count, 2) self.assertEqual(self.subscription_mock.call_args_list, [ ((), {'mine': True, 'part': 'snippet', 'fields': 'items(snippet(resourceId(channelId),thumbnails))', 'maxResults': API_MAX_RESULTS, 'pageToken': None}), ((), {'mine': True, 'part': 'snippet', 'fields': 'items(snippet(resourceId(channelId),thumbnails))', 'maxResults': API_MAX_RESULTS, 'pageToken': '123'}), ])
def test_missing_oauth_token(self): OauthToken.objects.get(user_id=self.user.id).delete() self.service_patch.stop() subscriptions(self.user.id)