Adds admin and tests for Hint model.

This commit is contained in:
Louis Fogel 2014-11-04 13:01:06 -05:00
parent 63eee10236
commit 8a0c539143
3 changed files with 41 additions and 5 deletions

View File

@ -1,5 +1,5 @@
from django.contrib import admin from django.contrib import admin
from core.models import Challenge, Team, Player, Solution from core.models import Challenge, Hint, Team, Player, Solution
from core.forms import ChallengeAdminForm from core.forms import ChallengeAdminForm
@ -7,7 +7,11 @@ class ChallengeAdmin(admin.ModelAdmin):
fields = ['name', 'points', 'category', 'flag', 'description_markdown'] fields = ['name', 'points', 'category', 'flag', 'description_markdown']
form = ChallengeAdminForm form = ChallengeAdminForm
class HintAdmin(admin.ModelAdmin):
fields = ['challenge', 'content_markdown', 'publish_date']
admin.site.register(Challenge, ChallengeAdmin) admin.site.register(Challenge, ChallengeAdmin)
admin.site.register(Hint, HintAdmin)
admin.site.register(Team) admin.site.register(Team)
admin.site.register(Player) admin.site.register(Player)
admin.site.register(Solution) admin.site.register(Solution)

View File

@ -85,6 +85,7 @@ class Player(User):
def has_gravatar(self): def has_gravatar(self):
return has_gravatar(self.email) return has_gravatar(self.email)
class Solution(models.Model): class Solution(models.Model):
"""A solution is a record of a player's successful attempt of a challenge.""" """A solution is a record of a player's successful attempt of a challenge."""
challenge = models.ForeignKey("Challenge") challenge = models.ForeignKey("Challenge")
@ -116,14 +117,13 @@ class Hint(models.Model):
""" """
challenge = models.ForeignKey("Challenge") challenge = models.ForeignKey("Challenge")
created_date = models.DateTimeField(auto_now_add=True) created_date = models.DateTimeField(auto_now_add=True)
publish_date = models.DateTimeField(blank=True, null=False) publish_date = models.DateTimeField(auto_now_add=True, editable=True)
content_markdown = models.TextField() content_markdown = models.TextField()
content_html = models.TextField() content_html = models.TextField()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
self.content_html = markdown.markdown(self.content_markdown) self.content_html = markdown.markdown(self.content_markdown)
if self.publish_date is None:
self.publish_date = self.created_date
super(Hint, self).save(*args, **kwargs) super(Hint, self).save(*args, **kwargs)
def __str__(self):
return "{challenge} ({date})".format(challenge=self.challenge, date=self.publish_date)

View File

@ -0,0 +1,32 @@
import pytest
from core.models import Challenge, Hint
@pytest.fixture
def challenge():
c = Challenge(name="Get Crunk", category='be', points=100)
c.save()
return c
@pytest.mark.django_db
def test_auto_populate_publish_date(challenge):
hint = Hint(challenge=challenge, content_markdown='')
hint.save()
assert hint.publish_date is not None
@pytest.mark.django_db
def test_markdown_compiles_on_save(challenge):
hint = Hint(challenge=challenge)
hint.content_markdown = """# Title
## Subtitle
Paragraph
Another paragraph
"""
hint.save()
assert hint.content_html == (
"<h1>Title</h1>\n<h2>Subtitle</h2>\n<p>Paragraph</p>\n<p>Another "
"paragraph</p>")