This repository has been archived by the owner on May 7, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
150 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<h1>{{ object.subject }}</h1> | ||
<p>Forum: <a href="{% url 'forums:show' object.forum.slug %}"></a></p> | ||
<p>{{ object.created }}</p> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<form action="" method="post"> | ||
{% csrf_token %} | ||
{{ form.as_p }} | ||
<input type="submit" value="Create Thread" /> | ||
</form> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
from django.core.urlresolvers import reverse | ||
from django.test import Client | ||
from forums.models import Forum | ||
from threads.models import Thread | ||
from .base import BaseThreadTestCase | ||
|
||
|
||
class ThreadUrlsTestCase(BaseThreadTestCase): | ||
|
||
def setUp(self): | ||
super(ThreadUrlsTestCase, self).setUp() | ||
self.client = Client() | ||
|
||
def test_new_url(self): | ||
response = self.client.get(reverse('threads:new')) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def test_show_url(self): | ||
forum = Forum.objects.create( | ||
name='Forum', | ||
description='A forum', | ||
active=True, | ||
) | ||
thread = Thread.objects.create(subject='Thread', forum=forum) | ||
|
||
response = self.client.get(reverse( | ||
'threads:show', kwargs={'slug': thread.slug})) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def test_show_url_not_valid(self): | ||
response = self.client.get(reverse( | ||
'threads:show', kwargs={'slug': 'does-not-exist'})) | ||
self.assertEqual(response.status_code, 404) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
from .base import BaseThreadTestCase | ||
from django.core.urlresolvers import reverse | ||
from django.test import RequestFactory | ||
from forums.models import Forum | ||
from threads.models import Thread | ||
from threads.views import NewThreadView, ShowThreadView | ||
|
||
|
||
class NewThreadViewTestCase(BaseThreadTestCase): | ||
|
||
def setUp(self): | ||
self.factory = RequestFactory() | ||
super(NewThreadViewTestCase, self).setUp() | ||
|
||
def test_get_new_view(self): | ||
request = self.factory.get('/') | ||
response = NewThreadView.as_view()(request) | ||
response.render() | ||
|
||
self.assertEqual(response.status_code, 200) | ||
self.assertIn( | ||
'<label for="id_subject">Subject:</label>', | ||
response.content | ||
) | ||
self.assertIn( | ||
'<label for="id_forum">Forum:</label>', | ||
response.content | ||
) | ||
|
||
def test_post_form(self): | ||
forum = Forum.objects.create(name='My Forum', description='Hello World') | ||
request = self.factory.post(reverse('threads:new'), data={ | ||
'subject': 'My thread', | ||
'forum': forum.pk | ||
}) | ||
response = NewThreadView.as_view()(request) | ||
|
||
thread = Thread.objects.get(pk=1) | ||
|
||
self.assertEqual(response.status_code, 302) | ||
self.assertEqual(response.url, reverse( | ||
'threads:show', kwargs={'slug': thread.slug})) | ||
|
||
|
||
class ShowThreadViewTestCase(BaseThreadTestCase): | ||
|
||
def setUp(self): | ||
self.factory = RequestFactory() | ||
super(ShowThreadViewTestCase, self).setUp() | ||
|
||
def test_show_view(self): | ||
forum = Forum.objects.create( | ||
name='Forum', | ||
description='A forum', | ||
active=True, | ||
) | ||
thread = Thread.objects.create(subject='Thread', forum=forum) | ||
|
||
request = self.factory.get('/') | ||
response = ShowThreadView.as_view()(request, slug=thread.slug) | ||
response.render() | ||
|
||
self.assertEqual(response.status_code, 200) | ||
self.assertIn(thread.subject, response.content) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from django.conf.urls import url | ||
from threads.views import NewThreadView, ShowThreadView | ||
|
||
|
||
urlpatterns = [ | ||
url( | ||
r'^new/$', | ||
NewThreadView.as_view(), | ||
name='new' | ||
), | ||
url( | ||
r'^(?P<slug>[\w-]+)/$', | ||
ShowThreadView.as_view(), | ||
name='show' | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,27 @@ | ||
# Create your views here. | ||
from django.core.urlresolvers import reverse | ||
from django.http import Http404 | ||
from django.views.generic.detail import DetailView | ||
from django.views.generic.edit import CreateView | ||
from threads.models import Thread | ||
|
||
|
||
class ThreadMixin(object): | ||
|
||
def get_object(self): | ||
slug = self.kwargs.get('slug') | ||
try: | ||
return Thread.objects.get(slug=slug) | ||
except Thread.DoesNotExist: | ||
raise Http404('No Thread matches the given query.') | ||
|
||
|
||
class NewThreadView(CreateView): | ||
model = Thread | ||
fields = ['subject', 'forum'] | ||
|
||
def get_success_url(self): | ||
return reverse('threads:show', kwargs={'slug': self.object.slug}) | ||
|
||
|
||
class ShowThreadView(ThreadMixin, DetailView): | ||
model = Thread |