def testGameSerialization_fromGameInfo(self): game_info = score_reporter_crawler.GameInfo( 'id', 'tourney_url', 'tourney-name', scores_messages.Division.OPEN, scores_messages.AgeBracket.NO_RESTRICTION) game_info.home_team_score = '5' game_info.away_team_score = '6' game_info.status = 'Final' game_info.home_team_link = 'a' game_info.away_team_link = 'b' url_map = {'a': '123', 'b': '456'} converted_game = game_model.Game.FromGameInfo(game_info, url_map) self.assertEqual(scores_messages.Division.OPEN, converted_game.division) self.assertEqual(scores_messages.AgeBracket.NO_RESTRICTION, converted_game.age_bracket) self.assertEqual('id', converted_game.id_str) self.assertEqual('tourney-name', converted_game.tournament_id) self.assertEqual('tourney name', converted_game.tournament_name) self.assertEqual([5, 6], converted_game.scores) self.assertEqual(scores_messages.GameStatus.FINAL, converted_game.game_status) self.assertEqual(1, len(converted_game.sources)) date = datetime.datetime.utcnow() source = game_model.GameSource( type=scores_messages.GameSourceType.SCORE_REPORTER, score_reporter_url='tourney_url', update_date_time=date) converted_game.sources[0].update_date_time = date self.assertEqual([source], converted_game.sources) self.assertEqual(2, len(converted_game.teams)) self.assertEqual('123', converted_game.teams[0].score_reporter_id) self.assertEqual('456', converted_game.teams[1].score_reporter_id)
def testParseGameInfos_singleDivision(self): content = self.testdata.GetLinkedScoresPage() name = 'East-New-England-Mens-Sectionals-2015' url = '%s/%s' % (name, '/schedule/Men/Club-Men/') actual_games = self.crawler.ParseGameInfos(content, url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.NO_RESTRICTION) # No placement brackets for this tournament. self.assertEqual(31, len(actual_games)) for game in actual_games: logging.info('date: %s, time: %s', game.date, game.time) # Verify full parsing of one pool play game. full_url = '%s/%s' % (score_reporter_crawler.EVENT_PREFIX, url) game = score_reporter_crawler.GameInfo('83210', full_url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.NO_RESTRICTION) game.date = 'Sat 8/29' game.time = '9:30 AM' game.field = 'TBA' game.home_team = 'Garuda (1)' game.away_team = 'Birds of Pray (9)' game.home_team_link = '/events/teams/?EventTeamId=WO6CSqOhIVnYrxZG2nJOyxJxTe96hKyt4GWPoKUJW4c%3d' game.away_team_link = '/events/teams/?EventTeamId=ibuw7QYAoDrkmXWO3HCnY%2fB1SZIPhrbsQg4X3bDuOEs%3d' game.home_team_score = 'W' game.away_team_score = 'F' game.status = 'Final' game.pool_name = 'Pool A' self.assertEqual(game, actual_games[0]) # Verify full parsing of one bracket game. game = score_reporter_crawler.GameInfo('83230', full_url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.NO_RESTRICTION) game.date = '8/30/2015 11:30 AM' game.time = '' game.field = '' game.home_team = 'Garuda (1)' game.away_team = 'Big Wrench (2)' game.home_team_link = '/events/teams/?EventTeamId=WO6CSqOhIVnYrxZG2nJOyxJxTe96hKyt4GWPoKUJW4c%3d' game.away_team_link = '/events/teams/?EventTeamId=i2gXqMBL623tnaB43nuvMx5d33XJ9RmPFjiSa0qm71U%3d' game.home_team_score = '12' game.away_team_score = '9' game.status = '' game.bracket_title = 'Finals' self.assertEqual(game, actual_games[20])
def testParseTourneyScores_updateDate(self, mock_add_queue): # Page with two teams, one of which has been added to the DB. self.SetHtmlResponse(FAKE_TOURNEY_SCORES_PAGE) params = { 'url_suffix': 'schedule/Men/College-Men/', 'name': 'my_tourney', 'division': 'OPEN', 'age_bracket': 'COLLEGE' } # Both teams, the tournament, and the game have already been added to the database. key = game_model.tourney_key_full(params['name']) now = datetime.utcnow() tourney = game_model.Tournament( last_modified_at=datetime(2016, 5, 25, 0, 0), key=key, has_started=False, start_date=datetime(2016, 5, 31, 0, 0), end_date=datetime(2016, 5, 31, 0, 0), sub_tournaments=[ game_model.SubTournament( division=scores_messages.Division.OPEN, age_bracket=scores_messages.AgeBracket.COLLEGE) ], url='%s%s' % (score_reporter_handler.USAU_URL_PREFIX, params.get('name', '')), id_str=params.get('name', ''), name='my tourney') tourney.put() game_model.TeamIdLookup(score_reporter_id='123', score_reporter_tourney_id=['8%3d']).put() game_model.TeamIdLookup(score_reporter_id='456', score_reporter_tourney_id=['g%3d']).put() game_info = score_reporter_crawler.GameInfo( '71984', 'my_tourney', 'my_tourney', scores_messages.Division.OPEN, scores_messages.AgeBracket.COLLEGE) game_info.status = 'Unknown' game = game_model.Game.FromGameInfo(game_info, {}) self.assertEquals(scores_messages.GameStatus.UNKNOWN, game.game_status) game.put() response = self.testapp.get('/tasks/sr/crawl_tournament', params=params) self.assertEqual(200, response.status_int) calls = mock_add_queue.mock_calls self.assertEquals(0, len(calls)) db_game = game_model.game_key(game).get() self.assertEquals(scores_messages.GameStatus.FINAL, db_game.game_status) db_tourney = key.get() # Tournament details should have been updated. self.assertEquals(True, db_tourney.has_started) self.assertTrue(db_tourney.last_modified_at >= now)
def testGameSerialization_fromGameInfoNonNumberScores(self): game_info = score_reporter_crawler.GameInfo( 'id', 'tourney_id', 'tourney_name', scores_messages.Division.OPEN, scores_messages.AgeBracket.NO_RESTRICTION) game_info.home_team_score = 'W' game_info.away_team_score = 'L' converted_game = game_model.Game.FromGameInfo(game_info, {}) self.assertEqual([1, -1], converted_game.scores) game_info.home_team_score = 'l' game_info.away_team_score = 'w' converted_game = game_model.Game.FromGameInfo(game_info, {}) self.assertEqual([-1, 1], converted_game.scores) game_info.home_team_score = 'nonsense' game_info.away_team_score = 'nonsense' converted_game = game_model.Game.FromGameInfo(game_info, {}) self.assertEqual([-1, -1], converted_game.scores)
def testGetGameInfo_scoreReporterSource(self, mock_add_queue, mock_app_identity): """Test functionality of GetGameInfo using a SR source.""" game_info = score_reporter_crawler.GameInfo( 'id', 'tourney_id', 'name', scores_messages.Division.OPEN, scores_messages.AgeBracket.NO_RESTRICTION) team_tourney_map = {} game = game_model.Game.FromGameInfo(game_info, team_tourney_map) game.put() self.assertGameDbSize(1) game_id = game.id_str request = scores_messages.GameInfoRequest() request.game_id_str = game_id response = self.api.GetGameInfo(request) self.assertEquals(0, len(response.twitter_sources)) self.assertEquals('tourney_id', response.score_reporter_source.score_reporter_url) self.assertEquals(game_id, response.game.id_str)
def testParseGameInfos_multipleDivisions(self): content = self.testdata.GetMultiDivisionTournamentScoresPage() name = 'USA-Ultimate-D-I-College-Championships-2015' url = '%s/%s' % (name, 'schedule/Men/College-Men/') full_url = '%s/%s' % (score_reporter_crawler.EVENT_PREFIX, url) actual_games = self.crawler.ParseGameInfos(content, full_url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.COLLEGE) self.assertEqual(55, len(actual_games)) for game in actual_games: logging.info('date: %s, time: %s', game.date, game.time) # Verify full parsing of one pool play game. game = score_reporter_crawler.GameInfo('71984', full_url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.COLLEGE) game.date = 'Fri 5/22' game.time = '10:30 AM' game.field = 'Field 5' game.home_team = 'Pittsburgh (1)' game.away_team = 'Georgia (8)' game.home_team_link = '/events/teams/?EventTeamId=Ug2uww1laX%2fVPnLB4r7NDl1RNuJQDCPPw2VZWOlDT4g%3d' game.away_team_link = '/events/teams/?EventTeamId=f0uATWXWUuVmOhU5qFwpseoRjhiJrnkc89NyoAjJEK8%3d' game.home_team_score = '15' game.away_team_score = '13' game.pool_name = 'Pool A' game.status = 'Final' self.assertEqual(game, actual_games[0]) # Verify full parsing of one bracket game. game = score_reporter_crawler.GameInfo('72034', full_url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.COLLEGE) game.date = '5/25/2015 2:30 PM' game.time = '' game.field = 'Field 1' game.home_team = 'Oregon (15)' game.away_team = 'North Carolina (3)' game.home_team_link = '/events/teams/?EventTeamId=4mXGp3TuNpmoqX2WhNX%2brhtHIQgY1ZmciKxhCQXvYnk%3d' game.away_team_link = '/events/teams/?EventTeamId=Uv5epkn9IFbchnmKHlhisIf%2f5TcR6KZCp4%2brQZ3hMGU%3d' game.home_team_score = '6' game.away_team_score = '15' game.status = '' game.bracket_title = 'Finals' self.assertEqual(game, actual_games[40]) # Verify full parsing of one placement bracket game. game = score_reporter_crawler.GameInfo('72047', full_url, name, scores_messages.Division.OPEN, scores_messages.AgeBracket.COLLEGE) game.date = '5/24/2015 8:30 AM' game.time = '' game.field = 'Field 11' game.home_team = 'Wisconsin (12)' game.away_team = 'Cornell (20)' game.home_team_link = '/events/teams/?EventTeamId=eKtMX5hrmQxMbFhIQXxm0gEWJfYEz%2fxBm4iKkiZ9qlM%3d' game.away_team_link = '/events/teams/?EventTeamId=R2JcuXLUduzb0Y0%2fQFPQyiSjWzkSeS4mFY8xdoCasds%3d' game.home_team_score = '15' game.away_team_score = '12' game.status = '' game.bracket_title = 'Placement Game #1' self.assertEqual(game, actual_games[51])
def testGetGames_scoreReporterGame(self, mock_add_queue, mock_app_identity): """Verify the API handles the case where a SR game is returned.""" mock_app_identity.get_default_version_hostname = mock.MagicMock() mock_app_identity.get_default_version_hostname.return_value = 'production host' user = self.CreateUser(2, 'bob') user.put() teams = [ game_model.Team(score_reporter_id='a'), game_model.Team(score_reporter_id='b') ] info = score_reporter_crawler.GameInfo( 'a', 'b', 'name', scores_messages.Division.WOMENS, scores_messages.AgeBracket.NO_RESTRICTION) info.home_team_link = 'c' info.away_team_link = 'd' team_tourney_map = { 'c': 'e', 'd': 'f', } game = game_model.Game.FromGameInfo(info, team_tourney_map) game.put() self.assertGameDbSize(1) team_info = game_model.FullTeamInfo( key=game_model.full_team_info_key('e'), id='e', name='name', age_bracket=scores_messages.AgeBracket.NO_RESTRICTION, division=scores_messages.Division.WOMENS, website='website', screen_name='twitter_screenname', facebook_url='facebook_url', image_link='image_link', coach='coach', asst_coach='asst_coach') team_info.put() # Request with all operators request = scores_messages.GamesRequest() request.league = scores_messages.League.USAU request.division = scores_messages.Division.WOMENS request.age_bracket = scores_messages.AgeBracket.NO_RESTRICTION response = self.api.GetGames(request) self.assertEquals(1, len(response.games)) self.assertEquals(2, len(response.games[0].teams)) account = scores_messages.ScoreReporterAccount( id='e', name='name', team_website='website', facebook_url='facebook_url', screen_name='twitter_screenname', profile_image_url_https='%s%s' % (scores_api.USAU_PREFIX, 'image_link'), coach='coach', asst_coach='asst_coach') self.assertEquals(account, response.games[0].teams[0].score_reporter_account) account = scores_messages.ScoreReporterAccount(id='f') self.assertEquals(account, response.games[0].teams[1].score_reporter_account)