def test_saves_correct_user_data(self): user_data = self.make_user_data() user = self.make_user_object(user_data) self.assertEqual(user.fetch_time, datetime_now()) self.assertEqual(user.raw, json.dumps(user_data)) self.assertEqual(user.screen_name, 'philgyford') self.assertEqual(user.url, 'http://www.gyford.com/') self.assertFalse(user.is_private) self.assertFalse(user.is_verified) self.assertEqual( user.created_at, datetime.datetime.strptime( '2006-11-15 16:55:59', '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.utc)) self.assertEqual(user.description, 'Good. Good to Firm in places.') self.assertEqual(user.location, 'London, UK') self.assertEqual(user.time_zone, 'London') self.assertEqual( user.profile_image_url_https, 'https://pbs.twimg.com/profile_images/1167616130/james_200208_300x300_normal.jpg' ) self.assertEqual(user.favourites_count, 1389) self.assertEqual(user.followers_count, 2435) self.assertEqual(user.friends_count, 309) self.assertEqual(user.listed_count, 138) self.assertEqual(user.statuses_count, 16428)
def test_does_not_download_and_save_avatar(self, exists, download): "If we already have the user's avatar, don't download it." # Fake that the file we look for exists: exists.return_value = True user_data = self.make_user_data() saved_user = UserSaver().save_user(user_data, datetime_now()) assert not download.called
def test_calls_save_user_correctly(self, save_user, fetch_avatar): "The correct data should be sent to UserSaver.save_user()" self.expect_response('people.getInfo') result = UserFetcher(account=self.account).fetch( nsid='35034346050@N01') user_response = self.load_fixture('people.getInfo') save_user.assert_called_once_with( user_response['person'], datetime_now())
def test_does_not_download_and_save_avatar(self, exists, download): "If we already have the user's avatar, don't download it." # Fake that the file we look for exists: exists.return_value = True user_data = self.make_user_data() saved_user = UserSaver().save_user(user_data, datetime_now()) assert not download.called
def make_user_object(self, user_data, download): """"Creates/updates a User from API data, then fetches that User from the DB and returns it. """ # Quietly prevents avatar files being fetched: download.side_effect = DownloadException('Oops') saved_user = UserSaver().save_user(user_data, datetime_now()) return User.objects.get(twitter_id=12552)
def make_user_object(self, user_data, download): """"Creates/updates a User from API data, then fetches that User from the DB and returns it. """ # Quietly prevents avatar files being fetched: download.side_effect = DownloadException('Oops') saved_user = UserSaver().save_user(user_data, datetime_now()) return User.objects.get(twitter_id=12552)
def test_calls_save_user_correctly(self, save_user, fetch_avatar): "The correct data should be sent to UserSaver.save_user()" self.expect_response('people.getInfo') result = UserFetcher(account=self.account).fetch( nsid='35034346050@N01') user_response = self.load_fixture('people.getInfo') save_user.assert_called_once_with(user_response['person'], datetime_now())
def test_calls_fetch_and_save_avatar(self, fetch_avatar, download): "_fetch_and_save_avatar should be called with the User object." # Quietly prevents avatar files being fetched: download.side_effect = DownloadException('Oops') # Just make the mocked method return the User that's passed in: fetch_avatar.side_effect = lambda value: value user_data = self.make_user_data() saved_user = UserSaver().save_user(user_data, datetime_now()) fetch_avatar.assert_called_once_with(saved_user)
def test_calls_fetch_and_save_avatar(self, fetch_avatar, download): "_fetch_and_save_avatar should be called with the User object." # Quietly prevents avatar files being fetched: download.side_effect = DownloadException('Oops') # Just make the mocked method return the User that's passed in: fetch_avatar.side_effect = lambda value: value user_data = self.make_user_data() saved_user = UserSaver().save_user(user_data, datetime_now()) fetch_avatar.assert_called_once_with(saved_user)
def setUp(self): "Save a tweet using the api_fixture's data." fetch_time = datetime_now() tweet_data = json.loads(self.make_response_body()) # Send the JSON, and our new User object, to try and save the tweet: saved_tweet = TweetSaver().save_tweet(tweet_data, fetch_time) # Load that saved tweet from the DB: self.tweet = Tweet.objects.get(twitter_id=9876543210)
def setUp(self): "Save a tweet using the api_fixture's data." fetch_time = datetime_now() tweet_data = json.loads(self.make_response_body()) # Send the JSON, and our new User object, to try and save the tweet: saved_tweet = TweetSaver().save_tweet(tweet_data, fetch_time) # Load that saved tweet from the DB: self.tweet = Tweet.objects.get(twitter_id=9876543210)
def test_home_ordering_posted(self): "By default, photos should be in reverse-post_time order." dt = datetime_now() ac = AccountFactory() photo_1 = PhotoFactory(user=ac.user, post_time=dt - timedelta(days=1)) photo_3 = PhotoFactory(user=ac.user, post_time=dt - timedelta(days=3)) photo_2 = PhotoFactory(user=ac.user, post_time=dt - timedelta(days=2)) response = self.client.get(reverse('flickr:home')) pl = response.context['photo_list'] self.assertEqual(pl[0].pk, photo_1.pk) self.assertEqual(pl[1].pk, photo_2.pk) self.assertEqual(pl[2].pk, photo_3.pk)
def test_tag_detail_ordering_posted(self): "By default, photos should be in reverse-post_time order." dt = datetime_now() self.carp_photo.post_time = dt - timedelta(days=2) self.carp_photo.save() self.cod_photo.post_time = dt - timedelta(days=1) self.cod_photo.save() response = self.client.get(reverse('flickr:tag_detail', kwargs={'slug': 'fish'})) pl = response.context['photo_list'] self.assertEqual(pl[0].pk, self.cod_photo.pk) self.assertEqual(pl[1].pk, self.carp_photo.pk)
def test_tag_detail_ordering_posted(self): "By default, photos should be in reverse-post_time order." dt = datetime_now() self.carp_photo.post_time = dt - timedelta(days=2) self.carp_photo.save() self.cod_photo.post_time = dt - timedelta(days=1) self.cod_photo.save() response = self.client.get( reverse('flickr:tag_detail', kwargs={'slug': 'fish'})) pl = response.context['photo_list'] self.assertEqual(pl[0].pk, self.cod_photo.pk) self.assertEqual(pl[1].pk, self.carp_photo.pk)
def test_home_ordering_posted(self): "By default, photos should be in reverse-post_time order." dt = datetime_now() ac = AccountFactory() photo_1 = PhotoFactory(user=ac.user, post_time=dt - timedelta(days=1)) photo_3 = PhotoFactory(user=ac.user, post_time=dt - timedelta(days=3)) photo_2 = PhotoFactory(user=ac.user, post_time=dt - timedelta(days=2)) response = self.client.get(reverse('flickr:home')) pl = response.context['photo_list'] self.assertEqual(pl[0].pk, photo_1.pk) self.assertEqual(pl[1].pk, photo_2.pk) self.assertEqual(pl[2].pk, photo_3.pk)
def test_fetch_user_if_missing_fetches(self, save_user, fetch_avatar): """If the user isn't in fetched_users, it is fetched and saved.""" save_user.return_value = UserFactory.create(nsid='35034346050@N01') self.expect_response('people.getInfo') user_data = self.load_fixture('people.getInfo')['person'] self.fetcher._fetch_user_if_missing('35034346050@N01') save_user.assert_called_once_with(user_data, datetime_now()) self.assertEqual(1, len(self.fetcher.fetched_users)) self.assertEqual(self.fetcher.fetched_users['35034346050@N01'].nsid, '35034346050@N01')
def test_fetch_user_if_missing_fetches(self, save_user, fetch_avatar): """If the user isn't in fetched_users, it is fetched and saved.""" save_user.return_value = UserFactory.create(nsid='35034346050@N01') self.expect_response('people.getInfo') user_data = self.load_fixture('people.getInfo')['person'] self.fetcher._fetch_user_if_missing('35034346050@N01') save_user.assert_called_once_with(user_data, datetime_now()) self.assertEqual(1, len(self.fetcher.fetched_users)) self.assertEqual(self.fetcher.fetched_users['35034346050@N01'].nsid, '35034346050@N01')
def test_tag_detail_ordering_taken(self): """With ?order=taken, photos should be in reverse-taken_time order. And Photos with taken_unknown=True should not appear.""" dt = datetime_now() self.carp_photo.taken_time = dt - timedelta(days=2) self.carp_photo.save() self.cod_photo.taken_time = dt - timedelta(days=1) self.cod_photo.save() response = self.client.get( reverse('flickr:tag_detail', kwargs={'slug': 'fish'}) + \ '?order=taken') pl = response.context['photo_list'] self.assertEqual(pl[0].pk, self.cod_photo.pk) self.assertEqual(pl[1].pk, self.carp_photo.pk)
def test_tag_detail_ordering_taken(self): """With ?order=taken, photos should be in reverse-taken_time order. And Photos with taken_unknown=True should not appear.""" dt = datetime_now() self.carp_photo.taken_time = dt - timedelta(days=2) self.carp_photo.save() self.cod_photo.taken_time = dt - timedelta(days=1) self.cod_photo.save() response = self.client.get( reverse('flickr:tag_detail', kwargs={'slug': 'fish'}) + \ '?order=taken') pl = response.context['photo_list'] self.assertEqual(pl[0].pk, self.cod_photo.pk) self.assertEqual(pl[1].pk, self.carp_photo.pk)
def test_user_detail_ordering_posted(self): "By default, photos should be in reverse-post_time order." dt = datetime_now() user = UserFactory() ac = AccountFactory(user=user) photo_1 = PhotoFactory(user=user, post_time=dt - timedelta(days=1)) photo_3 = PhotoFactory(user=user, post_time=dt - timedelta(days=3)) photo_2 = PhotoFactory(user=user, post_time=dt - timedelta(days=2)) response = self.client.get( reverse('flickr:user_detail', kwargs={'nsid': user.nsid})) pl = response.context['photo_list'] self.assertEqual(pl[0].pk, photo_1.pk) self.assertEqual(pl[1].pk, photo_2.pk) self.assertEqual(pl[2].pk, photo_3.pk)
def test_user_detail_ordering_posted(self): "By default, photos should be in reverse-post_time order." dt = datetime_now() user = UserFactory() ac = AccountFactory(user=user) photo_1 = PhotoFactory(user=user, post_time=dt - timedelta(days=1)) photo_3 = PhotoFactory(user=user, post_time=dt - timedelta(days=3)) photo_2 = PhotoFactory(user=user, post_time=dt - timedelta(days=2)) response = self.client.get(reverse('flickr:user_detail', kwargs={'nsid': user.nsid})) pl = response.context['photo_list'] self.assertEqual(pl[0].pk, photo_1.pk) self.assertEqual(pl[1].pk, photo_2.pk) self.assertEqual(pl[2].pk, photo_3.pk)
def make_tweet(self, is_private=False): self.fetch_time = datetime_now() # Get the JSON for a single tweet. tweets_data = json.loads(self.make_response_body()) tweet_data = tweets_data[0] if is_private: tweet_data['user']['protected'] = True # Send the JSON, and our new User object, to try and save the tweet: saved_tweet = TweetSaver().save_tweet(tweet_data, self.fetch_time) # Load that saved tweet from the DB: return Tweet.objects.get(twitter_id=300)
def make_tweet(self, is_private=False): self.fetch_time = datetime_now() # Get the JSON for a single tweet. tweets_data = json.loads(self.make_response_body()) tweet_data = tweets_data[0] if is_private: tweet_data['user']['protected'] = True # Send the JSON, and our new User object, to try and save the tweet: saved_tweet = TweetSaver().save_tweet(tweet_data, self.fetch_time) # Load that saved tweet from the DB: return Tweet.objects.get(twitter_id=300)
def test_home_ordering_taken(self): """With ?order=taken, photos should be in reverse-taken_time order. And Photos with taken_unknown=True should not appear.""" dt = datetime_now() ac = AccountFactory() photo_1 = PhotoFactory(user=ac.user, taken_time=dt - timedelta(days=1)) photo_3 = PhotoFactory(user=ac.user, taken_time=dt - timedelta(days=3)) photo_2 = PhotoFactory(user=ac.user, taken_time=dt - timedelta(days=2)) photo_4 = PhotoFactory(user=ac.user, taken_unknown=True) response = self.client.get(reverse('flickr:home')+'?order=taken') pl = response.context['photo_list'] self.assertEqual(len(pl), 3) self.assertEqual(pl[0].pk, photo_1.pk) self.assertEqual(pl[1].pk, photo_2.pk) self.assertEqual(pl[2].pk, photo_3.pk)
def test_downloads_and_saves_avatar(self, download): "Should call download() and save avatar." # Make a temporary file, like download() would make: jpg = tempfile.NamedTemporaryFile() temp_filepath = jpg.name download.return_value = temp_filepath user_data = self.make_user_data() saved_user = UserSaver().save_user(user_data, datetime_now()) download.assert_called_once_with(saved_user.profile_image_url_https, ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']) self.assertEqual(saved_user.avatar, 'twitter/avatars/25/52/12552/%s' % os.path.basename(temp_filepath))
def test_home_ordering_taken(self): """With ?order=taken, photos should be in reverse-taken_time order. And Photos with taken_unknown=True should not appear.""" dt = datetime_now() ac = AccountFactory() photo_1 = PhotoFactory(user=ac.user, taken_time=dt - timedelta(days=1)) photo_3 = PhotoFactory(user=ac.user, taken_time=dt - timedelta(days=3)) photo_2 = PhotoFactory(user=ac.user, taken_time=dt - timedelta(days=2)) photo_4 = PhotoFactory(user=ac.user, taken_unknown=True) response = self.client.get(reverse('flickr:home') + '?order=taken') pl = response.context['photo_list'] self.assertEqual(len(pl), 3) self.assertEqual(pl[0].pk, photo_1.pk) self.assertEqual(pl[1].pk, photo_2.pk) self.assertEqual(pl[2].pk, photo_3.pk)
def test_downloads_and_saves_avatar(self, download): "Should call download() and save avatar." # Make a temporary file, like download() would make: jpg = tempfile.NamedTemporaryFile() temp_filepath = jpg.name download.return_value = temp_filepath user_data = self.make_user_data() saved_user = UserSaver().save_user(user_data, datetime_now()) download.assert_called_once_with( saved_user.profile_image_url_https, ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']) self.assertEqual( saved_user.avatar, 'twitter/avatars/25/52/12552/%s' % os.path.basename(temp_filepath))
def test_sets_scrobble_data(self): "Sets all the scrobble data correctly" self.add_recent_tracks_response() results = self.fetcher.fetch(fetch_type='all') scrobble = Scrobble.objects.get(artist__slug='lou+reed') self.assertEqual(scrobble.title, 'Lou Reed – Make Up') self.assertEqual(scrobble.account, self.account) self.assertEqual(scrobble.track.slug, 'make+up') self.assertEqual(scrobble.album.slug, 'transformer') self.assertEqual(scrobble.post_time, datetime.datetime.strptime( '2016-09-22 09:23:33', '%Y-%m-%d %H:%M:%S' ).replace(tzinfo=pytz.utc)) json_data = self.load_fixture('user_getrecenttracks') scrobble_json = json_data['recenttracks']['track'][2] self.assertEqual(scrobble.raw, json.dumps(scrobble_json)) self.assertEqual(scrobble.fetch_time, datetime_now())
def test_saves_correct_user_data(self): user_data = self.make_user_data() user = self.make_user_object(user_data) self.assertEqual(user.fetch_time, datetime_now()) self.assertEqual(user.raw, json.dumps(user_data)) self.assertEqual(user.screen_name, 'philgyford') self.assertEqual(user.url, 'http://www.gyford.com/') self.assertFalse(user.is_private) self.assertFalse(user.is_verified) self.assertEqual(user.created_at, datetime.datetime.strptime( '2006-11-15 16:55:59', '%Y-%m-%d %H:%M:%S' ).replace(tzinfo=pytz.utc)) self.assertEqual(user.description, 'Good. Good to Firm in places.') self.assertEqual(user.location, 'London, UK') self.assertEqual(user.time_zone, 'London') self.assertEqual(user.favourites_count, 1389) self.assertEqual(user.followers_count, 2435) self.assertEqual(user.friends_count, 309) self.assertEqual(user.listed_count, 138) self.assertEqual(user.statuses_count, 16428)
def test_granularity_6_no_link(self): self.assertEqual(display_time(datetime_now(), granularity=6), '<time datetime="2015">sometime in 2015</time>')
def test_granularity_4_no_link(self): self.assertEqual( display_time(datetime_now(), granularity=4), '<time datetime="2015-08">sometime in Aug 2015</time>')
def test_returns_time_with_link(self, reverse): reverse.return_value = '/2015/08/14/' self.assertEqual( display_time(datetime_now(), True), '<time datetime="2015-08-14 13:34:56">13:34 on <a href="/2015/08/14/" title="All items from this day">14 Aug 2015</a></time>' )
def test_returns_time_with_no_link(self): self.assertEqual( display_time(datetime_now()), '<time datetime="2015-08-14 13:34:56">13:34 on 14 Aug 2015</time>' )
def test_case_capfirst(self): self.assertEqual( display_time(datetime_now(), granularity=4, case='capfirst'), '<time datetime="2015-08">Sometime in Aug 2015</time>')
def test_case_lower(self): self.assertEqual( display_time(datetime_now(), granularity=4, case='lower'), '<time datetime="2015-08">sometime in aug 2015</time>')
def test_granularity_8_with_link(self): "Doesn't actually have a link as there's no exact day." self.assertEqual( display_time(datetime_now(), link_to_day=True, granularity=8), '<time datetime="2015">circa 2015</time>')
def test_granularity_8_no_link(self): self.assertEqual(display_time(datetime_now(), granularity=8), '<time datetime="2015">circa 2015</time>')
def test_granularity_4_with_link(self): "Doesn't actually have a link as there's no exact day." self.assertEqual( display_time(datetime_now(), link_to_day=True, granularity=4), '<time datetime="2015-08">sometime in Aug 2015</time>')
def test_datetime_now(self): self.assertEqual(datetime_now(), datetime.datetime.utcnow().replace(tzinfo=pytz.utc))