예제 #1
0
    def test_invalid_url_returns_none(self, *args, **kwargs):
        mock_id = PropertyMock(return_value='BAD')
        player = Player(None)
        type(player)._player_id = mock_id

        result = player._retrieve_html_page()

        assert result is None
예제 #2
0
    def test_nhl_goalie_returns_player_season_stats(self, *args, **kwargs):
        # Request the 2017 stats
        player = Player('howarja02')
        player = player('2017-18')

        for attribute, value in self.goalie_results_2017.items():
            assert getattr(player, attribute) == value
예제 #3
0
    def test_nhl_goalie_returns_requested_career_stats(self, *args, **kwargs):
        # Request the career stats
        player = Player('howarja02')
        player = player('')

        for attribute, value in self.goalie_results_career.items():
            assert getattr(player, attribute) == value
예제 #4
0
    def test_nhl_skater_returns_player_season_stats(self, *args, **kwargs):
        # Request the 2017 stats
        player = Player('zettehe01')
        player = player('2017-18')

        for attribute, value in self.skater_results_2017.items():
            assert getattr(player, attribute) == value
예제 #5
0
    def test_nhl_skater_returns_requested_career_stats(self, *args, **kwargs):
        # Request the career stats
        player = Player('zettehe01')
        player = player('')

        for attribute, value in self.skater_results_career.items():
            assert getattr(player, attribute) == value
예제 #6
0
    def test_nhl_player_string_representation(self, *args, **kwargs):
        player = Player('zettehe01')

        assert player.__repr__() == 'Henrik Zetterberg (zettehe01)'
예제 #7
0
    def test_nhl_404_returns_none_for_different_season(self, *args, **kwargs):
        player = Player('bad')

        assert player.name is None
        assert player.dataframe is None
예제 #8
0
    def test_nhl_404_returns_none_with_no_errors(self, *args, **kwargs):
        player = Player('bad')

        assert player.name is None
        assert player.dataframe is None
예제 #9
0
    def test_dataframe_returns_dataframe(self, *args, **kwargs):
        dataframe = [
            {'adjusted_assists': 46,
             'adjusted_goals': 11,
             'adjusted_goals_against_average': None,
             'adjusted_goals_created': 19,
             'adjusted_points': 57,
             'age': 37,
             'assists': 45,
             'average_time_on_ice': '19:30',
             'blocks_at_even_strength': 34,
             'corsi_against': 1243.0,
             'corsi_for': None,
             'corsi_for_percentage': 50.6,
             'defensive_point_shares': 2.0,
             'defensive_zone_start_percentage': 45.2,
             'even_strength_assists': 28,
             'even_strength_goals': 10,
             'even_strength_goals_allowed': None,
             'even_strength_save_percentage': None,
             'even_strength_shots_faced': None,
             'faceoff_losses': 709,
             'faceoff_percentage': 48.4,
             'faceoff_wins': 666,
             'fenwick_against': 948,
             'fenwick_for': 975,
             'fenwick_for_percentage': 50.7,
             'game_winning_goals': 2,
             'games_played': 82,
             'giveaways': 57,
             'goal_against_percentage_relative': None,
             'goalie_point_shares': None,
             'goals': 11,
             'goals_against': None,
             'goals_against_average': None,
             'goals_against_on_ice': 52,
             'goals_created': 18,
             'goals_for_on_ice': 54,
             'goals_saved_above_average': None,
             'height': '6-0',
             'hits_at_even_strength': 49,
             'league': 'NHL',
             'losses': None,
             'minutes': None,
             'name': 'Henrik Zetterberg',
             'offensive_point_shares': 2.4,
             'offensive_zone_start_percentage': 54.8,
             'pdo': 99.9,
             'penalties_in_minutes': 14,
             'player_id': 'zettehe01',
             'plus_minus': 1,
             'point_shares': 4.4,
             'points': 56,
             'power_play_assists': 17,
             'power_play_goals': 1,
             'power_play_goals_against_on_ice': 0,
             'power_play_goals_allowed': None,
             'power_play_goals_for_on_ice': 25,
             'power_play_save_percentage': None,
             'power_play_shots_faced': None,
             'quality_start_percentage': None,
             'quality_starts': None,
             'really_bad_starts': None,
             'relative_corsi_for_percentage': 2.7,
             'relative_fenwick_for_percentage': 2.0,
             'save_percentage': None,
             'save_percentage_on_ice': None,
             'saves': None,
             'season': '2017-18',
             'shooting_percentage': 6.1,
             'shooting_percentage_on_ice': 7.6,
             'shootout_attempts': 3,
             'shootout_goals': 0,
             'shootout_misses': 3,
             'shootout_percentage': 0.0,
             'short_handed_assists': 0,
             'short_handed_goals': 0,
             'short_handed_goals_allowed': None,
             'short_handed_save_percentage': None,
             'short_handed_shots_faced': None,
             'shots_against': None,
             'shots_on_goal': 180,
             'shutouts': None,
             'takeaways': 51,
             'team_abbreviation': 'DET',
             'ties_plus_overtime_loss': None,
             'time_on_ice': 1599,
             'time_on_ice_even_strength': 1382.2,
             'total_goals_against_on_ice': 53,
             'total_goals_for_on_ice': 79,
             'total_shots': 332,
             'weight': 197,
             'wins': None},
            {'adjusted_assists': 692,
             'adjusted_goals': 377,
             'adjusted_goals_against_average': None,
             'adjusted_goals_created': 394,
             'adjusted_points': 1069,
             'age': None,
             'assists': 623,
             'average_time_on_ice': '19:35',
             'blocks_at_even_strength': 267,
             'corsi_against': 10322.0,
             'corsi_for': None,
             'corsi_for_percentage': 55.1,
             'defensive_point_shares': 29.4,
             'defensive_zone_start_percentage': 45.5,
             'even_strength_assists': 379,
             'even_strength_goals': 228,
             'even_strength_goals_allowed': None,
             'even_strength_save_percentage': None,
             'even_strength_shots_faced': None,
             'faceoff_losses': 5602,
             'faceoff_percentage': 51.1,
             'faceoff_wins': 5863,
             'fenwick_against': 8123,
             'fenwick_for': 9757,
             'fenwick_for_percentage': 54.6,
             'game_winning_goals': 64,
             'games_played': 1082,
             'giveaways': 482,
             'goal_against_percentage_relative': None,
             'goalie_point_shares': None,
             'goals': 337,
             'goals_against': None,
             'goals_against_average': None,
             'goals_against_on_ice': 530,
             'goals_created': 348,
             'goals_for_on_ice': 633,
             'goals_saved_above_average': None,
             'height': '6-0',
             'hits_at_even_strength': 471,
             'league': 'NHL',
             'losses': None,
             'minutes': None,
             'name': 'Henrik Zetterberg',
             'offensive_point_shares': 79.9,
             'offensive_zone_start_percentage': 54.5,
             'pdo': 100.0,
             'penalties_in_minutes': 401,
             'player_id': 'zettehe01',
             'plus_minus': 160,
             'point_shares': 109.3,
             'points': 960,
             'power_play_assists': 235,
             'power_play_goals': 100,
             'power_play_goals_against_on_ice': 140,
             'power_play_goals_allowed': None,
             'power_play_goals_for_on_ice': 490,
             'power_play_save_percentage': None,
             'power_play_shots_faced': None,
             'quality_start_percentage': None,
             'quality_starts': None,
             'really_bad_starts': None,
             'relative_corsi_for_percentage': 3.3,
             'relative_fenwick_for_percentage': 3.1,
             'save_percentage': None,
             'save_percentage_on_ice': None,
             'saves': None,
             'season': 'Career',
             'shooting_percentage': 9.8,
             'shooting_percentage_on_ice': 8.8,
             'shootout_attempts': 47,
             'shootout_goals': 10,
             'shootout_misses': 37,
             'shootout_percentage': 21.3,
             'short_handed_assists': 9,
             'short_handed_goals': 9,
             'short_handed_goals_allowed': None,
             'short_handed_save_percentage': None,
             'short_handed_shots_faced': None,
             'shots_against': None,
             'shots_on_goal': 3455,
             'shutouts': None,
             'takeaways': 454,
             'team_abbreviation': None,
             'ties_plus_overtime_loss': None,
             'time_on_ice': 21186,
             'time_on_ice_even_strength': 12658.7,
             'total_goals_against_on_ice': 851,
             'total_goals_for_on_ice': 1362,
             'total_shots': 5408,
             'weight': 197,
             'wins': None}
        ]
        indices = ['2017', 'Career']

        df = pd.DataFrame(dataframe, index=indices)
        player = Player('zettehe01')

        # Pandas doesn't natively allow comparisons of DataFrames.
        # Concatenating the two DataFrames (the one generated during the test
        # and the expected on above) and dropping duplicate rows leaves only
        # the rows that are unique between the two frames. This allows a quick
        # check of the DataFrame to see if it is empty - if so, all rows are
        # duplicates, and they are equal.
        frames = [df, player.dataframe]
        df1 = pd.concat(frames).drop_duplicates(keep=False)
예제 #10
0
    def test_missing_weight_returns_none(self, *args, **kwargs):
        mock_weight = PropertyMock(return_value=None)
        player = Player(None)
        type(player)._weight = mock_weight

        assert not player.weight