def test_fetch_user(self): with override_api_context('instagram', token=TOKEN): u = User.remote.fetch(USER_ID) self.assertEqual(int(u.id), USER_ID) self.assertEqual(u.username, 'tnt_online') self.assertEqual(u.full_name, u'Телеканал ТНТ') self.assertGreater(len(u.profile_picture), 0) self.assertGreater(len(u.website), 0) self.assertGreater(u.followers_count, 0) self.assertGreater(u.follows_count, 0) self.assertGreater(u.media_count, 0) self.assertGreater(u.fetched, self.time) u.followers_count = None u.save() self.assertIsNone(u.followers_count) with override_api_context('instagram', token=TOKEN): u.refresh() self.assertGreater(u.followers_count, 0) u = User.objects.get(id=u.id) self.assertGreater(u.followers_count, 0)
def test_fetch_user_followers(self): with override_api_context('instagram', token=TOKEN): u = User.remote.fetch(USER_ID_3) users = u.fetch_followers() self.assertGreaterEqual(u.followers_count, 750) self.assertEqual(u.followers_count, users.count()) # check counts for follower f = users[0] self.assertIsNone(f.followers_count) self.assertIsNone(f.follows_count) self.assertIsNone(f.media_count) with override_api_context('instagram', token=TOKEN): f = User.remote.fetch(f.id) self.assertIsNotNone(f.followers_count) self.assertIsNotNone(f.follows_count) self.assertIsNotNone(f.media_count) with override_api_context('instagram', token=TOKEN): # repeat fetching followers and check counts u.fetch_followers() f = User.objects.get(id=f.id) self.assertIsNotNone(f.followers_count) self.assertIsNotNone(f.follows_count) self.assertIsNotNone(f.media_count)
def test_fetch_user_friends(self): self.assertEqual(User.objects.count(), 0) with override_api_context('vkontakte', token=TOKEN): user = User.remote.fetch(ids=[6])[0] self.assertEqual(User.objects.count(), 1) with override_api_context('vkontakte', token=TOKEN): users = user.fetch_friends() self.assertGreater(User.objects.count(), 100) self.assertEqual(users.count(), User.objects.count() - 1) self.assertEqual(user.friends_users.count(), User.objects.count() - 1) self.assertEqual(user.friends_users.count(), user.friends_count) User.objects.filter(pk__gt=100).delete() self.assertGreater(user.friends_users.count(), 10) self.assertLess(user.friends_users.count(), 20) with override_api_context('vkontakte', token=TOKEN): users_existed = user.fetch_friends(only_existing_users=True) self.assertEqual(users.count(), users_existed.count()) self.assertEqual(users.count(), user.friends_users.count()) self.assertEqual(users.count(), user.friends_count)
def test_refresh_user(self): with override_api_context('vkontakte', token=TOKEN): instance = User.remote.fetch(ids=[USER_ID])[0] self.assertEqual(instance.screen_name, USER_SCREEN_NAME) instance.screen_name = 'temp' instance.save() self.assertEqual(instance.screen_name, 'temp') with override_api_context('vkontakte', token=TOKEN): instance.refresh() self.assertEqual(instance.screen_name, USER_SCREEN_NAME)
def test_fetch_duplicate_user(self): with override_api_context('instagram', token=TOKEN): u = UserFactory(id=0, username='******') self.assertEqual(User.objects.count(), 1) self.assertNotEqual(int(u.id), USER_ID) self.assertEqual(u.username, 'tnt_online') with override_api_context('instagram', token=TOKEN): u = User.remote.fetch(USER_ID) self.assertEqual(User.objects.count(), 1) self.assertEqual(int(u.id), USER_ID) self.assertEqual(u.username, 'tnt_online')
def test_fetch_media_with_location(self): with override_api_context('instagram', token=TOKEN): media = Media.remote.fetch('1105137931436928268_1692711770') self.assertIsInstance(media.location, Location) self.assertEqual(media.location.name, 'Prague, Czech Republic')
def test_fetch_user_follows(self): with override_api_context('instagram', token=TOKEN): u = User.remote.fetch(USER_ID_3) users = u.fetch_follows() self.assertGreaterEqual(u.follows_count, 970) self.assertEqual(u.follows_count, users.count())
def test_search_locations(self): with override_api_context('instagram', token=TOKEN): locations = Location.remote.search(lat=37.782492553, lng=-122.387785235) self.assertGreater(len(locations), 0) for location in locations: self.assertIsInstance(location, Location)
def test_fetch_tag_media(self): with override_api_context('instagram', token=TOKEN): t = Tag.remote.fetch("merrittislandnwr") media = t.fetch_media() self.assertGreater(media.count(), 0) self.assertEqual(media.count(), t.media_feed.count())
def test_fetch_location_media(self): with override_api_context('instagram', token=TOKEN): location = LocationFactory(id=LOCATION_ID) media = location.fetch_media() self.assertGreater(media.count(), 0) self.assertEqual(media.count(), location.media_feed.count()) self.assertEqual(media.count(), location.media_count)
def test_search_users(self): with override_api_context('instagram', token=TOKEN): users = User.remote.search('tnt_online') self.assertGreater(len(users), 0) for user in users: self.assertIsInstance(user, User)
def test_fetch_real_duplicates_user(self): with override_api_context('instagram', token=TOKEN): UserFactory(id=2116301016) User.remote.fetch(2116301016) with self.assertRaisesWithCode(InstagramError, 400): User.remote.get(1206219929)
def test_search_tags(self): with override_api_context('instagram', token=TOKEN): tags = Tag.remote.search(TAG_SEARCH_NAME) self.assertGreater(len(tags), 0) for tag in tags: self.assertIsInstance(tag, Tag)
def test_multiple_slug_users(self): User.objects.create(remote_id=173613533, screen_name='mikhailserzhantov', sex=0) User.objects.create(remote_id=174221855, screen_name='mikhailserzhantov', sex=0) User.objects.create(remote_id=182224356, screen_name='mikhailserzhantov', sex=0) with override_api_context('vkontakte', token=TOKEN): self.assertEqual(User.remote.get_by_slug('mikhailserzhantov').remote_id, 182224356)
def test_fetch_location(self): with override_api_context('instagram', token=TOKEN): location = Location.remote.fetch(LOCATION_ID) self.assertEqual(location.id, LOCATION_ID) self.assertEqual(location.name, "Dog Patch Labs") self.assertEqual(location.latitude, 37.782492553) self.assertEqual(location.longitude, -122.387785235) self.assertEqual(location.media_count, None)
def test_fetch_users_more_than_1000(self, fetch): with override_api_context('vkontakte', token=TOKEN): users = User.remote.fetch(ids=range(0, 1500)) self.assertEqual(len(users), 1500) self.assertEqual(User.objects.count(), 1500) self.assertEqual(len(fetch.mock_calls[0].call_list()[0][2]['ids']), 1000) self.assertEqual(len(fetch.mock_calls[1].call_list()[0][2]['ids']), 500)
def test_fetch_user_by_name(self): with override_api_context('instagram', token=TOKEN): u = User.remote.get_by_slug('tnt_online') self.assertEqual(int(u.id), USER_ID) self.assertEqual(u.username, 'tnt_online') self.assertEqual(u.full_name, u'Телеканал ТНТ') self.assertGreater(len(u.profile_picture), 0) self.assertGreater(len(u.website), 0)
def test_fetch_user_media(self): with override_api_context('instagram', token=TOKEN): u = User.remote.fetch(USER_ID_2) media = u.fetch_media() self.assertGreater(media.count(), 210) self.assertEqual(media.count(), u.media_count) self.assertEqual(media.count(), u.media_feed.count()) after = media.order_by('-created_time')[50].created_time Media.objects.all().delete() self.assertEqual(u.media_feed.count(), 0) with override_api_context('instagram', token=TOKEN): media = u.fetch_media(after=after) self.assertEqual(media.count(), 52) # not 50 for some strange reason self.assertEqual(media.count(), u.media_feed.count())
def test_fetch_likes(self): # with override_api_context('instagram', token=TOKEN): m = Media.remote.fetch(MEDIA_ID) likes = m.fetch_likes() self.assertGreater(m.likes_count, 0) # TODO: 2515 != 117 how to get all likes? # self.assertEqual(m.likes_count, likes.count()) self.assertIsInstance(likes[0], User)
def test_fetching_expired_users(self, fetch): with override_api_context('vkontakte', token=TOKEN): users = User.remote.fetch(ids=range(0, 1500)) self.assertEqual(users.count(), 1500) self.assertEqual(len(fetch.mock_calls[0].call_list()[0][2]['ids']), 1500) # make all users fresh User.objects.all().update(fetched=timezone.now()) # make 500 of them expired User.objects.filter(remote_id__lt=500).update(fetched=timezone.now() - timedelta(USERS_INFO_TIMEOUT_DAYS + 1)) with override_api_context('vkontakte', token=TOKEN): users_new = User.remote.fetch(ids=range(100, 2200), only_expired=True) self.assertEqual(users_new.count(), 2100) # (500 - 100) + (2200 - 1500), expired + new self.assertEqual(len(fetch.mock_calls[1].call_list()[0][2]['ids']), 1100)
def test_fetch_media(self): with override_api_context('instagram', token=TOKEN): m = Media.remote.fetch(MEDIA_ID) self.assertEqual(m.remote_id, MEDIA_ID) self.assertGreater(len(m.caption), 0) self.assertGreater(len(m.link), 0) self.assertGreater(m.comments_count, 0) self.assertGreater(m.likes_count, 0) self.assertGreater(m.fetched, self.time) self.assertIsInstance(m.created_time, datetime) self.assertEqual(m.type, 'video') self.assertEqual(m.filter, 'Normal') self.assertGreater(len(m.image_low_resolution), 0) self.assertGreater(len(m.image_standard_resolution), 0) self.assertGreater(len(m.image_thumbnail), 0) self.assertGreater(len(m.video_low_bandwidth), 0) self.assertGreater(len(m.video_low_resolution), 0) self.assertGreater(len(m.video_standard_resolution), 0) self.assertGreater(m.comments.count(), 0) self.assertGreater(m.tags.count(), 0) self.assertGreater(m.likes_users.count(), 0) # media without caption test with override_api_context('instagram', token=TOKEN): m = Media.remote.fetch(MEDIA_ID_2) self.assertEqual(len(m.caption), 0) self.assertEqual(m.type, 'image') self.assertGreater(len(m.image_low_resolution), 0) self.assertGreater(len(m.image_standard_resolution), 0) self.assertGreater(len(m.image_thumbnail), 0) self.assertGreater(m.comments.count(), 0) self.assertGreater(m.likes_users.count(), 0)
def test_fetch_user(self): self.assertEqual(User.objects.count(), 0) with override_api_context('vkontakte', token=TOKEN): users = User.remote.fetch(ids=[1, 2]) self.assertEqual(len(users), 2) self.assertEqual(User.objects.count(), 2) instance = users[0] self.assertEqual(instance.remote_id, 1) self.assertEqual(instance.first_name, u'Павел') self.assertEqual(instance.last_name, u'Дуров') self.assertEqual(instance.screen_name, USER_SCREEN_NAME) # self.assertEqual(instance.twitter, u'durov') # self.assertEqual(instance.livejournal, u'durov') # self.assertEqual(instance.relation, 1) # self.assertEqual(instance.wall_comments, False) # test counters with override_api_context('vkontakte', token=TOKEN): instance.update_counters() self.assertGreater(instance.followers, 0) self.assertGreater(instance.notes, 0) self.assertGreater(instance.sum_counters, 0) self.assertNotEqual(instance.counters_updated, None) # fetch another time with override_api_context('vkontakte', token=TOKEN): users = User.remote.fetch(ids=[1, 2]) self.assertEqual(User.objects.count(), 2) instance = users[0] # test for keeping old counters self.assertGreater(instance.sum_counters, 0) self.assertGreater(instance.followers, 0) self.assertNotEqual(instance.counters_updated, None)
def test_fetch_comments(self): with override_api_context('instagram', token=TOKEN): m = Media.remote.fetch(MEDIA_ID) comments = m.fetch_comments() self.assertGreater(m.comments_count, 0) # TODO: 84 != 80 strange bug of API, may be limit of comments to fetch # self.assertEqual(m.comments_count, len(comments)) c = comments[0] self.assertEqual(c.media, m) self.assertGreater(len(c.text), 0) self.assertGreater(c.fetched, self.time) self.assertIsInstance(c.created_time, datetime)
def test_fetching_expired_users(self, fetch): with override_api_context('vkontakte', token=TOKEN): users = User.remote.fetch(ids=range(0, 1500)) self.assertEqual(users.count(), 1500) self.assertEqual(len(fetch.mock_calls[0].call_list()[0][2]['ids']), 1500) # make all users fresh User.objects.all().update(fetched=timezone.now()) # make 500 of them expired User.objects.filter(remote_id__lt=500).update( fetched=timezone.now() - timedelta(USERS_INFO_TIMEOUT_DAYS + 1)) with override_api_context('vkontakte', token=TOKEN): users_new = User.remote.fetch(ids=range(100, 2200), only_expired=True) self.assertEqual(users_new.count(), 2100) # (500 - 100) + (2200 - 1500), expired + new self.assertEqual(len(fetch.mock_calls[1].call_list()[0][2]['ids']), 1100)
def test_fetch_private_user(self): with override_api_context('instagram', token=TOKEN): with self.assertRaisesWithCode(InstagramError, 400): User.remote.fetch(USER_PRIVATE_ID) userf = UserFactory(id=USER_PRIVATE_ID) user = User.remote.fetch(USER_PRIVATE_ID) self.assertEqual(userf, user) self.assertFalse(userf.is_private) self.assertTrue(user.is_private) userf.refresh() self.assertTrue(userf.is_private)
def test_multiple_slug_users(self): User.objects.create(remote_id=173613533, screen_name='mikhailserzhantov', sex=0) User.objects.create(remote_id=174221855, screen_name='mikhailserzhantov', sex=0) User.objects.create(remote_id=182224356, screen_name='mikhailserzhantov', sex=0) with override_api_context('vkontakte', token=TOKEN): self.assertEqual( User.remote.get_by_slug('mikhailserzhantov').remote_id, 182224356)
def test_fetch_user_media_count(self): u = UserFactory(id=USER_ID) with override_api_context('instagram', token=TOKEN): media = u.fetch_media(count=100) m = media[0] self.assertEqual(media.count(), 100) self.assertEqual(m.user, u) self.assertGreater(len(m.caption), 0) self.assertGreater(len(m.link), 0) self.assertGreater(m.comments_count, 0) self.assertGreater(m.likes_count, 0) self.assertGreater(m.fetched, self.time) self.assertIsInstance(m.created_time, datetime)
def test_fetch_duble_duplicate_user(self): u1 = UserFactory(username='******', id=8910216) u2 = UserFactory(username='******', id=237074561) self.assertEqual(User.objects.count(), 2) self.assertEqual(int(u1.id), 8910216) self.assertEqual(int(u2.id), 237074561) self.assertEqual(u1.username, 'tnt_online') self.assertEqual(u2.username, 'bmwru') with override_api_context('instagram', token=TOKEN): u1 = User.remote.fetch(8910216) u2 = User.remote.fetch(237074561) self.assertEqual(User.objects.count(), 2) self.assertEqual(int(u1.id), 8910216) self.assertEqual(int(u2.id), 237074561) self.assertEqual(u1.username, 'bmwru') self.assertEqual(u2.username, 'tnt_online')
def test_get_url_info(self): with override_api_context('odnoklassniki', token=TOKEN): response = api_call('url.getInfo', url='http://www.odnoklassniki.ru/apiok') self.assertEqual(response, {u'objectId': GROUP_ID, u'type': u'GROUP'})
def test_fetch_tag(self): with override_api_context('instagram', token=TOKEN): t = Tag.remote.fetch(TAG_NAME) self.assertEqual(t.name, TAG_NAME) self.assertGreater(t.media_count, 0)
def test_unexisted_user(self): with override_api_context('instagram', token=TOKEN): with self.assertRaisesWithCode(InstagramError, 400): User.remote.get(0)