def __run_rss_contest_test(self, test): contest = self.__load_contest_from_test("user1", test["contest"]) user = User.objects.get(username="******") slug = re.sub(r'\s+', '-', test["contest"]["name"].lower()) # rssfile = os.path.join(os.path.dirname(os.path.abspath(__file__)), #'test-data', 'test-' + slug + '.xml') player = Player.objects.get(user=user) with tempfile.NamedTemporaryFile(delete=False) as rsstmpfile: rssfile = rsstmpfile.name player.untappd_rss = 'file://localhost' + rssfile player.save() contest_player = contest.add_player(player) self.__build_rss_feed(rssfile, contest_player, test["feed"]) load_player_checkins(player, contest.id) for fbeer in test["feed"]: uv = Unvalidated_Checkin.objects.get( untappd_checkin=fbeer["untappd_checkin"]) self.assertEqual(fbeer["has_possibles"], uv.has_possibles, "{} mismatched has_possibles".format(uv)) if "possible_bonuses" in fbeer: self.assertIsNotNone(uv.possible_bonuses) ids = [Contest_Bonus.objects.get(name=name).id for name in fbeer["possible_bonuses"]] self.assertEqual(sorted(uv.possible_bonuses), sorted(ids), "Should have possible bonuses {}".format(uv)) else: self.assertIsNone(uv.possible_bonuses)
def handle(self, *args, **opts): """ Primarily calls load_player_checkins with the right arguments """ players = Player.objects.all() contest_id = None after_date = None if 'player' in opts and opts['player']: players = players.filter(user__username=opts['player'][0]) if players.count() == 0: raise CommandError(('Error: no such player: ' + '{}').format( opts['player'][0])) if 'contest' in opts and opts['contest']: try: contest_id = opts['contest'][0] Contest.objects.get(id=contest_id) except Contest.DoesNotExist: raise CommandError(('Error: load-checkins got a contest that' + ' did not exist: {}').format(contest_id)) if 'after_date' in opts and opts['after_date']: after_date = opts['after_date'][0] for player in players: load_player_checkins(player, from_date=after_date, contest_id=contest_id)
def test_successful_feed_for_player_twice(self): """ Test the ability to load a single XML feed file for a user twice. The second call shouldn't add any new checkins because they'd be redundant """ runner = Player.objects.get(id=4) player = Player.objects.get(id=1) player.untappd_rss = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test-data', 'test-checkins.xml') player.save() start_date = timezone.make_aware(datetime.datetime(2017, 1, 1)) end_date = timezone.make_aware(datetime.datetime(2017, 12, 31)) contest = Contest.objects.create_contest('Contest', runner, start_date, end_date) contest.save() contest_player = contest.add_player(player) contest_player.save() load_player_checkins(player) checkins = Unvalidated_Checkin.objects.filter(contest_player=contest_player) self.assertEqual(checkins.count(), 25) load_player_checkins(player) checkins = Unvalidated_Checkin.objects.filter(contest_player=contest_player) self.assertEqual(checkins.count(), 25)
def test_successful_feed_after_date(self): """Tests the ability to load a subset of a XML feed after a certain date""" runner = Player.objects.get(id=4) player = Player.objects.get(id=1) player.untappd_rss = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test-data', 'test-checkins.xml') player.save() start_date = timezone.make_aware(datetime.datetime(2017, 1, 1)) end_date = timezone.make_aware(datetime.datetime(2017, 12, 31)) contest = Contest.objects.create_contest('Contest', runner, start_date, end_date) contest.save() contest_player = contest.add_player(player) contest_player.save() from_date = timezone.make_aware(datetime.datetime(2017, 6, 1)) load_player_checkins(player, from_date=from_date) checkins = Unvalidated_Checkin.objects.filter( contest_player=contest_player) self.assertEqual(checkins.count(), 4)