Add duck competence level method (DuckCompetence.level)

This commit is contained in:
Gergely Polonkai 2015-01-19 15:36:50 +01:00 committed by Gergely Polonkai
parent 49a20c20b0
commit 19e66de32c
2 changed files with 34 additions and 1 deletions

View File

@ -1,6 +1,9 @@
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils import timezone from django.utils import timezone
from django.conf import settings
from .ducklevel import minutes_to_level
class Species(models.Model): class Species(models.Model):
"""Model to hold the Ducks species""" """Model to hold the Ducks species"""
@ -85,6 +88,9 @@ class DuckCompetence(models.Model):
up_minutes = models.IntegerField(default = 0) up_minutes = models.IntegerField(default = 0)
down_minutes = models.IntegerField(default = 0) down_minutes = models.IntegerField(default = 0)
def level(self):
return minutes_to_level(self.up_minutes, self.down_minutes)
class Meta: class Meta:
unique_together = ('duck', 'comp') unique_together = ('duck', 'comp')

View File

@ -6,7 +6,7 @@ import datetime
from .ducklevel import level_to_up_minutes, level_to_down_minutes, minutes_to_level from .ducklevel import level_to_up_minutes, level_to_down_minutes, minutes_to_level
from .templatetags import booking_tags from .templatetags import booking_tags
from .models import Duck from .models import Duck, Competence, DuckCompetence
class FrontTest(TestCase): class FrontTest(TestCase):
def setUp(self): def setUp(self):
@ -25,6 +25,15 @@ class FrontTest(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
class DuckCompLevelTest(TestCase): class DuckCompLevelTest(TestCase):
def setUp(self):
duck = Duck()
comp = Competence(name = 'testing')
self.duckcomp = DuckCompetence(
duck = duck,
comp = comp,
up_minutes = 0,
down_minutes =0)
def test_sane_max(self): def test_sane_max(self):
self.assertGreater( self.assertGreater(
settings.MAX_DUCK_LEVEL, 0, settings.MAX_DUCK_LEVEL, 0,
@ -80,6 +89,24 @@ class DuckCompLevelTest(TestCase):
self.assertEqual(level_to_down_minutes(4), 200000) self.assertEqual(level_to_down_minutes(4), 200000)
self.assertEqual(level_to_down_minutes(5), 2000000) self.assertEqual(level_to_down_minutes(5), 2000000)
def test_no_comp(self):
self.duckcomp.up_minutes = 0
self.duckcomp.down_minutes = 0
self.assertEquals(self.duckcomp.level(), 0)
def test_comp_levels(self):
self.duckcomp.down_minutes = 0
for lvl in range(1, settings.MAX_DUCK_LEVEL):
minutes = level_to_up_minutes(lvl)
self.duckcomp.up_minutes = minutes
self.assertEqual(self.duckcomp.level(), lvl)
def test_high_minutes(self):
self.duckcomp.up_minutes = level_to_up_minutes(settings.MAX_DUCK_LEVEL)
self.duckcomp.down_minutes = level_to_down_minutes(settings.MAX_DUCK_LEVEL)
self.assertEqual(self.duckcomp.level(), settings.MAX_DUCK_LEVEL)
class DuckAgeTest(TestCase): class DuckAgeTest(TestCase):
def test_duck_is_from_the_future(self): def test_duck_is_from_the_future(self):
future_duck = Duck(donated_at = timezone.now() + datetime.timedelta(days = 2)) future_duck = Duck(donated_at = timezone.now() + datetime.timedelta(days = 2))