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])
Exemple #3
0
    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)