Skip to content

Commit

Permalink
feat(team): add manager to Player
Browse files Browse the repository at this point in the history
  • Loading branch information
iarp committed Mar 14, 2022
1 parent a9be914 commit 256787d
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 1 deletion.
15 changes: 14 additions & 1 deletion team/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def convenors(self):
)

def coaches(self):
return self.filter(type__name="Coach")

# if isinstance(self.instance, Season):
# return qs.exclude(
# Q(league_id__isnull=True)
Expand All @@ -103,6 +103,7 @@ def coaches(self):
# raise TypeError(
# gettext("coaches is available on the Season, League, Division, or SubDivision instance.")
# )
return self.filter(type__name="Coach")

def managers(self):
if self.instance.__class__.__name__ == "Team":
Expand All @@ -115,3 +116,15 @@ def emails(self):
return self.filter(user__email__contains="@").values_list(
"user__email", flat=True
)


class PlayerObjectsManager(models.Manager):
def primary(self):
return self.exclude(affiliate=True)

def affiliates(self):
return self.filter(affiliate=True)


class PlayerManagerCustomQuerySet(models.QuerySet):
pass
4 changes: 4 additions & 0 deletions team/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,10 @@ class Meta:
)
]

objects = managers.PlayerObjectsManager.from_queryset(
managers.PlayerManagerCustomQuerySet
)()

# Value is stored in member, do not remove this
hockey_canada_id = None
old_playerseasonid = models.IntegerField(default=0, blank=True)
Expand Down
74 changes: 74 additions & 0 deletions team/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,80 @@ def test_can_create_using_only_team_object(self):
)
self.assertEqual(str(player.member), str(player))

def test_players_counts_on_parent_object(self):
member = Member.objects.first()
status = PlayerStatus.objects.filter(reasons__default=True).first()
pos = PlayerPosition.objects.first()
ptype = PlayerType.objects.first()

team = Team.objects.first()

self.assertEqual(0, team.season.players.count())
self.assertEqual(0, team.league.players.count())
self.assertEqual(0, team.division.players.count())
self.assertEqual(0, team.subdivision.players.count())
self.assertEqual(0, team.players.count())

Player.objects.create(
team=team,
member=member,
status=status,
position=pos,
type=ptype,
)
self.assertEqual(1, team.season.players.count())
self.assertEqual(1, team.league.players.count())
self.assertEqual(1, team.division.players.count())
self.assertEqual(1, team.subdivision.players.count())
self.assertEqual(1, team.players.count())
self.assertEqual(0, team.players.affiliates().count())
self.assertEqual(1, team.players.primary().count())

def test_player_can_be_on_team_once(self):
member = Member.objects.first()
status = PlayerStatus.objects.filter(reasons__default=True).first()
pos = PlayerPosition.objects.first()
ptype = PlayerType.objects.first()

team = Team.objects.first()

Player.objects.create(
team=team,
member=member,
status=status,
position=pos,
type=ptype,
)
self.assertRaises(
IntegrityError,
Player.objects.create,
team=team,
member=member,
status=status,
position=pos,
type=ptype,
)

def test_player_marked_as_affiliate_returns_in_team_players_affiliates_count(self):
member = Member.objects.first()
status = PlayerStatus.objects.filter(reasons__default=True).first()
pos = PlayerPosition.objects.first()
ptype = PlayerType.objects.first()

team = Team.objects.first()

Player.objects.create(
team=team,
member=member,
status=status,
position=pos,
type=ptype,
affiliate=True,
)
self.assertEqual(1, team.players.count())
self.assertEqual(1, team.players.affiliates().count())
self.assertEqual(0, team.players.primary().count())

def test_adding_player_with_flag_changing_status_causes_team_player_changed_flag_setting_to_true(
self,
):
Expand Down

0 comments on commit 256787d

Please sign in to comment.