Add word drawing support
This commit is contained in:
parent
955cace9bd
commit
0c16d9a73b
@ -24,8 +24,31 @@ def _current_word(self):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _draw_word(self):
|
||||||
|
if self.current_word() is not None:
|
||||||
|
return self.current_word()
|
||||||
|
|
||||||
|
from .models import Word, Draw
|
||||||
|
|
||||||
|
# Find all words
|
||||||
|
# Exclude all words that has an accepted draw for this user
|
||||||
|
# Choose a random one
|
||||||
|
# If there are no more words, return None
|
||||||
|
word = Word.objects \
|
||||||
|
.exclude(draws__accepted=True, draws__user=self) \
|
||||||
|
.order_by('?') \
|
||||||
|
.first()
|
||||||
|
|
||||||
|
if word is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
Draw.objects.create(user=self, word=word, accepted=None)
|
||||||
|
|
||||||
|
return word
|
||||||
|
|
||||||
class WordsConfig(AppConfig):
|
class WordsConfig(AppConfig):
|
||||||
name = 'words'
|
name = 'words'
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
User.current_word = _current_word
|
User.current_word = _current_word
|
||||||
|
User.draw_word = _draw_word
|
||||||
|
19
words/migrations/0003_draw_word_related.py
Normal file
19
words/migrations/0003_draw_word_related.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('words', '0002_draw_work'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='draw',
|
||||||
|
name='word',
|
||||||
|
field=models.ForeignKey(related_name='draws', to='words.Word'),
|
||||||
|
),
|
||||||
|
]
|
@ -50,7 +50,7 @@ class WordTranslation(models.Model):
|
|||||||
|
|
||||||
class Draw(models.Model):
|
class Draw(models.Model):
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User)
|
||||||
word = models.ForeignKey(Word)
|
word = models.ForeignKey(Word, related_name='draws')
|
||||||
accepted = models.NullBooleanField()
|
accepted = models.NullBooleanField()
|
||||||
timestamp = models.DateTimeField(default=timezone.now)
|
timestamp = models.DateTimeField(default=timezone.now)
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ from django.core.exceptions import ValidationError
|
|||||||
from django.utils.translation import activate
|
from django.utils.translation import activate
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from .models import Word, WordTranslation, Draw
|
from .models import Word, WordTranslation, Draw, Work
|
||||||
|
|
||||||
class WordTest(TestCase):
|
class WordTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -71,3 +71,25 @@ class DrawTest(TestCase):
|
|||||||
draw.accepted = True
|
draw.accepted = True
|
||||||
draw.save()
|
draw.save()
|
||||||
self.assertEquals(self.word, self.user.current_word())
|
self.assertEquals(self.word, self.user.current_word())
|
||||||
|
|
||||||
|
def test_draw_word(self):
|
||||||
|
draw = Draw.objects.create(user=self.user,
|
||||||
|
word=self.word,
|
||||||
|
accepted=None)
|
||||||
|
self.assertEquals(self.word, self.user.draw_word())
|
||||||
|
draw.accepted = True
|
||||||
|
draw.save()
|
||||||
|
Work.objects.create(draw=draw)
|
||||||
|
|
||||||
|
word2 = Word.objects.create()
|
||||||
|
self.assertEquals(word2, self.user.draw_word())
|
||||||
|
|
||||||
|
draw = Draw.objects.get(user=self.user, word=word2)
|
||||||
|
self.assertIsNotNone(draw)
|
||||||
|
self.assertIsNone(draw.accepted)
|
||||||
|
|
||||||
|
draw.accepted = True
|
||||||
|
draw.save()
|
||||||
|
Work.objects.create(draw=draw)
|
||||||
|
|
||||||
|
self.assertIsNone(self.user.draw_word())
|
||||||
|
Loading…
Reference in New Issue
Block a user