Beispiel #1
0
    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)
Beispiel #2
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
    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)