|
3 | 3 | import mock
|
4 | 4 | from copy import deepcopy
|
5 | 5 | from collections import Counter
|
| 6 | +from datetime import datetime |
6 | 7 | from pydfs_lineup_optimizer import get_optimizer
|
7 | 8 | from pydfs_lineup_optimizer.constants import Site, Sport
|
8 |
| -from pydfs_lineup_optimizer.player import Player |
| 9 | +from pydfs_lineup_optimizer.player import Player, GameInfo |
9 | 10 | from pydfs_lineup_optimizer.exceptions import LineupOptimizerException
|
10 | 11 | from pydfs_lineup_optimizer.rules import ProjectedOwnershipRule
|
| 12 | +from pydfs_lineup_optimizer.utils import list_intersection |
11 | 13 | from .utils import create_players, load_players
|
12 | 14 |
|
13 | 15 |
|
@@ -303,3 +305,42 @@ def test_stack_greater_than_max_from_one_team(self):
|
303 | 305 | stacks = [5]
|
304 | 306 | with self.assertRaises(LineupOptimizerException):
|
305 | 307 | self.optimizer.set_team_stacking(stacks)
|
| 308 | + |
| 309 | + |
| 310 | +class PositionsForOpposingTeamTestCase(unittest.TestCase): |
| 311 | + def setUp(self): |
| 312 | + first_game_info = GameInfo('HOU', 'BOS', datetime.now(), False) |
| 313 | + second_game_info = GameInfo('CHI', 'NY', datetime.now(), False) |
| 314 | + self.players = [ |
| 315 | + Player(1, '1', '1', ['SP', 'RP'], 'HOU', 3000, 15, game_info=first_game_info), |
| 316 | + Player(2, '2', '2', ['SP', 'RP'], 'BOS', 3000, 15, game_info=first_game_info), |
| 317 | + Player(3, '3', '3', ['C'], 'HOU', 3000, 15, game_info=first_game_info), |
| 318 | + Player(4, '4', '4', ['1B'], 'BOS', 3000, 15, game_info=first_game_info), |
| 319 | + Player(5, '5', '5', ['2B'], 'HOU', 3000, 15, game_info=first_game_info), |
| 320 | + Player(6, '6', '6', ['3B'], 'BOS', 3000, 15, game_info=first_game_info), |
| 321 | + Player(7, '7', '7', ['SS'], 'HOU', 3000, 15, game_info=first_game_info), |
| 322 | + Player(8, '8', '8', ['OF'], 'BOS', 3000, 15, game_info=first_game_info), |
| 323 | + Player(9, '9', '9', ['OF'], 'HOU', 3000, 15, game_info=first_game_info), |
| 324 | + Player(10, '10', '10', ['OF'], 'BOS', 3000, 15, game_info=first_game_info), |
| 325 | + Player(11, '11', '11', ['SP', 'RP'], 'CHI', 3000, 5, game_info=second_game_info), |
| 326 | + Player(12, '12', '12', ['SP', 'RP'], 'NY', 3000, 5, game_info=second_game_info), |
| 327 | + ] |
| 328 | + self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASEBALL) |
| 329 | + self.optimizer.load_players(self.players) |
| 330 | + |
| 331 | + def test_restrict_positions_for_opposing_team_correctness(self): |
| 332 | + first_team_positions = ['SP', 'RP'] |
| 333 | + second_team_positions = ['1B', '2B', '3B'] |
| 334 | + self.optimizer.restrict_positions_for_opposing_team(first_team_positions, second_team_positions) |
| 335 | + lineup = next(self.optimizer.optimize(1)) |
| 336 | + pitcher_games = {player.game_info for player in lineup |
| 337 | + if list_intersection(player.positions, first_team_positions)} |
| 338 | + hitters_games = {player.game_info for player in lineup |
| 339 | + if list_intersection(player.positions, second_team_positions)} |
| 340 | + self.assertFalse(pitcher_games.intersection(hitters_games)) |
| 341 | + |
| 342 | + def test_restrict_positions_if_game_not_specified(self): |
| 343 | + for player in self.players: |
| 344 | + player.game_info = None |
| 345 | + with self.assertRaises(LineupOptimizerException): |
| 346 | + self.optimizer.restrict_positions_for_opposing_team(['SP', 'RP'], ['1B']) |
0 commit comments