def test_game_summary_with_scores_returns_summary(self): result = Boxscore(None)._parse_summary( pq("""<table id="line-score"> <tbody> <tr> <td class="center">25</td> <td class="center">46</td> <td class="center">71</td> </tr> <tr> <td class="center">45</td> <td class="center">33</td> <td class="center">78</td> </tr> </tbody> </table>""")) assert result == {'away': [25, 46], 'home': [45, 33]}
def test_game_summary_with_no_scores_returns_none(self): result = Boxscore(None)._parse_summary( pq("""<table id="line-score"> <tbody> <tr> <td class="center"></td> <td class="center"></td> <td class="center"></td> </tr> <tr> <td class="center"></td> <td class="center"></td> <td class="center"></td> </tr> </tbody> </table>""")) assert result == {'away': [None, None], 'home': [None, None]}
def handle(self, *args, **options): for i in range(388, 20 * 365): print('Getting Boxscores') boxscores = Boxscores(date=datetime.now() - timedelta(days=i)) for date, data in boxscores.games.items(): print(date) for game in data: print('Getting Boxscore for {}'.format(game['boxscore'])) try: boxscore = Boxscore(game['boxscore']) except IndexError: continue try: print('Getting Game Dict') game_dict = boxscore.dataframe.to_dict('records')[0] except AttributeError: continue del game_dict['winning_name'] del game_dict['losing_name'] del game_dict['winner'] del game_dict['date'] date = datetime.strptime(boxscore.date, '%B %d, %Y') try: print('Creating GameBoxscore Object') game, created = GameBoxscore.objects.update_or_create( date=date, winner=Team.objects.get( abbreviation=boxscore.winning_abbr), loser=Team.objects.get( abbreviation=boxscore.losing_abbr), defaults=game_dict) except Team.DoesNotExist: continue home_team = boxscore.home_players away_team = boxscore.away_players for player in home_team + away_team: print('Getting Player Dict for {}'.format(player.name)) player_dict = player.dataframe.to_dict('records')[0] player_dict['game'] = game print('Creating PlayerBoxscore Object') PlayerBoxscore.objects.update_or_create( player=player.name, date=date, defaults=player_dict)
def setup_method(self, *args, **kwargs): flexmock(Boxscore) \ .should_receive('_parse_game_data') \ .and_return(None) self.boxscore = Boxscore(None)
class TestNCAABBoxscore: @patch('requests.get', side_effect=mock_pyquery) def setup_method(self, *args, **kwargs): flexmock(Boxscore) \ .should_receive('_parse_game_data') \ .and_return(None) self.boxscore = Boxscore(None) def test_away_team_wins(self): fake_away_points = PropertyMock(return_value=75) fake_home_points = PropertyMock(return_value=70) type(self.boxscore)._away_points = fake_away_points type(self.boxscore)._home_points = fake_home_points assert self.boxscore.winner == AWAY def test_home_team_wins(self): fake_away_points = PropertyMock(return_value=70) fake_home_points = PropertyMock(return_value=75) type(self.boxscore)._away_points = fake_away_points type(self.boxscore)._home_points = fake_home_points assert self.boxscore.winner == HOME def test_winning_name_di_is_home(self): expected_name = 'Home Name' test_name = '<a>cbb/schools</a>Home Name' fake_winner = PropertyMock(return_value=HOME) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.winning_name == expected_name def test_winning_name_non_di_is_home(self): expected_name = 'Home Name' test_name = 'Home Name' fake_winner = PropertyMock(return_value=HOME) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.winning_name == expected_name def test_winning_name_di_is_away(self): expected_name = 'Away Name' test_name = '<a>cbb/schools</a>Away Name' fake_winner = PropertyMock(return_value=AWAY) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.winning_name == expected_name def test_winning_name_non_di_is_away(self): expected_name = 'Away Name' test_name = 'Away Name' fake_winner = PropertyMock(return_value=AWAY) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.winning_name == expected_name def test_winning_abbr_di_is_home(self): expected_name = 'Home' test_name = '<a>cbb/schools</a>HOME' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=HOME) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.winning_abbr == expected_name def test_winning_abbr_non_di_is_home(self): expected_name = 'HOME' test_name = 'HOME' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=HOME) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.winning_abbr == expected_name def test_winning_abbr_di_is_away(self): expected_name = 'AWAY' test_name = '<a>cbb/schools</a>AWAY' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=AWAY) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.winning_abbr == expected_name def test_winning_abbr_non_di_is_away(self): expected_name = 'AWAY' test_name = 'AWAY' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=AWAY) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.winning_abbr == expected_name def test_losing_name_di_is_home(self): expected_name = 'Home Name' test_name = '<a>cbb/schools</a>Home Name' fake_winner = PropertyMock(return_value=AWAY) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.losing_name == expected_name def test_losing_name_non_di_is_home(self): expected_name = 'Home Name' test_name = 'Home Name' fake_winner = PropertyMock(return_value=AWAY) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.losing_name == expected_name def test_losing_name_di_is_away(self): expected_name = 'Away Name' test_name = '<a>cbb/schools</a>Away Name' fake_winner = PropertyMock(return_value=HOME) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.losing_name == expected_name def test_losing_name_non_di_is_away(self): expected_name = 'Away Name' test_name = 'Away Name' fake_winner = PropertyMock(return_value=HOME) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.losing_name == expected_name def test_losing_abbr_di_is_home(self): expected_name = 'HOME' test_name = '<a>cbb/schools</a>HOME' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=AWAY) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.losing_abbr == expected_name def test_losing_abbr_non_di_is_home(self): expected_name = 'HOME' test_name = 'HOME' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=AWAY) fake_home_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._home_name = fake_home_name assert self.boxscore.losing_abbr == expected_name def test_losing_abbr_di_is_away(self): expected_name = 'AWAY' test_name = '<a>cbb/schools</a>AWAY' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=HOME) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.losing_abbr == expected_name def test_losing_abbr_non_di_is_away(self): expected_name = 'AWAY' test_name = 'AWAY' flexmock(utils) \ .should_receive('_parse_abbreviation') \ .and_return(expected_name) fake_winner = PropertyMock(return_value=HOME) fake_away_name = PropertyMock(return_value=MockName(test_name)) type(self.boxscore).winner = fake_winner type(self.boxscore)._away_name = fake_away_name assert self.boxscore.losing_abbr == expected_name def test_invalid_away_record_returns_default_wins(self): fake_record = PropertyMock(return_value='Purdue (1)') type(self.boxscore)._away_record = fake_record assert self.boxscore.away_wins == 0 def test_invalid_away_record_returns_default_losses(self): fake_record = PropertyMock(return_value='Purdue (1)') type(self.boxscore)._away_record = fake_record assert self.boxscore.away_losses == 0 def test_invalid_home_record_returns_default_wins(self): fake_record = PropertyMock(return_value='Purdue (1)') type(self.boxscore)._home_record = fake_record assert self.boxscore.home_wins == 0 def test_invalid_home_record_returns_default_losses(self): fake_record = PropertyMock(return_value='Purdue (1)') type(self.boxscore)._home_record = fake_record assert self.boxscore.home_losses == 0 def test_game_summary_with_no_scores_returns_none(self): result = Boxscore(None)._parse_summary(pq( """<table id="line-score"> <tbody> <tr> <td class="right"></td> <td class="right"></td> </tr> <tr> <td class="right"></td> <td class="right"></td> </tr> </tbody> </table>""" )) assert result == { 'away': [None], 'home': [None] } def test_invalid_url_returns_none(self): result = Boxscore(None)._retrieve_html_page('') assert result is None def test_parsing_name_for_non_di_school(self): name = 'Away name' boxscore = MockBoxscore(name) result = self.boxscore._parse_name('away_name', boxscore) assert result == name def test_no_home_free_throw_percentage_returns_default(self): fake_percentage = PropertyMock(return_value='') type(self.boxscore)._home_free_throw_percentage = fake_percentage assert self.boxscore.home_free_throw_percentage is None def test_no_away_free_throw_percentage_returns_default(self): fake_percentage = PropertyMock(return_value='') type(self.boxscore)._away_free_throw_percentage = fake_percentage assert self.boxscore.away_free_throw_percentage is None def test_empty_boxscore_class_returns_dataframe_of_none(self): fake_points = PropertyMock(return_value=None) type(self.boxscore)._home_points = fake_points type(self.boxscore)._away_points = fake_points assert self.boxscore._home_points is None assert self.boxscore._away_points is None assert self.boxscore.dataframe is None def test_away_win_percentage_no_games_played_returns_default(self): fake_games = PropertyMock(return_value=0) type(self.boxscore).away_wins = fake_games type(self.boxscore).away_losses = fake_games assert self.boxscore.away_wins == 0 assert self.boxscore.away_losses == 0 assert self.boxscore.away_win_percentage == 0.0 def test_home_win_percentage_no_games_played_returns_default(self): fake_games = PropertyMock(return_value=0) type(self.boxscore).home_wins = fake_games type(self.boxscore).home_losses = fake_games assert self.boxscore.home_wins == 0 assert self.boxscore.home_losses == 0 assert self.boxscore.home_win_percentage == 0.0 def test_ranking_with_no_boxscores(self): ranking = self.boxscore._parse_ranking('home_ranking', MockBoxscore('')) assert ranking is None def test_ncaab_game_info(self): fields = { 'date': 'November 9, 2018', 'location': 'WVU Coliseum, Morgantown, West Virginia' } mock_field = """November 9, 2018 WVU Coliseum, Morgantown, West Virginia Logos via Sports Logos.net / About logos """ m = MockBoxscoreData(MockField(mock_field)) for field, value in fields.items(): result = self.boxscore._parse_game_date_and_location(field, m) assert value == result def test_ncaab_partial_game_info(self): fields = { 'date': 'November 9, 2018', 'location': None } mock_field = """November 9, 2018 Logos via Sports Logos.net / About logos""" m = MockBoxscoreData(MockField(mock_field)) for field, value in fields.items(): result = self.boxscore._parse_game_date_and_location(field, m) assert value == result
def test_invalid_url_returns_none(self): result = Boxscore(None)._retrieve_html_page('') assert result is None
def boxscore(self): """ Returns an instance of the Boxscore class containing more detailed stats on the game. """ return Boxscore(self._boxscore)