more view tests
This commit is contained in:
parent
218f268cca
commit
d65e992cd7
BIN
example/example
Normal file
BIN
example/example
Normal file
Binary file not shown.
@ -1,8 +1,6 @@
|
||||
DEBUG = True
|
||||
TEMPLATE_DEBUG = DEBUG
|
||||
|
||||
MANAGERS = ADMINS
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
|
@ -1,2 +1,9 @@
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
{% if messages %}
|
||||
<ul id="message_list">
|
||||
{% for message in messages %}
|
||||
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% block content %} {% endblock %}
|
||||
|
@ -6,7 +6,7 @@ from django.conf.urls.defaults import *
|
||||
|
||||
urlpatterns = patterns('',
|
||||
# Example:
|
||||
# (r'^example/', include('example.foo.urls')),
|
||||
(r'^wiki/', include('markupwiki.urls')),
|
||||
|
||||
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
|
||||
# to INSTALLED_APPS to enable admin documentation:
|
||||
|
@ -125,9 +125,9 @@ class WikifyTests(TestCase):
|
||||
wikify_markup_wrapper(wrapped_upper_filter))
|
||||
|
||||
|
||||
class ViewArticleTests(TestCase):
|
||||
class ViewTestsBase(TestCase):
|
||||
|
||||
urls = 'markupwiki.urls'
|
||||
urls = 'example.urls'
|
||||
|
||||
def setUp(self):
|
||||
self.admin = User.objects.create_superuser('admin', 'admin@admin.com',
|
||||
@ -148,6 +148,8 @@ class ViewArticleTests(TestCase):
|
||||
author=self.frank,
|
||||
number=2,
|
||||
body='this is the final update')
|
||||
|
||||
# article with space in title
|
||||
self.two_word_article = Article.objects.create(title='two_words',
|
||||
creator=self.admin)
|
||||
ArticleVersion.objects.create(article=self.two_word_article,
|
||||
@ -155,52 +157,173 @@ class ViewArticleTests(TestCase):
|
||||
number=0,
|
||||
body='this article title has a space')
|
||||
|
||||
# locked article
|
||||
self.locked = Article.objects.create(title='locked', creator=self.admin,
|
||||
status=LOCKED)
|
||||
ArticleVersion.objects.create(article=self.locked, author=self.frank,
|
||||
number=0, body='lockdown')
|
||||
|
||||
# clear cache at start of every test
|
||||
cache.clear()
|
||||
|
||||
|
||||
def login_as_user(self):
|
||||
self.client.login(username='frank', password='password')
|
||||
|
||||
def login_as_admin(self):
|
||||
self.client.login(username='admin', password='password')
|
||||
|
||||
|
||||
class ViewArticleTests(ViewTestsBase):
|
||||
def test_normal(self):
|
||||
''' test accessing an article without a version specified '''
|
||||
resp = self.client.get('/test/')
|
||||
resp = self.client.get('/wiki/test/')
|
||||
self.assertContains(resp, 'this is the final update')
|
||||
|
||||
def test_specific_version(self):
|
||||
''' test accessing a specific version of an article '''
|
||||
resp = self.client.get('/test/history/1/')
|
||||
resp = self.client.get('/wiki/test/history/1/')
|
||||
self.assertContains(resp, 'this is an update')
|
||||
|
||||
def test_name_with_spaces(self):
|
||||
''' test that a name with spaces is properly converted into a name with underscores '''
|
||||
resp = self.client.get('/two words/')
|
||||
self.assertRedirects(resp, '/two_words/', status_code=301)
|
||||
resp = self.client.get('/wiki/two words/')
|
||||
self.assertRedirects(resp, '/wiki/two_words/', status_code=301)
|
||||
|
||||
def test_redirect(self):
|
||||
''' test that a 302 is given for any article with a redirect_to '''
|
||||
redirect = Article.objects.create(title='redirect', creator=self.admin,
|
||||
redirect_to=self.test_article)
|
||||
resp = self.client.get('/redirect/')
|
||||
self.assertRedirects(resp, '/test/', status_code=302)
|
||||
resp = self.client.get('/wiki/redirect/')
|
||||
self.assertRedirects(resp, '/wiki/test/', status_code=302)
|
||||
|
||||
def test_missing_edit(self):
|
||||
''' test that a 302 is given to the edit page if CREATE_MISSING_ARTICLE is True '''
|
||||
views.CREATE_MISSING_ARTICLE = True
|
||||
self.client.login(username='frank', password='password')
|
||||
resp = self.client.get('/newpage/')
|
||||
self.assertRedirects(resp, '/newpage/edit/', status_code=302)
|
||||
self.login_as_user()
|
||||
resp = self.client.get('/wiki/newpage/')
|
||||
self.assertRedirects(resp, '/wiki/newpage/edit/', status_code=302)
|
||||
|
||||
def test_missing_404(self):
|
||||
''' test that a 404 is given if CREATE_MISSING_ARTICLE is False '''
|
||||
views.CREATE_MISSING_ARTICLE = False
|
||||
self.client.login(username='frank', password='password')
|
||||
resp = self.client.get('/newpage/')
|
||||
self.login_as_user()
|
||||
resp = self.client.get('/wiki/newpage/')
|
||||
self.assertContains(resp, '', status_code=404)
|
||||
|
||||
def test_staff_forms(self):
|
||||
''' ensure that only admins can see the admin form '''
|
||||
|
||||
# make sure a normal user doesn't see the admin form
|
||||
self.client.login(username='frank', password='password')
|
||||
resp = self.client.get('/test/')
|
||||
self.login_as_user()
|
||||
resp = self.client.get('/wiki/test/')
|
||||
self.assertNotContains(resp, '<label for="id_status">')
|
||||
|
||||
# ...but an admin does
|
||||
self.client.login(username='admin', password='password')
|
||||
resp = self.client.get('/test/')
|
||||
self.login_as_admin()
|
||||
resp = self.client.get('/wiki/test/')
|
||||
self.assertContains(resp, '<label for="id_status">')
|
||||
|
||||
|
||||
class EditArticleTests(ViewTestsBase):
|
||||
|
||||
def test_edit_article_GET(self):
|
||||
''' ensure that logged in users get edit form for articles '''
|
||||
self.login_as_user()
|
||||
resp = self.client.get('/wiki/test/edit/')
|
||||
self.assertContains(resp, '<textarea id="id_body', status_code=200)
|
||||
|
||||
def test_create_article_GET(self):
|
||||
''' ensure that logged in users get edit form for new articles '''
|
||||
self.login_as_user()
|
||||
resp = self.client.get('/wiki/newarticle/edit/')
|
||||
self.assertContains(resp, '<textarea id="id_body', status_code=200)
|
||||
|
||||
def test_article_locked(self):
|
||||
''' ensure that only staff members can edit locked articles '''
|
||||
|
||||
# ensure that a normal user can't edit a locked article
|
||||
self.login_as_user()
|
||||
resp = self.client.get('/wiki/locked/edit/')
|
||||
self.assertContains(resp, 'not authorized to edit', status_code=403)
|
||||
# ensure that an admin can
|
||||
self.login_as_admin()
|
||||
resp = self.client.get('/wiki/locked/edit/')
|
||||
self.assertNotContains(resp, 'not authorized to edit', status_code=200)
|
||||
|
||||
# also test that permissions are checked on POST
|
||||
self.login_as_user()
|
||||
resp = self.client.post('/wiki/locked/edit/')
|
||||
self.assertContains(resp, 'not authorized to edit', status_code=403)
|
||||
|
||||
def test_edit_article_POST(self):
|
||||
''' test that articles can be edited by logged in users '''
|
||||
|
||||
postdata = {'body': 'edit article test',
|
||||
'comment': 'edit article test',
|
||||
'body_markup_type': 'markdown'}
|
||||
|
||||
# post to the form
|
||||
self.login_as_user()
|
||||
resp = self.client.post('/wiki/test/edit/', postdata)
|
||||
self.assertRedirects(resp, '/wiki/test/')
|
||||
|
||||
# make sure changes are present
|
||||
resp = self.client.get('/wiki/test/')
|
||||
self.assertContains(resp, 'edit article test')
|
||||
|
||||
def test_create_article_POST(self):
|
||||
''' test that articles can be created by logged in users '''
|
||||
postdata = {'body': 'new article test',
|
||||
'comment': 'new article',
|
||||
'body_markup_type': 'markdown'}
|
||||
|
||||
# post to the form
|
||||
self.login_as_user()
|
||||
resp = self.client.post('/wiki/new/edit/', postdata)
|
||||
self.assertRedirects(resp, '/wiki/new/')
|
||||
|
||||
# make sure changes are present
|
||||
resp = self.client.get('/wiki/new/')
|
||||
self.assertContains(resp, 'new article test')
|
||||
|
||||
def test_write_lock_message_GET(self):
|
||||
''' ensure that a user attempting to edit a write locked page will be denied '''
|
||||
self.login_as_user()
|
||||
self.client.get('/wiki/test/edit/') # acquire lock
|
||||
self.login_as_admin()
|
||||
resp = self.client.get('/wiki/test/edit/', follow=True)
|
||||
self.assertRedirects(resp, '/wiki/test/')
|
||||
self.assertContains(resp, 'Someone else is currently editing this page')
|
||||
|
||||
def test_write_lock_message_POST(self):
|
||||
''' ensure that a user attempting to post to a write locked page will be denied '''
|
||||
postdata = {'body': 'edit article test',
|
||||
'comment': 'edit article test',
|
||||
'body_markup_type': 'markdown'}
|
||||
self.login_as_user()
|
||||
self.client.get('/wiki/test/edit/') # acquire lock
|
||||
self.login_as_admin()
|
||||
resp = self.client.post('/wiki/test/edit/', postdata, follow=True)
|
||||
self.assertRedirects(resp, '/wiki/test/')
|
||||
self.assertContains(resp, 'Your session timed out')
|
||||
|
||||
|
||||
class RenameTests(ViewTestsBase):
|
||||
|
||||
def test_rename(self):
|
||||
''' test that rename moves all versions and creates a redirect '''
|
||||
|
||||
# post to rename as admin
|
||||
self.login_as_admin()
|
||||
resp = self.client.post('/wiki/two_words/rename_article/',
|
||||
{'new_title': 'now 3 words'})
|
||||
self.assertRedirects(resp, '/wiki/now_3_words/')
|
||||
|
||||
# check that version(s) move
|
||||
three = Article.objects.get(title='now_3_words')
|
||||
self.assertEquals(three.versions.count(), 1)
|
||||
|
||||
# check that redirect points to three
|
||||
two = Article.objects.get(title='two_words')
|
||||
self.assertEquals(two.redirect_to, three)
|
||||
|
Loading…
Reference in New Issue
Block a user