Merge pull request #33 from Without-Proper-Instructions/feature-hint

Add hint model to fix #32.
This commit is contained in:
Ian Adam Naval 2016-12-15 13:37:09 -05:00 committed by GitHub
commit d269ef3dea
3 changed files with 56 additions and 1 deletions

View File

@ -1,5 +1,5 @@
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
@ -7,7 +7,11 @@ class ChallengeAdmin(admin.ModelAdmin):
fields = ['name', 'points', 'category', 'flag', 'description_markdown']
form = ChallengeAdminForm
class HintAdmin(admin.ModelAdmin):
fields = ['challenge', 'content_markdown', 'publish_date']
admin.site.register(Challenge, ChallengeAdmin)
admin.site.register(Hint, HintAdmin)
admin.site.register(Team)
admin.site.register(Player)
admin.site.register(Solution)

View File

@ -85,6 +85,7 @@ class Player(User):
def has_gravatar(self):
return has_gravatar(self.email)
class Solution(models.Model):
"""A solution is a record of a player's successful attempt of a challenge."""
challenge = models.ForeignKey("Challenge")
@ -108,3 +109,21 @@ class JoinRequest(models.Model):
def cancel(self):
self.delete()
class Hint(models.Model):
"""
A hint is a bit of content that provides additional information about a
challenge.
"""
challenge = models.ForeignKey("Challenge")
created_date = models.DateTimeField(auto_now_add=True)
publish_date = models.DateTimeField(auto_now_add=True, editable=True)
content_markdown = models.TextField()
content_html = models.TextField()
def save(self, *args, **kwargs):
self.content_html = markdown.markdown(self.content_markdown)
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>")