Add Draw.successful()

It can decide if the given draw was successful:

* The word is accepted
* Work was submitted for the word
* The work was submitted on time
此提交包含在:
Gergely Polonkai
2015-11-27 14:58:16 +01:00
父節點 51035af3d0
當前提交 e71eb45260
共有 3 個檔案被更改,包括 71 行新增0 行删除

查看文件

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('words', '0003_draw_word_related'),
]
operations = [
migrations.AddField(
model_name='work',
name='upload_time',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

查看文件

@@ -2,6 +2,7 @@ from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from django.utils.dateparse import parse_duration
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import get_language from django.utils.translation import get_language
@@ -57,9 +58,31 @@ class Draw(models.Model):
accepted = models.NullBooleanField() accepted = models.NullBooleanField()
timestamp = models.DateTimeField(default=timezone.now) timestamp = models.DateTimeField(default=timezone.now)
def successful(self):
max_duration = parse_duration(settings.DRAW_TIME)
try:
work = self.work
except Work.DoesNotExist:
work = None
if work is None:
elapsed_time = timezone.now() - self.timestamp
if elapsed_time >= max_duration:
return False
return None
if self.work.upload_time - self.timestamp > max_duration:
return False
return True
class Meta: class Meta:
ordering = ('timestamp',) ordering = ('timestamp',)
class Work(models.Model): class Work(models.Model):
draw = models.OneToOneField(Draw, related_name='work', primary_key=True) draw = models.OneToOneField(Draw, related_name='work', primary_key=True)
language = models.CharField(max_length=5, db_index=True) language = models.CharField(max_length=5, db_index=True)
upload_time = models.DateTimeField(default=timezone.now)

查看文件

@@ -167,3 +167,31 @@ class DrawTest(TestCase):
Word.objects.create() Word.objects.create()
self.assertEquals(self.word, self.user.draw_word()) self.assertEquals(self.word, self.user.draw_word())
@override_settings(DRAW_TIME='1 00:00:00')
def test_draw_successful(self):
# If there is no work, but we are within the time range
draw = Draw.objects.create(
user=self.user,
word=Word.objects.create(),
accepted=True,
timestamp=timezone.now())
self.assertIsNone(draw.successful())
# If there is no work and we are out of time
draw.timestamp -= timedelta(days=2)
draw.save()
self.assertIsNotNone(draw.successful())
self.assertFalse(draw.successful())
# If there is work and it was submitted on time
draw.timestamp = timezone.now() + timedelta(minutes=1)
draw.save()
Work.objects.create(draw=draw)
self.assertTrue(draw.successful())
# If there is work and it wasn’t submitted on time
draw.timestamp = timezone.now() - timedelta(days=2)
draw.save()
self.assertIsNotNone(draw.successful())
self.assertFalse(draw.successful())