TitleReign w/ tests passing
This commit is contained in:
parent
e8c399d6a0
commit
ea42891892
File diff suppressed because one or more lines are too long
@ -1,6 +1,8 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
Q = models.Q
|
||||||
|
|
||||||
# these things are independent of the game
|
# these things are independent of the game
|
||||||
|
|
||||||
OUTCOMES = (('no contest', 'no contest'),
|
OUTCOMES = (('no contest', 'no contest'),
|
||||||
@ -25,25 +27,43 @@ class Star(models.Model):
|
|||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
photo_url = models.URLField()
|
photo_url = models.URLField()
|
||||||
division = models.CharField(max_length=100)
|
division = models.CharField(max_length=100)
|
||||||
title = models.CharField(max_length=20, choices=TITLES, null=True)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def active(self):
|
def active(self):
|
||||||
return self.division != 'other'
|
return self.division != 'other'
|
||||||
|
|
||||||
def win_title(self, title, tag_partner=None):
|
def win_title(self, title, date, tag_partner=None):
|
||||||
Star.objects.filter(title=title).update(title=None)
|
# end current title reigns
|
||||||
self.title = title
|
TitleReign.objects.filter(title=title).update(end_date=date)
|
||||||
self.save()
|
self.reigns.create(title=title, begin_date=date)
|
||||||
if tag_partner:
|
if tag_partner:
|
||||||
if title != 'tag':
|
if title != 'tag':
|
||||||
raise ValueError("can't have tag partner w/ non-tag belt")
|
raise ValueError("can't have tag partner w/ non-tag belt")
|
||||||
tag_partner.title = title
|
tag_partner.reigns.create(title=title, begin_date=date)
|
||||||
tag_partner.save()
|
|
||||||
|
def has_title(self, date=None):
|
||||||
|
if date:
|
||||||
|
current_title = list(self.reigns.filter(Q(begin_date__lt=date) &
|
||||||
|
(Q(end_date__gte=date) | Q(end_date__isnull=True))))
|
||||||
|
else:
|
||||||
|
current_title = list(self.reigns.filter(end_date__isnull=True))
|
||||||
|
if len(current_title) < 1:
|
||||||
|
return None
|
||||||
|
elif len(current_title) == 1:
|
||||||
|
return current_title[0].title
|
||||||
|
else:
|
||||||
|
return 'multiple' # FIXME
|
||||||
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
class TitleReign(models.Model):
|
||||||
|
star = models.ForeignKey(Star, related_name='reigns')
|
||||||
|
title = models.CharField(max_length=20, choices=TITLES)
|
||||||
|
begin_date = models.DateField()
|
||||||
|
end_date = models.DateField(null=True)
|
||||||
|
|
||||||
|
|
||||||
class Event(models.Model):
|
class Event(models.Model):
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
@ -91,9 +111,9 @@ class Event(models.Model):
|
|||||||
member = Star.objects.get(pk=member)
|
member = Star.objects.get(pk=member)
|
||||||
except Star.DoesNotExist:
|
except Star.DoesNotExist:
|
||||||
raise ValueError('invalid star pk {0}'.format(member))
|
raise ValueError('invalid star pk {0}'.format(member))
|
||||||
if not mt.title and member.title:
|
if not mt.title and member.has_title(self.date):
|
||||||
# multiple titles?
|
# multiple titles?
|
||||||
mt.title = member.title
|
mt.title = member.has_title(self.date)
|
||||||
mt.save()
|
mt.save()
|
||||||
mt.members.add(member)
|
mt.members.add(member)
|
||||||
if winner:
|
if winner:
|
||||||
@ -135,9 +155,10 @@ class Match(models.Model):
|
|||||||
if self.title_at_stake:
|
if self.title_at_stake:
|
||||||
victors = list(self.teams.get(victorious=True).members.all())
|
victors = list(self.teams.get(victorious=True).members.all())
|
||||||
if len(victors) == 1:
|
if len(victors) == 1:
|
||||||
victors[0].win_title(self.title_at_stake)
|
victors[0].win_title(self.title_at_stake, self.event.date)
|
||||||
elif len(victors) == 2 and self.title_at_stake == 'tag':
|
elif len(victors) == 2 and self.title_at_stake == 'tag':
|
||||||
victors[0].win_title(self.title_at_stake, victors[1])
|
victors[0].win_title(self.title_at_stake, self.event.date,
|
||||||
|
victors[1])
|
||||||
else:
|
else:
|
||||||
raise ValueError('invalid number of victors for title change')
|
raise ValueError('invalid number of victors for title change')
|
||||||
|
|
||||||
|
@ -4,34 +4,53 @@ from django.contrib.auth.models import User
|
|||||||
from .models import Event, League, Team, TeamPoints, Star
|
from .models import Event, League, Team, TeamPoints, Star
|
||||||
|
|
||||||
|
|
||||||
def _give_belt(star, belt):
|
def _give_belt(star, belt, date=datetime.date(2000,1,1)):
|
||||||
Star.objects.get(pk=star).win_title(belt)
|
Star.objects.get(pk=star).win_title(belt, date)
|
||||||
|
|
||||||
|
|
||||||
class StarTest(TestCase):
|
class StarTest(TestCase):
|
||||||
def test_win_title(self):
|
def test_win_title(self):
|
||||||
Star.objects.create(pk='cmpunk', name='CM Punk', title='wwe')
|
punk = Star.objects.create(pk='cmpunk', name='CM Punk')
|
||||||
|
punk.win_title('wwe', datetime.date(2011,1,1))
|
||||||
dbry = Star.objects.create(pk='danielbryan', name='Daniel Bryan')
|
dbry = Star.objects.create(pk='danielbryan', name='Daniel Bryan')
|
||||||
Star.objects.create(pk='kofi', name='Kofi Kingston',
|
kofi = Star.objects.create(pk='kofi', name='Kofi Kingston')
|
||||||
title='tag')
|
rtruth = Star.objects.create(pk='rtruth', name='R Truth')
|
||||||
Star.objects.create(pk='rtruth', name='R Truth', title='tag')
|
kofi.win_title('tag', datetime.date(2011,1,1), tag_partner=rtruth)
|
||||||
swagger = Star.objects.create(pk='swagger', name='Jack Swagger')
|
swagger = Star.objects.create(pk='swagger', name='Jack Swagger')
|
||||||
ziggler = Star.objects.create(pk='ziggler', name='Dolph Ziggler')
|
ziggler = Star.objects.create(pk='ziggler', name='Dolph Ziggler')
|
||||||
|
|
||||||
# belt win takes it away from original holder
|
# belt win takes it away from original holder
|
||||||
self.assertEqual(Star.objects.get(pk='cmpunk').title, 'wwe')
|
self.assertEqual(Star.objects.get(pk='cmpunk').has_title(), 'wwe')
|
||||||
dbry.win_title('wwe')
|
dbry.win_title('wwe', datetime.date(2012,1,1))
|
||||||
self.assertEqual(Star.objects.get(pk='cmpunk').title, None)
|
self.assertEqual(Star.objects.get(pk='cmpunk').has_title(), None)
|
||||||
self.assertEqual(Star.objects.get(pk='danielbryan').title, 'wwe')
|
self.assertEqual(Star.objects.get(pk='danielbryan').has_title(), 'wwe')
|
||||||
|
|
||||||
# tag belt win
|
# tag belt win
|
||||||
self.assertEqual(Star.objects.get(pk='kofi').title, 'tag')
|
self.assertEqual(Star.objects.get(pk='kofi').has_title(), 'tag')
|
||||||
self.assertEqual(Star.objects.get(pk='rtruth').title, 'tag')
|
self.assertEqual(Star.objects.get(pk='rtruth').has_title(), 'tag')
|
||||||
ziggler.win_title('tag', tag_partner=swagger)
|
ziggler.win_title('tag', datetime.date(2012,1,1), tag_partner=swagger)
|
||||||
self.assertEqual(Star.objects.get(pk='kofi').title, None)
|
self.assertEqual(Star.objects.get(pk='kofi').has_title(), None)
|
||||||
self.assertEqual(Star.objects.get(pk='rtruth').title, None)
|
self.assertEqual(Star.objects.get(pk='rtruth').has_title(), None)
|
||||||
self.assertEqual(Star.objects.get(pk='ziggler').title, 'tag')
|
self.assertEqual(Star.objects.get(pk='ziggler').has_title(), 'tag')
|
||||||
self.assertEqual(Star.objects.get(pk='swagger').title, 'tag')
|
self.assertEqual(Star.objects.get(pk='swagger').has_title(), 'tag')
|
||||||
|
|
||||||
|
def test_has_title(self):
|
||||||
|
punk = Star.objects.create(pk='cmpunk', name='CM Punk')
|
||||||
|
punk.reigns.create(title='wwe', begin_date='2011-01-01', end_date='2012-01-01')
|
||||||
|
|
||||||
|
# don't have title on day it is won (FIXME?)
|
||||||
|
self.assertEqual(punk.has_title('2011-01-01'), None)
|
||||||
|
self.assertEqual(punk.has_title('2011-01-02'), 'wwe') # have it day after
|
||||||
|
self.assertEqual(punk.has_title('2012-01-01'), 'wwe') # have it on last day
|
||||||
|
self.assertEqual(punk.has_title('2012-01-02'), None) # don't have it day after
|
||||||
|
|
||||||
|
punk.reigns.create(title='wwe', begin_date='2012-07-01')
|
||||||
|
|
||||||
|
# null date, means currently has title
|
||||||
|
self.assertEqual(punk.has_title(), 'wwe')
|
||||||
|
self.assertEqual(punk.has_title('2012-08-01'), 'wwe')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EventTest(TestCase):
|
class EventTest(TestCase):
|
||||||
maxDiff = None
|
maxDiff = None
|
||||||
@ -140,15 +159,15 @@ class MatchTest(TestCase):
|
|||||||
match = self.event.add_match('cmpunk', 'reymysterio', winner='cmpunk',
|
match = self.event.add_match('cmpunk', 'reymysterio', winner='cmpunk',
|
||||||
outcome='normal', title_at_stake='wwe')
|
outcome='normal', title_at_stake='wwe')
|
||||||
match.do_title_change()
|
match.do_title_change()
|
||||||
self.assertEqual(Star.objects.get(pk='cmpunk').title, 'wwe')
|
self.assertEqual(Star.objects.get(pk='cmpunk').has_title(), 'wwe')
|
||||||
|
|
||||||
# title to mysterio
|
# title to mysterio
|
||||||
match = self.event.add_match('cmpunk', 'reymysterio',
|
match = self.event.add_match('cmpunk', 'reymysterio',
|
||||||
winner='reymysterio', outcome='normal',
|
winner='reymysterio', outcome='normal',
|
||||||
title_at_stake='wwe')
|
title_at_stake='wwe')
|
||||||
match.do_title_change()
|
match.do_title_change()
|
||||||
self.assertEqual(Star.objects.get(pk='reymysterio').title, 'wwe')
|
self.assertEqual(Star.objects.get(pk='reymysterio').has_title(), 'wwe')
|
||||||
self.assertEqual(Star.objects.get(pk='cmpunk').title, None)
|
self.assertEqual(Star.objects.get(pk='cmpunk').has_title(), None)
|
||||||
|
|
||||||
# tag title
|
# tag title
|
||||||
match = self.event.add_match(['kofikingston', 'rtruth'],
|
match = self.event.add_match(['kofikingston', 'rtruth'],
|
||||||
@ -156,10 +175,11 @@ class MatchTest(TestCase):
|
|||||||
winner='dolphziggler', outcome='normal',
|
winner='dolphziggler', outcome='normal',
|
||||||
title_at_stake='tag')
|
title_at_stake='tag')
|
||||||
match.do_title_change()
|
match.do_title_change()
|
||||||
self.assertEqual(Star.objects.get(pk='kofikingston').title, None)
|
self.assertEqual(Star.objects.get(pk='kofikingston').has_title(), None)
|
||||||
self.assertEqual(Star.objects.get(pk='rtruth').title, None)
|
self.assertEqual(Star.objects.get(pk='rtruth').has_title(), None)
|
||||||
self.assertEqual(Star.objects.get(pk='dolphziggler').title, 'tag')
|
self.assertEqual(Star.objects.get(pk='dolphziggler').has_title(),
|
||||||
self.assertEqual(Star.objects.get(pk='jackswagger').title, 'tag')
|
'tag')
|
||||||
|
self.assertEqual(Star.objects.get(pk='jackswagger').has_title(), 'tag')
|
||||||
|
|
||||||
match = self.event.add_match(['kofikingston', 'rtruth'],
|
match = self.event.add_match(['kofikingston', 'rtruth'],
|
||||||
['jackswagger', 'dolphziggler'],
|
['jackswagger', 'dolphziggler'],
|
||||||
|
Loading…
Reference in New Issue
Block a user