Skip to content
This repository has been archived by the owner on Apr 10, 2019. It is now read-only.

Add a basic view for winning submissions. #41

Merged
merged 2 commits into from Mar 16, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 15 additions & 3 deletions apps/challenges/tests/test_views.py
Expand Up @@ -6,6 +6,7 @@
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.messages import SUCCESS
from django.core.urlresolvers import reverse
from django.db.models import Max
from django.http import Http404
from django.test.client import Client
Expand All @@ -18,7 +19,7 @@
from challenges.models import Challenge, Submission, Phase, Category, ExternalLink
from challenges.tests.fixtures import (challenge_setup, challenge_teardown,
create_users, create_submissions)
from ignite.tests.decorators import ignite_skip
from ignite.tests.decorators import ignite_skip, ignite_only
from projects.models import Project


Expand Down Expand Up @@ -83,7 +84,6 @@ def test_challenge_entries(self):
assert_equal([s.title for s in response.context['entries'].object_list],
list(reversed(submission_titles)))

# @ignite_skip
@suppress_locale_middleware
def test_entries_view(self):
"""Test the dedicated entries view.
Expand All @@ -99,7 +99,6 @@ def test_entries_view(self):
assert_equal([s.title for s in response.context['entries'].object_list],
list(reversed(submission_titles)))

# @ignite_skip
@suppress_locale_middleware
def test_hidden_entries(self):
"""Test that draft entries are not visible on the entries page."""
Expand All @@ -113,6 +112,19 @@ def test_hidden_entries(self):
# Check the draft submission is hidden
assert_equal(set(response.context['entries'].object_list),
set(submissions[1:]))

@ignite_only
def test_winning_entries(self):
"""Test the winning entries view."""
create_submissions(5)
winners = Submission.objects.all()[1:3]
for entry in winners:
entry.is_winner = True
entry.save()

response = self.client.get(reverse('entries_winning'))
self.assertEqual(set(e.title for e in response.context['entries']),
set(e.title for e in winners))


# Add this dictionary to a form for no external links
Expand Down
24 changes: 24 additions & 0 deletions apps/challenges/views.py
Expand Up @@ -97,6 +97,30 @@ def entries_all(request, project, slug):
return show(request, project, slug, template_name='challenges/all.html')


class WinningEntriesView(ListView, JingoTemplateMixin):
"""Show entries that have been marked as winners."""

template_name = 'challenges/winning.html'
context_object_name = 'entries'

def get_context_data(self, **kwargs):
context = super(WinningEntriesView, self).get_context_data(**kwargs)
context.update(project=self.project, challenge=self.challenge)
return context

def get_queryset(self):
self.project = get_object_or_404(Project, slug=self.kwargs['project'])
self.challenge = get_object_or_404(self.project.challenge_set,
slug=self.kwargs['slug'])
submissions = (Submission.objects.visible(self.request.user)
.filter(phase__challenge=self.challenge)
.filter(is_winner=True))
return submissions


entries_winning = WinningEntriesView.as_view()


class AssignedEntriesView(ListView, JingoTemplateMixin):
"""Show entries assigned to be judged by the current user."""

Expand Down
34 changes: 34 additions & 0 deletions templates_ignite/challenges/winning.html
@@ -0,0 +1,34 @@
{% extends "base.html" %}
{% from "challenges/helpers.html" import created_by with context %}

{% block page_title %}{{ _('Winning submissions') }} | {% endblock %}

{% block page_id %}winning_submissions{% endblock %}

{% block section_class %}entries{% endblock %}

{% block header %}
<h1 class="shout">Winners</h1>
{% endblock %}

{% block content %}
<ol class="submissions columns">
{% for entry in entries %}
<li class="box col">
<article>
<a href="{{ entry.get_absolute_url() }}">
<h4>
<div class="frame box">
<img src="{{ entry.get_image_src() }}" alt="">
</div>
{{ entry.title }}
</h4>
</a>
<p>{{ entry.brief_description }}</p>
<address>{{ created_by(entry, footer=False) }}</address>
</article>
</li>
{% endfor %}
</ol>
</section>
{% endblock %}
1 change: 1 addition & 0 deletions urls_ignite.py
Expand Up @@ -28,6 +28,7 @@
(r'', include('users.urls')),
# The /ideas/ URL will become available in the application phase
url(r'^ideas/assigned/$', 'challenges.views.entries_assigned', kwargs=_ignite_kwargs, name='entries_assigned'),
url(r'^ideas/winning/$', 'challenges.views.entries_winning', kwargs=_ignite_kwargs, name='entries_winning'),
url(r'^ideas/judged/$', 'challenges.views.entries_judged', kwargs=_ignite_kwargs, name='entries_judged'),
url(r'^ideas/list/(?P<category>[\w-]+)/$', 'challenges.views.entries_category', kwargs=_ignite_kwargs, name='entries_for_category'),
url(r'^ideas/list/$', 'challenges.views.entries_all', kwargs=_ignite_kwargs, name='entries_all'),
Expand Down