Skip to content

Commit

Permalink
Started to clean up views and added a test for the submit FAQ view.
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobian committed May 9, 2011
1 parent 65ea9f9 commit 556f807
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 84 deletions.
1 change: 1 addition & 0 deletions faq/_testrunner.py
Expand Up @@ -10,6 +10,7 @@
'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory;'}
},
INSTALLED_APPS = ['django.contrib.auth', 'django.contrib.contenttypes', 'faq'],
ROOT_URLCONF = 'faq.urls',
)

def runtests():
Expand Down
8 changes: 0 additions & 8 deletions faq/tests.py

This file was deleted.

3 changes: 3 additions & 0 deletions faq/tests/__init__.py
@@ -0,0 +1,3 @@
from __future__ import absolute_import

from .test_views import *
1 change: 1 addition & 0 deletions faq/tests/templates/404.html
@@ -0,0 +1 @@
404
Empty file added faq/tests/templates/500.html
Empty file.
32 changes: 32 additions & 0 deletions faq/tests/test_views.py
@@ -0,0 +1,32 @@
from __future__ import absolute_import

import os
import django.test
from django.conf import settings
from ..models import Topic, Question

class FAQViewTests(django.test.TestCase):
urls = 'faq.urls'

def setUp(self):
self.topic = Topic.objects.create(name='T', slug='t')

# Make some test templates available.
self._oldtd = settings.TEMPLATE_DIRS
settings.TEMPLATE_DIRS = [os.path.join(os.path.dirname(__file__), 'templates')]

def tearDown(self):
settings.TEMPLATE_DIRS = self._oldtd

def test_submit_faq_view(self):
data = {
'topic': str(self.topic.pk),
'question': 'What is your favorite color?',
'answer': 'Blue. I mean red. I mean *AAAAHHHHH....*',
}
response = self.client.post('/submit/', data)
# self.assertRedirects(response, "/what-is-your-favorite-color/")
self.assert_(
Question.objects.filter(text=data['question']).exists(),
"Expected question object wasn't created."
)
30 changes: 14 additions & 16 deletions faq/urls.py
@@ -1,21 +1,19 @@
from django.conf.urls.defaults import *
from django.contrib import admin
from faq.views import faq_list_by_group, submit_faq
from __future__ import absolute_import

admin.autodiscover()
from django.conf.urls.defaults import *
from . import views as faq_views

urlpatterns = patterns('',

url (
r'^$',
faq_list_by_group,
name = 'faq',
url(regex = r'^$',
view = faq_views.question_list,
name = 'faq_question_list',
),
url (
r'^submit_faq/$',
submit_faq,
{'success_url': '/faq/'},
name = 'submit',
url(regex = r'^submit/$',
view = faq_views.submit_faq,
name = 'faq_submit',
),
)

url(regex = r'^(?P<slug>[\w-]+)/$',
view = faq_views.question_detail,
name = 'faq_question_detail',
),
)
93 changes: 33 additions & 60 deletions faq/views.py
@@ -1,18 +1,19 @@
import datetime
from django.views.generic.list_detail import object_detail, object_list
from django.shortcuts import render_to_response
from __future__ import absolute_import
from django.contrib import messages
from django.http import Http404
from django.http import HttpResponseRedirect
from django.shortcuts import redirect, render
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import Http404
from models import Question
from forms import SubmitFAQForm
from django.utils.translation import ugettext as _
from django.views.generic.list_detail import object_detail, object_list
from .models import Question
from .forms import SubmitFAQForm

def question_detail(request, slug, template_name='faq/question_detail.html', extra_context={}):
"""
Displays an individual question.
"""

return object_detail(
request,
template_name = template_name,
Expand All @@ -22,18 +23,11 @@ def question_detail(request, slug, template_name='faq/question_detail.html', ext
queryset = Question.objects.active(user=request.user),
)

def question_list( request, template_name='faq/question_list.html',
extra_context={}, group=False):
def question_list(request, template_name='faq/question_list.html',
extra_context={}, group=False):
'''
Displays a list of all the questions.
'''

# NOTE:
# The code shown here is NOT REALLY NEEDED, but it is a good example
# of extending an app using extra_content and such.
# Specifically note how we set the dict value and then allow the user
# to pass along their own additional extra_context using 'update'.

query_set = Question.objects.active(group=group,user=request.user)

if len(query_set) == 0:
Expand All @@ -51,47 +45,26 @@ def question_list( request, template_name='faq/question_list.html',
queryset = query_set
)

def faq_list( request, template_name='faq/faq_list.html', extra_context={} ):
'''
Display a typical FAQ view without group headers.
Shows how to "extend" or "override" the default view supplied above.
We also make sure this view is also overridable.
'''

extra = { 'page_title': 'FAQs' }
extra.update( extra_context )

return question_list( request, template_name=template_name, extra_context=extra )

def faq_list_by_group( request,
template_name='faq/faq_list_by_group.html',
extra_context={} ):

extra = { 'page_title': 'Grouped FAQs' }
extra.update( extra_context )

return question_list( request, group=True,
template_name=template_name, extra_context=extra)
def submit_faq(request, form_class=SubmitFAQForm,
template_name="faq/submit_question.html",
success_url=None, extra_context={}):
form = form_class(request.POST or NOne)
if form.is_valid():
question = form.save()
if request.user.is_authenticated():
slug = question.slug
question.slug = slug.replace("anon",request.user.username)
question.created_by = request.user

# Set up a confirmation message for the user
messages.success(request,
_("Your question was submitted and will be reviewed by for inclusion in the FAQ."),
fail_silently=True,
)

question.save()
return redirect(success_url if success_url else "faq_question_list")

def submit_faq( request, form_class=SubmitFAQForm,
template_name="faq/submit_question.html",
success_url="/", extra_context={} ):
if request.method == 'POST':
form = form_class(data=request.POST)
if form.is_valid():
question = form.save()
if request.user.is_authenticated():
slug = question.slug
question.slug = slug.replace("anon",request.user.username)
question.created_by = request.user
# Now set up a confirmation message for the user
request.user.message_set.create(
message="Your question was submitted and will be reviewed by the site administrator for possible inclusion in the FAQ." )
question.save()
return HttpResponseRedirect(success_url)
else:
form = form_class()
context = { 'form': form }
context.update( extra_context )
return render_to_response( template_name, context,
context_instance = RequestContext( request ))
context = {'form': form}
context.update(extra_context)
return render(request, template_name, context)

0 comments on commit 556f807

Please sign in to comment.