mirror of
https://github.com/django/django.git
synced 2025-07-05 02:09:13 +00:00
[1.2.X] Removed all usages of deprecated TestCase methods (self.fail*). This removed most of the Warnings emitted (with -Wall) during the test suite. Backport of [14803].
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14805 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
5a792ec4cc
commit
cc48f66f73
@ -313,7 +313,7 @@ class TransactionTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
if hasattr(response, 'redirect_chain'):
|
if hasattr(response, 'redirect_chain'):
|
||||||
# The request was a followed redirect
|
# The request was a followed redirect
|
||||||
self.failUnless(len(response.redirect_chain) > 0,
|
self.assertTrue(len(response.redirect_chain) > 0,
|
||||||
msg_prefix + "Response didn't redirect as expected: Response"
|
msg_prefix + "Response didn't redirect as expected: Response"
|
||||||
" code was %d (expected %d)" %
|
" code was %d (expected %d)" %
|
||||||
(response.status_code, status_code))
|
(response.status_code, status_code))
|
||||||
@ -427,7 +427,7 @@ class TransactionTestCase(unittest.TestCase):
|
|||||||
if field:
|
if field:
|
||||||
if field in context[form].errors:
|
if field in context[form].errors:
|
||||||
field_errors = context[form].errors[field]
|
field_errors = context[form].errors[field]
|
||||||
self.failUnless(err in field_errors,
|
self.assertTrue(err in field_errors,
|
||||||
msg_prefix + "The field '%s' on form '%s' in"
|
msg_prefix + "The field '%s' on form '%s' in"
|
||||||
" context %d does not contain the error '%s'"
|
" context %d does not contain the error '%s'"
|
||||||
" (actual errors: %s)" %
|
" (actual errors: %s)" %
|
||||||
@ -442,7 +442,7 @@ class TransactionTestCase(unittest.TestCase):
|
|||||||
(form, i, field))
|
(form, i, field))
|
||||||
else:
|
else:
|
||||||
non_field_errors = context[form].non_field_errors()
|
non_field_errors = context[form].non_field_errors()
|
||||||
self.failUnless(err in non_field_errors,
|
self.assertTrue(err in non_field_errors,
|
||||||
msg_prefix + "The form '%s' in context %d does not"
|
msg_prefix + "The form '%s' in context %d does not"
|
||||||
" contain the non-field error '%s'"
|
" contain the non-field error '%s'"
|
||||||
" (actual errors: %s)" %
|
" (actual errors: %s)" %
|
||||||
@ -462,7 +462,7 @@ class TransactionTestCase(unittest.TestCase):
|
|||||||
template_names = [t.name for t in to_list(response.template)]
|
template_names = [t.name for t in to_list(response.template)]
|
||||||
if not template_names:
|
if not template_names:
|
||||||
self.fail(msg_prefix + "No templates used to render the response")
|
self.fail(msg_prefix + "No templates used to render the response")
|
||||||
self.failUnless(template_name in template_names,
|
self.assertTrue(template_name in template_names,
|
||||||
msg_prefix + "Template '%s' was not a template used to render"
|
msg_prefix + "Template '%s' was not a template used to render"
|
||||||
" the response. Actual template(s) used: %s" %
|
" the response. Actual template(s) used: %s" %
|
||||||
(template_name, u', '.join(template_names)))
|
(template_name, u', '.join(template_names)))
|
||||||
@ -476,7 +476,7 @@ class TransactionTestCase(unittest.TestCase):
|
|||||||
msg_prefix += ": "
|
msg_prefix += ": "
|
||||||
|
|
||||||
template_names = [t.name for t in to_list(response.template)]
|
template_names = [t.name for t in to_list(response.template)]
|
||||||
self.failIf(template_name in template_names,
|
self.assertFalse(template_name in template_names,
|
||||||
msg_prefix + "Template '%s' was used unexpectedly in rendering"
|
msg_prefix + "Template '%s' was used unexpectedly in rendering"
|
||||||
" the response" % template_name)
|
" the response" % template_name)
|
||||||
|
|
||||||
|
@ -2,13 +2,13 @@ import datetime
|
|||||||
import re
|
import re
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms.models import _get_foreign_key
|
from django.forms.models import (_get_foreign_key, inlineformset_factory,
|
||||||
from django.forms.models import inlineformset_factory
|
modelformset_factory, modelformset_factory)
|
||||||
from django.forms.models import modelformset_factory
|
|
||||||
from django.forms.models import modelformset_factory
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from modeltests.model_formsets.models import (
|
from modeltests.model_formsets.models import (
|
||||||
Author, BetterAuthor, Book, BookWithCustomPK, Editor,
|
Author, BetterAuthor, Book, BookWithCustomPK, Editor,
|
||||||
BookWithOptionalAltEditor, AlternateBook, AuthorMeeting, CustomPrimaryKey,
|
BookWithOptionalAltEditor, AlternateBook, AuthorMeeting, CustomPrimaryKey,
|
||||||
@ -30,7 +30,7 @@ class DeletionTests(TestCase):
|
|||||||
}
|
}
|
||||||
formset = PoetFormSet(data, queryset=Poet.objects.all())
|
formset = PoetFormSet(data, queryset=Poet.objects.all())
|
||||||
formset.save()
|
formset.save()
|
||||||
self.failUnless(formset.is_valid())
|
self.assertTrue(formset.is_valid())
|
||||||
self.assertEqual(Poet.objects.count(), 0)
|
self.assertEqual(Poet.objects.count(), 0)
|
||||||
|
|
||||||
def test_add_form_deletion_when_invalid(self):
|
def test_add_form_deletion_when_invalid(self):
|
||||||
|
@ -143,6 +143,6 @@ class SignalTests(TestCase):
|
|||||||
signals.post_save.connect(sender=Person, receiver=b)
|
signals.post_save.connect(sender=Person, receiver=b)
|
||||||
p = Person.objects.create(first_name='John', last_name='Smith')
|
p = Person.objects.create(first_name='John', last_name='Smith')
|
||||||
|
|
||||||
self.failUnless(a._run)
|
self.assertTrue(a._run)
|
||||||
self.failUnless(b._run)
|
self.assertTrue(b._run)
|
||||||
self.assertEqual(signals.post_save.receivers, [])
|
self.assertEqual(signals.post_save.receivers, [])
|
||||||
|
@ -70,7 +70,7 @@ class ClientTest(TestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.context['data'], '37')
|
self.assertEqual(response.context['data'], '37')
|
||||||
self.assertEqual(response.template.name, 'POST Template')
|
self.assertEqual(response.template.name, 'POST Template')
|
||||||
self.failUnless('Data received' in response.content)
|
self.assertTrue('Data received' in response.content)
|
||||||
|
|
||||||
def test_response_headers(self):
|
def test_response_headers(self):
|
||||||
"Check the value of HTTP headers returned in a response"
|
"Check the value of HTTP headers returned in a response"
|
||||||
@ -275,7 +275,7 @@ class ClientTest(TestCase):
|
|||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Request a page that requires a login
|
# Request a page that requires a login
|
||||||
response = self.client.get('/test_client/login_protected_view/')
|
response = self.client.get('/test_client/login_protected_view/')
|
||||||
@ -291,7 +291,7 @@ class ClientTest(TestCase):
|
|||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Request a page that requires a login
|
# Request a page that requires a login
|
||||||
response = self.client.get('/test_client/login_protected_method_view/')
|
response = self.client.get('/test_client/login_protected_method_view/')
|
||||||
@ -307,7 +307,7 @@ class ClientTest(TestCase):
|
|||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Request a page that requires a login
|
# Request a page that requires a login
|
||||||
response = self.client.get('/test_client/login_protected_view_custom_redirect/')
|
response = self.client.get('/test_client/login_protected_view_custom_redirect/')
|
||||||
@ -318,13 +318,13 @@ class ClientTest(TestCase):
|
|||||||
"Request a page that is protected with @login, but use bad credentials"
|
"Request a page that is protected with @login, but use bad credentials"
|
||||||
|
|
||||||
login = self.client.login(username='otheruser', password='nopassword')
|
login = self.client.login(username='otheruser', password='nopassword')
|
||||||
self.failIf(login)
|
self.assertFalse(login)
|
||||||
|
|
||||||
def test_view_with_inactive_login(self):
|
def test_view_with_inactive_login(self):
|
||||||
"Request a page that is protected with @login, but use an inactive login"
|
"Request a page that is protected with @login, but use an inactive login"
|
||||||
|
|
||||||
login = self.client.login(username='inactive', password='password')
|
login = self.client.login(username='inactive', password='password')
|
||||||
self.failIf(login)
|
self.assertFalse(login)
|
||||||
|
|
||||||
def test_logout(self):
|
def test_logout(self):
|
||||||
"Request a logout after logging in"
|
"Request a logout after logging in"
|
||||||
@ -352,7 +352,7 @@ class ClientTest(TestCase):
|
|||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Log in with wrong permissions. Should result in 302.
|
# Log in with wrong permissions. Should result in 302.
|
||||||
response = self.client.get('/test_client/permission_protected_view/')
|
response = self.client.get('/test_client/permission_protected_view/')
|
||||||
@ -369,7 +369,7 @@ class ClientTest(TestCase):
|
|||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Log in with wrong permissions. Should result in 302.
|
# Log in with wrong permissions. Should result in 302.
|
||||||
response = self.client.get('/test_client/permission_protected_method_view/')
|
response = self.client.get('/test_client/permission_protected_method_view/')
|
||||||
|
@ -2,6 +2,7 @@ from django.test import TestCase
|
|||||||
|
|
||||||
from models import A, B, C, D, DataPoint, RelatedPoint
|
from models import A, B, C, D, DataPoint, RelatedPoint
|
||||||
|
|
||||||
|
|
||||||
class SimpleTest(TestCase):
|
class SimpleTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.a1 = A.objects.create()
|
self.a1 = A.objects.create()
|
||||||
@ -15,18 +16,18 @@ class SimpleTest(TestCase):
|
|||||||
Test that update changes the right number of rows for a nonempty queryset
|
Test that update changes the right number of rows for a nonempty queryset
|
||||||
"""
|
"""
|
||||||
num_updated = self.a1.b_set.update(y=100)
|
num_updated = self.a1.b_set.update(y=100)
|
||||||
self.failUnlessEqual(num_updated, 20)
|
self.assertEqual(num_updated, 20)
|
||||||
cnt = B.objects.filter(y=100).count()
|
cnt = B.objects.filter(y=100).count()
|
||||||
self.failUnlessEqual(cnt, 20)
|
self.assertEqual(cnt, 20)
|
||||||
|
|
||||||
def test_empty_update(self):
|
def test_empty_update(self):
|
||||||
"""
|
"""
|
||||||
Test that update changes the right number of rows for an empty queryset
|
Test that update changes the right number of rows for an empty queryset
|
||||||
"""
|
"""
|
||||||
num_updated = self.a2.b_set.update(y=100)
|
num_updated = self.a2.b_set.update(y=100)
|
||||||
self.failUnlessEqual(num_updated, 0)
|
self.assertEqual(num_updated, 0)
|
||||||
cnt = B.objects.filter(y=100).count()
|
cnt = B.objects.filter(y=100).count()
|
||||||
self.failUnlessEqual(cnt, 0)
|
self.assertEqual(cnt, 0)
|
||||||
|
|
||||||
def test_nonempty_update_with_inheritance(self):
|
def test_nonempty_update_with_inheritance(self):
|
||||||
"""
|
"""
|
||||||
@ -34,9 +35,9 @@ class SimpleTest(TestCase):
|
|||||||
when the update affects only a base table
|
when the update affects only a base table
|
||||||
"""
|
"""
|
||||||
num_updated = self.a1.d_set.update(y=100)
|
num_updated = self.a1.d_set.update(y=100)
|
||||||
self.failUnlessEqual(num_updated, 20)
|
self.assertEqual(num_updated, 20)
|
||||||
cnt = D.objects.filter(y=100).count()
|
cnt = D.objects.filter(y=100).count()
|
||||||
self.failUnlessEqual(cnt, 20)
|
self.assertEqual(cnt, 20)
|
||||||
|
|
||||||
def test_empty_update_with_inheritance(self):
|
def test_empty_update_with_inheritance(self):
|
||||||
"""
|
"""
|
||||||
@ -44,9 +45,9 @@ class SimpleTest(TestCase):
|
|||||||
when the update affects only a base table
|
when the update affects only a base table
|
||||||
"""
|
"""
|
||||||
num_updated = self.a2.d_set.update(y=100)
|
num_updated = self.a2.d_set.update(y=100)
|
||||||
self.failUnlessEqual(num_updated, 0)
|
self.assertEqual(num_updated, 0)
|
||||||
cnt = D.objects.filter(y=100).count()
|
cnt = D.objects.filter(y=100).count()
|
||||||
self.failUnlessEqual(cnt, 0)
|
self.assertEqual(cnt, 0)
|
||||||
|
|
||||||
class AdvancedTests(TestCase):
|
class AdvancedTests(TestCase):
|
||||||
|
|
||||||
@ -112,4 +113,4 @@ class AdvancedTests(TestCase):
|
|||||||
"""
|
"""
|
||||||
method = DataPoint.objects.all()[:2].update
|
method = DataPoint.objects.all()[:2].update
|
||||||
self.assertRaises(AssertionError, method,
|
self.assertRaises(AssertionError, method,
|
||||||
another_value='another thing')
|
another_value='another thing')
|
||||||
|
@ -11,8 +11,8 @@ class ChangeListTests(TransactionTestCase):
|
|||||||
overwrite a custom select_related provided by ModelAdmin.queryset().
|
overwrite a custom select_related provided by ModelAdmin.queryset().
|
||||||
"""
|
"""
|
||||||
m = ChildAdmin(Child, admin.site)
|
m = ChildAdmin(Child, admin.site)
|
||||||
cl = ChangeList(MockRequest(), Child, m.list_display, m.list_display_links,
|
cl = ChangeList(MockRequest(), Child, m.list_display, m.list_display_links,
|
||||||
m.list_filter, m.date_hierarchy, m.search_fields,
|
m.list_filter, m.date_hierarchy, m.search_fields,
|
||||||
m.list_select_related, m.list_per_page, m.list_editable, m)
|
m.list_select_related, m.list_per_page, m.list_editable, m)
|
||||||
self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}})
|
self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}})
|
||||||
|
|
||||||
@ -25,24 +25,24 @@ class ChangeListTests(TransactionTestCase):
|
|||||||
new_child = Child.objects.create(name='name', parent=new_parent)
|
new_child = Child.objects.create(name='name', parent=new_parent)
|
||||||
request = MockRequest()
|
request = MockRequest()
|
||||||
m = ChildAdmin(Child, admin.site)
|
m = ChildAdmin(Child, admin.site)
|
||||||
cl = ChangeList(request, Child, m.list_display, m.list_display_links,
|
cl = ChangeList(request, Child, m.list_display, m.list_display_links,
|
||||||
m.list_filter, m.date_hierarchy, m.search_fields,
|
m.list_filter, m.date_hierarchy, m.search_fields,
|
||||||
m.list_select_related, m.list_per_page, m.list_editable, m)
|
m.list_select_related, m.list_per_page, m.list_editable, m)
|
||||||
cl.formset = None
|
cl.formset = None
|
||||||
template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
|
template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
|
||||||
context = Context({'cl': cl})
|
context = Context({'cl': cl})
|
||||||
table_output = template.render(context)
|
table_output = template.render(context)
|
||||||
row_html = '<tbody><tr class="row1"><td><input type="checkbox" class="action-select" value="1" name="_selected_action" /></td><th><a href="1/">name</a></th><td>Parent object</td></tr></tbody>'
|
row_html = '<tbody><tr class="row1"><td><input type="checkbox" class="action-select" value="1" name="_selected_action" /></td><th><a href="1/">name</a></th><td>Parent object</td></tr></tbody>'
|
||||||
self.failIf(table_output.find(row_html) == -1,
|
self.assertFalse(table_output.find(row_html) == -1,
|
||||||
'Failed to find expected row element: %s' % table_output)
|
'Failed to find expected row element: %s' % table_output)
|
||||||
|
|
||||||
def test_result_list_editable_html(self):
|
def test_result_list_editable_html(self):
|
||||||
"""
|
"""
|
||||||
Regression tests for #11791: Inclusion tag result_list generates a
|
Regression tests for #11791: Inclusion tag result_list generates a
|
||||||
table and this checks that the items are nested within the table
|
table and this checks that the items are nested within the table
|
||||||
element tags.
|
element tags.
|
||||||
Also a regression test for #13599, verifies that hidden fields
|
Also a regression test for #13599, verifies that hidden fields
|
||||||
when list_editable is enabled are rendered in a div outside the
|
when list_editable is enabled are rendered in a div outside the
|
||||||
table.
|
table.
|
||||||
"""
|
"""
|
||||||
new_parent = Parent.objects.create(name='parent')
|
new_parent = Parent.objects.create(name='parent')
|
||||||
@ -54,8 +54,8 @@ class ChangeListTests(TransactionTestCase):
|
|||||||
m.list_display = ['id', 'name', 'parent']
|
m.list_display = ['id', 'name', 'parent']
|
||||||
m.list_display_links = ['id']
|
m.list_display_links = ['id']
|
||||||
m.list_editable = ['name']
|
m.list_editable = ['name']
|
||||||
cl = ChangeList(request, Child, m.list_display, m.list_display_links,
|
cl = ChangeList(request, Child, m.list_display, m.list_display_links,
|
||||||
m.list_filter, m.date_hierarchy, m.search_fields,
|
m.list_filter, m.date_hierarchy, m.search_fields,
|
||||||
m.list_select_related, m.list_per_page, m.list_editable, m)
|
m.list_select_related, m.list_per_page, m.list_editable, m)
|
||||||
FormSet = m.get_changelist_formset(request)
|
FormSet = m.get_changelist_formset(request)
|
||||||
cl.formset = FormSet(queryset=cl.result_list)
|
cl.formset = FormSet(queryset=cl.result_list)
|
||||||
@ -64,11 +64,11 @@ class ChangeListTests(TransactionTestCase):
|
|||||||
table_output = template.render(context)
|
table_output = template.render(context)
|
||||||
# make sure that hidden fields are in the correct place
|
# make sure that hidden fields are in the correct place
|
||||||
hiddenfields_div = '<div class="hiddenfields"><input type="hidden" name="form-0-id" value="1" id="id_form-0-id" /></div>'
|
hiddenfields_div = '<div class="hiddenfields"><input type="hidden" name="form-0-id" value="1" id="id_form-0-id" /></div>'
|
||||||
self.failIf(table_output.find(hiddenfields_div) == -1,
|
self.assertFalse(table_output.find(hiddenfields_div) == -1,
|
||||||
'Failed to find hidden fields in: %s' % table_output)
|
'Failed to find hidden fields in: %s' % table_output)
|
||||||
# make sure that list editable fields are rendered in divs correctly
|
# make sure that list editable fields are rendered in divs correctly
|
||||||
editable_name_field = '<input name="form-0-name" value="name" class="vTextField" maxlength="30" type="text" id="id_form-0-name" />'
|
editable_name_field = '<input name="form-0-name" value="name" class="vTextField" maxlength="30" type="text" id="id_form-0-name" />'
|
||||||
self.failIf('<td>%s</td>' % editable_name_field == -1,
|
self.assertFalse('<td>%s</td>' % editable_name_field == -1,
|
||||||
'Failed to find "name" list_editable field in: %s' % table_output)
|
'Failed to find "name" list_editable field in: %s' % table_output)
|
||||||
|
|
||||||
class ChildAdmin(admin.ModelAdmin):
|
class ChildAdmin(admin.ModelAdmin):
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from django.contrib.admin.helpers import InlineAdminForm
|
from django.contrib.admin.helpers import InlineAdminForm
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
# local test models
|
# local test models
|
||||||
from models import Holder, Inner, InnerInline
|
from models import (Holder, Inner, InnerInline, Holder2, Inner2, Holder3,
|
||||||
from models import Holder2, Inner2, Holder3, Inner3
|
Inner3, Person, OutfitItem, Fashionista, Teacher, Parent, Child)
|
||||||
from models import Person, OutfitItem, Fashionista
|
|
||||||
from models import Teacher, Parent, Child
|
|
||||||
|
|
||||||
|
|
||||||
class TestInline(TestCase):
|
class TestInline(TestCase):
|
||||||
@ -19,7 +17,7 @@ class TestInline(TestCase):
|
|||||||
self.change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
|
self.change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
|
||||||
|
|
||||||
result = self.client.login(username='super', password='secret')
|
result = self.client.login(username='super', password='secret')
|
||||||
self.failUnlessEqual(result, True)
|
self.assertEqual(result, True)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
@ -75,7 +73,7 @@ class TestInlineMedia(TestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
||||||
result = self.client.login(username='super', password='secret')
|
result = self.client.login(username='super', password='secret')
|
||||||
self.failUnlessEqual(result, True)
|
self.assertEqual(result, True)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
|
@ -12,6 +12,7 @@ import re
|
|||||||
from django import conf, bin, get_version
|
from django import conf, bin, get_version
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
class AdminScriptTestCase(unittest.TestCase):
|
class AdminScriptTestCase(unittest.TestCase):
|
||||||
def write_settings(self, filename, apps=None, is_dir=False, sdict=None):
|
def write_settings(self, filename, apps=None, is_dir=False, sdict=None):
|
||||||
test_dir = os.path.dirname(os.path.dirname(__file__))
|
test_dir = os.path.dirname(os.path.dirname(__file__))
|
||||||
@ -156,7 +157,7 @@ class AdminScriptTestCase(unittest.TestCase):
|
|||||||
self.assertEquals(len(stream), 0, "Stream should be empty: actually contains '%s'" % stream)
|
self.assertEquals(len(stream), 0, "Stream should be empty: actually contains '%s'" % stream)
|
||||||
def assertOutput(self, stream, msg):
|
def assertOutput(self, stream, msg):
|
||||||
"Utility assertion: assert that the given message exists in the output"
|
"Utility assertion: assert that the given message exists in the output"
|
||||||
self.failUnless(msg in stream, "'%s' does not match actual output text '%s'" % (msg, stream))
|
self.assertTrue(msg in stream, "'%s' does not match actual output text '%s'" % (msg, stream))
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# DJANGO ADMIN TESTS
|
# DJANGO ADMIN TESTS
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -142,7 +142,7 @@ class AdminForeignKeyWidgetChangeList(DjangoTestCase):
|
|||||||
|
|
||||||
def test_changelist_foreignkey(self):
|
def test_changelist_foreignkey(self):
|
||||||
response = self.client.get('%s/admin_widgets/car/' % self.admin_root)
|
response = self.client.get('%s/admin_widgets/car/' % self.admin_root)
|
||||||
self.failUnless('%s/auth/user/add/' % self.admin_root in response.content)
|
self.assertTrue('%s/auth/user/add/' % self.admin_root in response.content)
|
||||||
|
|
||||||
|
|
||||||
class AdminForeignKeyRawIdWidget(DjangoTestCase):
|
class AdminForeignKeyRawIdWidget(DjangoTestCase):
|
||||||
|
@ -47,28 +47,28 @@ class EggLoadingTest(TestCase):
|
|||||||
egg_name = '%s/modelapp.egg' % self.egg_dir
|
egg_name = '%s/modelapp.egg' % self.egg_dir
|
||||||
sys.path.append(egg_name)
|
sys.path.append(egg_name)
|
||||||
models = load_app('app_with_models')
|
models = load_app('app_with_models')
|
||||||
self.failIf(models is None)
|
self.assertFalse(models is None)
|
||||||
|
|
||||||
def test_egg2(self):
|
def test_egg2(self):
|
||||||
"""Loading an app from an egg that has no models returns no models (and no error)"""
|
"""Loading an app from an egg that has no models returns no models (and no error)"""
|
||||||
egg_name = '%s/nomodelapp.egg' % self.egg_dir
|
egg_name = '%s/nomodelapp.egg' % self.egg_dir
|
||||||
sys.path.append(egg_name)
|
sys.path.append(egg_name)
|
||||||
models = load_app('app_no_models')
|
models = load_app('app_no_models')
|
||||||
self.failUnless(models is None)
|
self.assertTrue(models is None)
|
||||||
|
|
||||||
def test_egg3(self):
|
def test_egg3(self):
|
||||||
"""Models module can be loaded from an app located under an egg's top-level package"""
|
"""Models module can be loaded from an app located under an egg's top-level package"""
|
||||||
egg_name = '%s/omelet.egg' % self.egg_dir
|
egg_name = '%s/omelet.egg' % self.egg_dir
|
||||||
sys.path.append(egg_name)
|
sys.path.append(egg_name)
|
||||||
models = load_app('omelet.app_with_models')
|
models = load_app('omelet.app_with_models')
|
||||||
self.failIf(models is None)
|
self.assertFalse(models is None)
|
||||||
|
|
||||||
def test_egg4(self):
|
def test_egg4(self):
|
||||||
"""Loading an app with no models from under the top-level egg package generates no error"""
|
"""Loading an app with no models from under the top-level egg package generates no error"""
|
||||||
egg_name = '%s/omelet.egg' % self.egg_dir
|
egg_name = '%s/omelet.egg' % self.egg_dir
|
||||||
sys.path.append(egg_name)
|
sys.path.append(egg_name)
|
||||||
models = load_app('omelet.app_no_models')
|
models = load_app('omelet.app_no_models')
|
||||||
self.failUnless(models is None)
|
self.assertTrue(models is None)
|
||||||
|
|
||||||
def test_egg5(self):
|
def test_egg5(self):
|
||||||
"""Loading an app from an egg that has an import error in its models module raises that error"""
|
"""Loading an app from an egg that has an import error in its models module raises that error"""
|
||||||
@ -80,4 +80,4 @@ class EggLoadingTest(TestCase):
|
|||||||
except ImportError, e:
|
except ImportError, e:
|
||||||
# Make sure the message is indicating the actual
|
# Make sure the message is indicating the actual
|
||||||
# problem in the broken app.
|
# problem in the broken app.
|
||||||
self.failUnless("modelz" in e.args[0])
|
self.assertTrue("modelz" in e.args[0])
|
||||||
|
@ -13,7 +13,7 @@ class Bug8245Test(TestCase):
|
|||||||
try:
|
try:
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.failUnlessEqual(str(e), "Bad admin module")
|
self.assertEqual(str(e), "Bad admin module")
|
||||||
else:
|
else:
|
||||||
self.fail(
|
self.fail(
|
||||||
'autodiscover should have raised a "Bad admin module" error.')
|
'autodiscover should have raised a "Bad admin module" error.')
|
||||||
@ -23,7 +23,7 @@ class Bug8245Test(TestCase):
|
|||||||
try:
|
try:
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.failUnlessEqual(str(e), "Bad admin module")
|
self.assertEqual(str(e), "Bad admin module")
|
||||||
else:
|
else:
|
||||||
self.fail(
|
self.fail(
|
||||||
'autodiscover should have raised a "Bad admin module" error.')
|
'autodiscover should have raised a "Bad admin module" error.')
|
||||||
|
@ -47,5 +47,5 @@ class WSGIFileWrapperTests(TestCase):
|
|||||||
err = StringIO()
|
err = StringIO()
|
||||||
handler = FileWrapperHandler(None, StringIO(), err, env)
|
handler = FileWrapperHandler(None, StringIO(), err, env)
|
||||||
handler.run(wsgi_app)
|
handler.run(wsgi_app)
|
||||||
self.failIf(handler._used_sendfile)
|
self.assertFalse(handler._used_sendfile)
|
||||||
self.assertEqual(handler.stdout.getvalue().splitlines()[-1],'Hello World!')
|
self.assertEqual(handler.stdout.getvalue().splitlines()[-1],'Hello World!')
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.comments.models import Comment
|
|
||||||
from django.contrib.comments.forms import CommentForm
|
from django.contrib.comments.forms import CommentForm
|
||||||
|
from django.contrib.comments.models import Comment
|
||||||
|
from django.utils.hashcompat import sha_constructor
|
||||||
|
|
||||||
from regressiontests.comment_tests.models import Article
|
from regressiontests.comment_tests.models import Article
|
||||||
from regressiontests.comment_tests.tests import CommentTestCase
|
from regressiontests.comment_tests.tests import CommentTestCase
|
||||||
|
|
||||||
class CommentFormTests(CommentTestCase):
|
|
||||||
|
|
||||||
|
class CommentFormTests(CommentTestCase):
|
||||||
def testInit(self):
|
def testInit(self):
|
||||||
f = CommentForm(Article.objects.get(pk=1))
|
f = CommentForm(Article.objects.get(pk=1))
|
||||||
self.assertEqual(f.initial['content_type'], str(Article._meta))
|
self.assertEqual(f.initial['content_type'], str(Article._meta))
|
||||||
self.assertEqual(f.initial['object_pk'], "1")
|
self.assertEqual(f.initial['object_pk'], "1")
|
||||||
self.failIfEqual(f.initial['security_hash'], None)
|
self.assertNotEqual(f.initial['security_hash'], None)
|
||||||
self.failIfEqual(f.initial['timestamp'], None)
|
self.assertNotEqual(f.initial['timestamp'], None)
|
||||||
|
|
||||||
def testValidPost(self):
|
def testValidPost(self):
|
||||||
a = Article.objects.get(pk=1)
|
a = Article.objects.get(pk=1)
|
||||||
@ -25,7 +28,7 @@ class CommentFormTests(CommentTestCase):
|
|||||||
d = self.getValidData(a)
|
d = self.getValidData(a)
|
||||||
d.update(kwargs)
|
d.update(kwargs)
|
||||||
f = CommentForm(Article.objects.get(pk=1), data=d)
|
f = CommentForm(Article.objects.get(pk=1), data=d)
|
||||||
self.failIf(f.is_valid())
|
self.assertFalse(f.is_valid())
|
||||||
return f
|
return f
|
||||||
|
|
||||||
def testHoneypotTampering(self):
|
def testHoneypotTampering(self):
|
||||||
@ -70,12 +73,12 @@ class CommentFormTests(CommentTestCase):
|
|||||||
# Try with COMMENTS_ALLOW_PROFANITIES off
|
# Try with COMMENTS_ALLOW_PROFANITIES off
|
||||||
settings.COMMENTS_ALLOW_PROFANITIES = False
|
settings.COMMENTS_ALLOW_PROFANITIES = False
|
||||||
f = CommentForm(a, data=dict(d, comment="What a rooster!"))
|
f = CommentForm(a, data=dict(d, comment="What a rooster!"))
|
||||||
self.failIf(f.is_valid())
|
self.assertFalse(f.is_valid())
|
||||||
|
|
||||||
# Now with COMMENTS_ALLOW_PROFANITIES on
|
# Now with COMMENTS_ALLOW_PROFANITIES on
|
||||||
settings.COMMENTS_ALLOW_PROFANITIES = True
|
settings.COMMENTS_ALLOW_PROFANITIES = True
|
||||||
f = CommentForm(a, data=dict(d, comment="What a rooster!"))
|
f = CommentForm(a, data=dict(d, comment="What a rooster!"))
|
||||||
self.failUnless(f.is_valid())
|
self.assertTrue(f.is_valid())
|
||||||
|
|
||||||
# Restore settings
|
# Restore settings
|
||||||
settings.PROFANITIES_LIST, settings.COMMENTS_ALLOW_PROFANITIES = saved
|
settings.PROFANITIES_LIST, settings.COMMENTS_ALLOW_PROFANITIES = saved
|
||||||
|
@ -199,7 +199,7 @@ class CommentViewTests(CommentTestCase):
|
|||||||
signals.comment_will_be_posted.connect(receive)
|
signals.comment_will_be_posted.connect(receive)
|
||||||
self.testCreateValidComment()
|
self.testCreateValidComment()
|
||||||
c = Comment.objects.all()[0]
|
c = Comment.objects.all()[0]
|
||||||
self.failIf(c.is_public)
|
self.assertFalse(c.is_public)
|
||||||
|
|
||||||
def testCommentNext(self):
|
def testCommentNext(self):
|
||||||
"""Test the different "next" actions the comment view can take"""
|
"""Test the different "next" actions the comment view can take"""
|
||||||
@ -208,14 +208,14 @@ class CommentViewTests(CommentTestCase):
|
|||||||
response = self.client.post("/post/", data)
|
response = self.client.post("/post/", data)
|
||||||
location = response["Location"]
|
location = response["Location"]
|
||||||
match = post_redirect_re.match(location)
|
match = post_redirect_re.match(location)
|
||||||
self.failUnless(match != None, "Unexpected redirect location: %s" % location)
|
self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
|
||||||
|
|
||||||
data["next"] = "/somewhere/else/"
|
data["next"] = "/somewhere/else/"
|
||||||
data["comment"] = "This is another comment"
|
data["comment"] = "This is another comment"
|
||||||
response = self.client.post("/post/", data)
|
response = self.client.post("/post/", data)
|
||||||
location = response["Location"]
|
location = response["Location"]
|
||||||
match = re.search(r"^http://testserver/somewhere/else/\?c=\d+$", location)
|
match = re.search(r"^http://testserver/somewhere/else/\?c=\d+$", location)
|
||||||
self.failUnless(match != None, "Unexpected redirect location: %s" % location)
|
self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
|
||||||
|
|
||||||
def testCommentDoneView(self):
|
def testCommentDoneView(self):
|
||||||
a = Article.objects.get(pk=1)
|
a = Article.objects.get(pk=1)
|
||||||
@ -223,7 +223,7 @@ class CommentViewTests(CommentTestCase):
|
|||||||
response = self.client.post("/post/", data)
|
response = self.client.post("/post/", data)
|
||||||
location = response["Location"]
|
location = response["Location"]
|
||||||
match = post_redirect_re.match(location)
|
match = post_redirect_re.match(location)
|
||||||
self.failUnless(match != None, "Unexpected redirect location: %s" % location)
|
self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
|
||||||
pk = int(match.group('pk'))
|
pk = int(match.group('pk'))
|
||||||
response = self.client.get(location)
|
response = self.client.get(location)
|
||||||
self.assertTemplateUsed(response, "comments/posted.html")
|
self.assertTemplateUsed(response, "comments/posted.html")
|
||||||
@ -240,7 +240,7 @@ class CommentViewTests(CommentTestCase):
|
|||||||
response = self.client.post("/post/", data)
|
response = self.client.post("/post/", data)
|
||||||
location = response["Location"]
|
location = response["Location"]
|
||||||
match = re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+$", location)
|
match = re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+$", location)
|
||||||
self.failUnless(match != None, "Unexpected redirect location: %s" % location)
|
self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
|
||||||
|
|
||||||
def testCommentPostRedirectWithInvalidIntegerPK(self):
|
def testCommentPostRedirectWithInvalidIntegerPK(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
from django.contrib.comments.models import Comment
|
from django.contrib.comments.models import Comment
|
||||||
|
|
||||||
from regressiontests.comment_tests.models import Author, Article
|
from regressiontests.comment_tests.models import Author, Article
|
||||||
from regressiontests.comment_tests.tests import CommentTestCase
|
from regressiontests.comment_tests.tests import CommentTestCase
|
||||||
|
|
||||||
class CommentModelTests(CommentTestCase):
|
|
||||||
|
|
||||||
|
class CommentModelTests(CommentTestCase):
|
||||||
def testSave(self):
|
def testSave(self):
|
||||||
for c in self.createSomeComments():
|
for c in self.createSomeComments():
|
||||||
self.failIfEqual(c.submit_date, None)
|
self.assertNotEqual(c.submit_date, None)
|
||||||
|
|
||||||
def testUserProperties(self):
|
def testUserProperties(self):
|
||||||
c1, c2, c3, c4 = self.createSomeComments()
|
c1, c2, c3, c4 = self.createSomeComments()
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
from django.contrib.comments.models import Comment, CommentFlag
|
|
||||||
from django.contrib.auth.models import User, Permission
|
from django.contrib.auth.models import User, Permission
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from regressiontests.comment_tests.tests import CommentTestCase
|
|
||||||
from django.contrib.comments import signals
|
from django.contrib.comments import signals
|
||||||
|
from django.contrib.comments.models import Comment, CommentFlag
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
|
from regressiontests.comment_tests.tests import CommentTestCase
|
||||||
|
|
||||||
|
|
||||||
class FlagViewTests(CommentTestCase):
|
class FlagViewTests(CommentTestCase):
|
||||||
|
|
||||||
@ -35,7 +37,7 @@ class FlagViewTests(CommentTestCase):
|
|||||||
def testFlagAnon(self):
|
def testFlagAnon(self):
|
||||||
"""GET/POST the flag view while not logged in: redirect to log in."""
|
"""GET/POST the flag view while not logged in: redirect to log in."""
|
||||||
comments = self.createSomeComments()
|
comments = self.createSomeComments()
|
||||||
pk = comments[0].pk
|
pk = comments[0].pk
|
||||||
response = self.client.get("/flag/%d/" % pk)
|
response = self.client.get("/flag/%d/" % pk)
|
||||||
self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/flag/%d/" % pk)
|
self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/flag/%d/" % pk)
|
||||||
response = self.client.post("/flag/%d/" % pk)
|
response = self.client.post("/flag/%d/" % pk)
|
||||||
@ -43,7 +45,7 @@ class FlagViewTests(CommentTestCase):
|
|||||||
|
|
||||||
def testFlaggedView(self):
|
def testFlaggedView(self):
|
||||||
comments = self.createSomeComments()
|
comments = self.createSomeComments()
|
||||||
pk = comments[0].pk
|
pk = comments[0].pk
|
||||||
response = self.client.get("/flagged/", data={"c":pk})
|
response = self.client.get("/flagged/", data={"c":pk})
|
||||||
self.assertTemplateUsed(response, "comments/flagged.html")
|
self.assertTemplateUsed(response, "comments/flagged.html")
|
||||||
|
|
||||||
@ -75,7 +77,7 @@ class DeleteViewTests(CommentTestCase):
|
|||||||
def testDeletePermissions(self):
|
def testDeletePermissions(self):
|
||||||
"""The delete view should only be accessible to 'moderators'"""
|
"""The delete view should only be accessible to 'moderators'"""
|
||||||
comments = self.createSomeComments()
|
comments = self.createSomeComments()
|
||||||
pk = comments[0].pk
|
pk = comments[0].pk
|
||||||
self.client.login(username="normaluser", password="normaluser")
|
self.client.login(username="normaluser", password="normaluser")
|
||||||
response = self.client.get("/delete/%d/" % pk)
|
response = self.client.get("/delete/%d/" % pk)
|
||||||
self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/delete/%d/" % pk)
|
self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/delete/%d/" % pk)
|
||||||
@ -93,7 +95,7 @@ class DeleteViewTests(CommentTestCase):
|
|||||||
response = self.client.post("/delete/%d/" % pk)
|
response = self.client.post("/delete/%d/" % pk)
|
||||||
self.assertEqual(response["Location"], "http://testserver/deleted/?c=%d" % pk)
|
self.assertEqual(response["Location"], "http://testserver/deleted/?c=%d" % pk)
|
||||||
c = Comment.objects.get(pk=pk)
|
c = Comment.objects.get(pk=pk)
|
||||||
self.failUnless(c.is_removed)
|
self.assertTrue(c.is_removed)
|
||||||
self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="normaluser").count(), 1)
|
self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="normaluser").count(), 1)
|
||||||
|
|
||||||
def testDeleteSignals(self):
|
def testDeleteSignals(self):
|
||||||
@ -110,7 +112,7 @@ class DeleteViewTests(CommentTestCase):
|
|||||||
|
|
||||||
def testDeletedView(self):
|
def testDeletedView(self):
|
||||||
comments = self.createSomeComments()
|
comments = self.createSomeComments()
|
||||||
pk = comments[0].pk
|
pk = comments[0].pk
|
||||||
response = self.client.get("/deleted/", data={"c":pk})
|
response = self.client.get("/deleted/", data={"c":pk})
|
||||||
self.assertTemplateUsed(response, "comments/deleted.html")
|
self.assertTemplateUsed(response, "comments/deleted.html")
|
||||||
|
|
||||||
@ -119,7 +121,7 @@ class ApproveViewTests(CommentTestCase):
|
|||||||
def testApprovePermissions(self):
|
def testApprovePermissions(self):
|
||||||
"""The delete view should only be accessible to 'moderators'"""
|
"""The delete view should only be accessible to 'moderators'"""
|
||||||
comments = self.createSomeComments()
|
comments = self.createSomeComments()
|
||||||
pk = comments[0].pk
|
pk = comments[0].pk
|
||||||
self.client.login(username="normaluser", password="normaluser")
|
self.client.login(username="normaluser", password="normaluser")
|
||||||
response = self.client.get("/approve/%d/" % pk)
|
response = self.client.get("/approve/%d/" % pk)
|
||||||
self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/approve/%d/" % pk)
|
self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/approve/%d/" % pk)
|
||||||
@ -138,7 +140,7 @@ class ApproveViewTests(CommentTestCase):
|
|||||||
response = self.client.post("/approve/%d/" % c1.pk)
|
response = self.client.post("/approve/%d/" % c1.pk)
|
||||||
self.assertEqual(response["Location"], "http://testserver/approved/?c=%d" % c1.pk)
|
self.assertEqual(response["Location"], "http://testserver/approved/?c=%d" % c1.pk)
|
||||||
c = Comment.objects.get(pk=c1.pk)
|
c = Comment.objects.get(pk=c1.pk)
|
||||||
self.failUnless(c.is_public)
|
self.assertTrue(c.is_public)
|
||||||
self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="normaluser").count(), 1)
|
self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="normaluser").count(), 1)
|
||||||
|
|
||||||
def testApproveSignals(self):
|
def testApproveSignals(self):
|
||||||
@ -155,21 +157,21 @@ class ApproveViewTests(CommentTestCase):
|
|||||||
|
|
||||||
def testApprovedView(self):
|
def testApprovedView(self):
|
||||||
comments = self.createSomeComments()
|
comments = self.createSomeComments()
|
||||||
pk = comments[0].pk
|
pk = comments[0].pk
|
||||||
response = self.client.get("/approved/", data={"c":pk})
|
response = self.client.get("/approved/", data={"c":pk})
|
||||||
self.assertTemplateUsed(response, "comments/approved.html")
|
self.assertTemplateUsed(response, "comments/approved.html")
|
||||||
|
|
||||||
class AdminActionsTests(CommentTestCase):
|
class AdminActionsTests(CommentTestCase):
|
||||||
urls = "regressiontests.comment_tests.urls_admin"
|
urls = "regressiontests.comment_tests.urls_admin"
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(AdminActionsTests, self).setUp()
|
super(AdminActionsTests, self).setUp()
|
||||||
|
|
||||||
# Make "normaluser" a moderator
|
# Make "normaluser" a moderator
|
||||||
u = User.objects.get(username="normaluser")
|
u = User.objects.get(username="normaluser")
|
||||||
u.is_staff = True
|
u.is_staff = True
|
||||||
perms = Permission.objects.filter(
|
perms = Permission.objects.filter(
|
||||||
content_type__app_label = 'comments',
|
content_type__app_label = 'comments',
|
||||||
codename__endswith = 'comment'
|
codename__endswith = 'comment'
|
||||||
)
|
)
|
||||||
for perm in perms:
|
for perm in perms:
|
||||||
|
@ -7,13 +7,13 @@ import time
|
|||||||
import unittest
|
import unittest
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import SuspiciousOperation
|
from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured
|
||||||
from django.core.files.base import ContentFile, File
|
from django.core.files.base import ContentFile, File
|
||||||
from django.core.files.images import get_image_dimensions
|
from django.core.files.images import get_image_dimensions
|
||||||
from django.core.files.storage import FileSystemStorage, get_storage_class
|
from django.core.files.storage import FileSystemStorage, get_storage_class
|
||||||
from django.core.files.uploadedfile import UploadedFile
|
from django.core.files.uploadedfile import UploadedFile
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import threading
|
import threading
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -81,21 +81,21 @@ class GetStorageClassTests(unittest.TestCase):
|
|||||||
|
|
||||||
class FileStorageTests(unittest.TestCase):
|
class FileStorageTests(unittest.TestCase):
|
||||||
storage_class = FileSystemStorage
|
storage_class = FileSystemStorage
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.temp_dir = tempfile.mktemp()
|
self.temp_dir = tempfile.mktemp()
|
||||||
os.makedirs(self.temp_dir)
|
os.makedirs(self.temp_dir)
|
||||||
self.storage = self.storage_class(location=self.temp_dir,
|
self.storage = self.storage_class(location=self.temp_dir,
|
||||||
base_url='/test_media_url/')
|
base_url='/test_media_url/')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
shutil.rmtree(self.temp_dir)
|
shutil.rmtree(self.temp_dir)
|
||||||
|
|
||||||
def test_file_access_options(self):
|
def test_file_access_options(self):
|
||||||
"""
|
"""
|
||||||
Standard file access options are available, and work as expected.
|
Standard file access options are available, and work as expected.
|
||||||
"""
|
"""
|
||||||
self.failIf(self.storage.exists('storage_test'))
|
self.assertFalse(self.storage.exists('storage_test'))
|
||||||
f = self.storage.open('storage_test', 'w')
|
f = self.storage.open('storage_test', 'w')
|
||||||
f.write('storage contents')
|
f.write('storage contents')
|
||||||
f.close()
|
f.close()
|
||||||
@ -104,16 +104,16 @@ class FileStorageTests(unittest.TestCase):
|
|||||||
f = self.storage.open('storage_test', 'r')
|
f = self.storage.open('storage_test', 'r')
|
||||||
self.assertEqual(f.read(), 'storage contents')
|
self.assertEqual(f.read(), 'storage contents')
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
self.storage.delete('storage_test')
|
self.storage.delete('storage_test')
|
||||||
self.failIf(self.storage.exists('storage_test'))
|
self.assertFalse(self.storage.exists('storage_test'))
|
||||||
|
|
||||||
def test_file_save_without_name(self):
|
def test_file_save_without_name(self):
|
||||||
"""
|
"""
|
||||||
File storage extracts the filename from the content object if no
|
File storage extracts the filename from the content object if no
|
||||||
name is given explicitly.
|
name is given explicitly.
|
||||||
"""
|
"""
|
||||||
self.failIf(self.storage.exists('test.file'))
|
self.assertFalse(self.storage.exists('test.file'))
|
||||||
|
|
||||||
f = ContentFile('custom contents')
|
f = ContentFile('custom contents')
|
||||||
f.name = 'test.file'
|
f.name = 'test.file'
|
||||||
@ -130,7 +130,7 @@ class FileStorageTests(unittest.TestCase):
|
|||||||
"""
|
"""
|
||||||
File storage returns the full path of a file
|
File storage returns the full path of a file
|
||||||
"""
|
"""
|
||||||
self.failIf(self.storage.exists('test.file'))
|
self.assertFalse(self.storage.exists('test.file'))
|
||||||
|
|
||||||
f = ContentFile('custom contents')
|
f = ContentFile('custom contents')
|
||||||
f_name = self.storage.save('test.file', f)
|
f_name = self.storage.save('test.file', f)
|
||||||
@ -155,7 +155,7 @@ class FileStorageTests(unittest.TestCase):
|
|||||||
File storage can get a mixin to extend the functionality of the
|
File storage can get a mixin to extend the functionality of the
|
||||||
returned file.
|
returned file.
|
||||||
"""
|
"""
|
||||||
self.failIf(self.storage.exists('test.file'))
|
self.assertFalse(self.storage.exists('test.file'))
|
||||||
|
|
||||||
class TestFileMixin(object):
|
class TestFileMixin(object):
|
||||||
mixed_in = True
|
mixed_in = True
|
||||||
@ -174,9 +174,9 @@ class FileStorageTests(unittest.TestCase):
|
|||||||
"""
|
"""
|
||||||
File storage returns a tuple containing directories and files.
|
File storage returns a tuple containing directories and files.
|
||||||
"""
|
"""
|
||||||
self.failIf(self.storage.exists('storage_test_1'))
|
self.assertFalse(self.storage.exists('storage_test_1'))
|
||||||
self.failIf(self.storage.exists('storage_test_2'))
|
self.assertFalse(self.storage.exists('storage_test_2'))
|
||||||
self.failIf(self.storage.exists('storage_dir_1'))
|
self.assertFalse(self.storage.exists('storage_dir_1'))
|
||||||
|
|
||||||
f = self.storage.save('storage_test_1', ContentFile('custom content'))
|
f = self.storage.save('storage_test_1', ContentFile('custom content'))
|
||||||
f = self.storage.save('storage_test_2', ContentFile('custom content'))
|
f = self.storage.save('storage_test_2', ContentFile('custom content'))
|
||||||
@ -215,7 +215,7 @@ class CustomStorage(FileSystemStorage):
|
|||||||
|
|
||||||
class CustomStorageTests(FileStorageTests):
|
class CustomStorageTests(FileStorageTests):
|
||||||
storage_class = CustomStorage
|
storage_class = CustomStorage
|
||||||
|
|
||||||
def test_custom_get_available_name(self):
|
def test_custom_get_available_name(self):
|
||||||
first = self.storage.save('custom_storage', ContentFile('custom contents'))
|
first = self.storage.save('custom_storage', ContentFile('custom contents'))
|
||||||
self.assertEqual(first, 'custom_storage')
|
self.assertEqual(first, 'custom_storage')
|
||||||
@ -299,7 +299,7 @@ class FileStoragePathParsing(TestCase):
|
|||||||
self.storage.save('dotted.path/test', ContentFile("1"))
|
self.storage.save('dotted.path/test', ContentFile("1"))
|
||||||
self.storage.save('dotted.path/test', ContentFile("2"))
|
self.storage.save('dotted.path/test', ContentFile("2"))
|
||||||
|
|
||||||
self.failIf(os.path.exists(os.path.join(self.storage_dir, 'dotted_.path')))
|
self.assertFalse(os.path.exists(os.path.join(self.storage_dir, 'dotted_.path')))
|
||||||
self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test')))
|
self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test')))
|
||||||
self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test_1')))
|
self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test_1')))
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#! -*- coding: utf-8 -*-
|
#! -*- coding: utf-8 -*-
|
||||||
import os
|
|
||||||
import errno
|
import errno
|
||||||
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import unittest
|
import unittest
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
@ -15,6 +15,7 @@ from django.http.multipartparser import MultiPartParser
|
|||||||
from models import FileModel, temp_storage, UPLOAD_TO
|
from models import FileModel, temp_storage, UPLOAD_TO
|
||||||
import uploadhandler
|
import uploadhandler
|
||||||
|
|
||||||
|
|
||||||
UNICODE_FILENAME = u'test-0123456789_中文_Orléans.jpg'
|
UNICODE_FILENAME = u'test-0123456789_中文_Orléans.jpg'
|
||||||
|
|
||||||
class FileUploadTests(TestCase):
|
class FileUploadTests(TestCase):
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.contenttypes.generic import generic_inlineformset_factory
|
from django.contrib.contenttypes.generic import generic_inlineformset_factory
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
# local test models
|
# local test models
|
||||||
from models import Episode, EpisodeExtra, EpisodeMaxNum, EpisodeExclude, \
|
from models import Episode, EpisodeExtra, EpisodeMaxNum, EpisodeExclude, \
|
||||||
Media, EpisodePermanent, MediaPermanentInline
|
Media, EpisodePermanent, MediaPermanentInline
|
||||||
|
|
||||||
|
|
||||||
class GenericAdminViewTest(TestCase):
|
class GenericAdminViewTest(TestCase):
|
||||||
fixtures = ['users.xml']
|
fixtures = ['users.xml']
|
||||||
|
|
||||||
@ -41,14 +42,14 @@ class GenericAdminViewTest(TestCase):
|
|||||||
A smoke test to ensure GET on the add_view works.
|
A smoke test to ensure GET on the add_view works.
|
||||||
"""
|
"""
|
||||||
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/add/')
|
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/add/')
|
||||||
self.failUnlessEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
def testBasicEditGet(self):
|
def testBasicEditGet(self):
|
||||||
"""
|
"""
|
||||||
A smoke test to ensure GET on the change_view works.
|
A smoke test to ensure GET on the change_view works.
|
||||||
"""
|
"""
|
||||||
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk)
|
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk)
|
||||||
self.failUnlessEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
def testBasicAddPost(self):
|
def testBasicAddPost(self):
|
||||||
"""
|
"""
|
||||||
@ -62,7 +63,7 @@ class GenericAdminViewTest(TestCase):
|
|||||||
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
|
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
|
||||||
}
|
}
|
||||||
response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/episode/add/', post_data)
|
response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/episode/add/', post_data)
|
||||||
self.failUnlessEqual(response.status_code, 302) # redirect somewhere
|
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||||
|
|
||||||
def testBasicEditPost(self):
|
def testBasicEditPost(self):
|
||||||
"""
|
"""
|
||||||
@ -83,7 +84,7 @@ class GenericAdminViewTest(TestCase):
|
|||||||
}
|
}
|
||||||
url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk
|
url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk
|
||||||
response = self.client.post(url, post_data)
|
response = self.client.post(url, post_data)
|
||||||
self.failUnlessEqual(response.status_code, 302) # redirect somewhere
|
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||||
|
|
||||||
def testGenericInlineFormset(self):
|
def testGenericInlineFormset(self):
|
||||||
EpisodeMediaFormSet = generic_inlineformset_factory(Media, can_delete=False, extra=3)
|
EpisodeMediaFormSet = generic_inlineformset_factory(Media, can_delete=False, extra=3)
|
||||||
@ -118,7 +119,7 @@ class GenericAdminViewTest(TestCase):
|
|||||||
# Regression test for #12340.
|
# Regression test for #12340.
|
||||||
e = Episode.objects.get(name='This Week in Django')
|
e = Episode.objects.get(name='This Week in Django')
|
||||||
formset = inline_formset(instance=e)
|
formset = inline_formset(instance=e)
|
||||||
self.failUnless(formset.get_queryset().ordered)
|
self.assertTrue(formset.get_queryset().ordered)
|
||||||
|
|
||||||
class GenericInlineAdminParametersTest(TestCase):
|
class GenericInlineAdminParametersTest(TestCase):
|
||||||
fixtures = ['users.xml']
|
fixtures = ['users.xml']
|
||||||
@ -178,7 +179,7 @@ class GenericInlineAdminParametersTest(TestCase):
|
|||||||
e = self._create_object(EpisodeExclude)
|
e = self._create_object(EpisodeExclude)
|
||||||
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeexclude/%s/' % e.pk)
|
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeexclude/%s/' % e.pk)
|
||||||
formset = response.context['inline_admin_formsets'][0].formset
|
formset = response.context['inline_admin_formsets'][0].formset
|
||||||
self.failIf('url' in formset.forms[0], 'The formset has excluded "url" field.')
|
self.assertFalse('url' in formset.forms[0], 'The formset has excluded "url" field.')
|
||||||
|
|
||||||
class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
||||||
fixtures = ['users.xml']
|
fixtures = ['users.xml']
|
||||||
@ -200,8 +201,9 @@ class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
|||||||
"generic_inline_admin-phonenumber-content_type-object_id-0-phone_number": "555-555-5555",
|
"generic_inline_admin-phonenumber-content_type-object_id-0-phone_number": "555-555-5555",
|
||||||
}
|
}
|
||||||
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/contact/add/')
|
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/contact/add/')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/contact/add/', post_data)
|
response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/contact/add/', post_data)
|
||||||
self.failUnlessEqual(response.status_code, 302) # redirect somewhere
|
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||||
|
|
||||||
class NoInlineDeletionTest(TestCase):
|
class NoInlineDeletionTest(TestCase):
|
||||||
def test_no_deletion(self):
|
def test_no_deletion(self):
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import copy
|
import copy
|
||||||
import pickle
|
import pickle
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from django.http import QueryDict, HttpResponse, CompatCookie, BadHeaderError
|
from django.http import QueryDict, HttpResponse, CompatCookie, BadHeaderError
|
||||||
|
|
||||||
|
|
||||||
class QueryDictTests(unittest.TestCase):
|
class QueryDictTests(unittest.TestCase):
|
||||||
def test_missing_key(self):
|
def test_missing_key(self):
|
||||||
q = QueryDict('')
|
q = QueryDict('')
|
||||||
@ -17,7 +19,7 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
self.assertRaises(AttributeError, q.pop, 'foo')
|
self.assertRaises(AttributeError, q.pop, 'foo')
|
||||||
self.assertRaises(AttributeError, q.popitem)
|
self.assertRaises(AttributeError, q.popitem)
|
||||||
self.assertRaises(AttributeError, q.clear)
|
self.assertRaises(AttributeError, q.clear)
|
||||||
|
|
||||||
def test_immutable_get_with_default(self):
|
def test_immutable_get_with_default(self):
|
||||||
q = QueryDict('')
|
q = QueryDict('')
|
||||||
self.assertEqual(q.get('foo', 'default'), 'default')
|
self.assertEqual(q.get('foo', 'default'), 'default')
|
||||||
@ -34,7 +36,7 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
self.assertEqual(q.values(), [])
|
self.assertEqual(q.values(), [])
|
||||||
self.assertEqual(len(q), 0)
|
self.assertEqual(len(q), 0)
|
||||||
self.assertEqual(q.urlencode(), '')
|
self.assertEqual(q.urlencode(), '')
|
||||||
|
|
||||||
def test_single_key_value(self):
|
def test_single_key_value(self):
|
||||||
"""Test QueryDict with one key/value pair"""
|
"""Test QueryDict with one key/value pair"""
|
||||||
|
|
||||||
@ -47,14 +49,14 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
self.assertEqual(q.get('bar', 'default'), 'default')
|
self.assertEqual(q.get('bar', 'default'), 'default')
|
||||||
self.assertEqual(q.getlist('foo'), ['bar'])
|
self.assertEqual(q.getlist('foo'), ['bar'])
|
||||||
self.assertEqual(q.getlist('bar'), [])
|
self.assertEqual(q.getlist('bar'), [])
|
||||||
|
|
||||||
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar'])
|
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar'])
|
||||||
self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
|
self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
|
||||||
|
|
||||||
self.failUnless(q.has_key('foo'))
|
self.assertTrue(q.has_key('foo'))
|
||||||
self.failUnless('foo' in q)
|
self.assertTrue('foo' in q)
|
||||||
self.failIf(q.has_key('bar'))
|
self.assertFalse(q.has_key('bar'))
|
||||||
self.failIf('bar' in q)
|
self.assertFalse('bar' in q)
|
||||||
|
|
||||||
self.assertEqual(q.items(), [(u'foo', u'bar')])
|
self.assertEqual(q.items(), [(u'foo', u'bar')])
|
||||||
self.assertEqual(q.lists(), [(u'foo', [u'bar'])])
|
self.assertEqual(q.lists(), [(u'foo', [u'bar'])])
|
||||||
@ -67,21 +69,21 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
self.assertRaises(AttributeError, q.popitem)
|
self.assertRaises(AttributeError, q.popitem)
|
||||||
self.assertRaises(AttributeError, q.clear)
|
self.assertRaises(AttributeError, q.clear)
|
||||||
self.assertRaises(AttributeError, q.setdefault, 'foo', 'bar')
|
self.assertRaises(AttributeError, q.setdefault, 'foo', 'bar')
|
||||||
|
|
||||||
self.assertEqual(q.urlencode(), 'foo=bar')
|
self.assertEqual(q.urlencode(), 'foo=bar')
|
||||||
|
|
||||||
def test_mutable_copy(self):
|
def test_mutable_copy(self):
|
||||||
"""A copy of a QueryDict is mutable."""
|
"""A copy of a QueryDict is mutable."""
|
||||||
q = QueryDict('').copy()
|
q = QueryDict('').copy()
|
||||||
self.assertRaises(KeyError, q.__getitem__, "foo")
|
self.assertRaises(KeyError, q.__getitem__, "foo")
|
||||||
q['name'] = 'john'
|
q['name'] = 'john'
|
||||||
self.assertEqual(q['name'], 'john')
|
self.assertEqual(q['name'], 'john')
|
||||||
|
|
||||||
def test_mutable_delete(self):
|
def test_mutable_delete(self):
|
||||||
q = QueryDict('').copy()
|
q = QueryDict('').copy()
|
||||||
q['name'] = 'john'
|
q['name'] = 'john'
|
||||||
del q['name']
|
del q['name']
|
||||||
self.failIf('name' in q)
|
self.assertFalse('name' in q)
|
||||||
|
|
||||||
def test_basic_mutable_operations(self):
|
def test_basic_mutable_operations(self):
|
||||||
q = QueryDict('').copy()
|
q = QueryDict('').copy()
|
||||||
@ -98,8 +100,8 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
q.appendlist('foo', 'another')
|
q.appendlist('foo', 'another')
|
||||||
self.assertEqual(q.getlist('foo'), ['bar', 'baz', 'another'])
|
self.assertEqual(q.getlist('foo'), ['bar', 'baz', 'another'])
|
||||||
self.assertEqual(q['foo'], 'another')
|
self.assertEqual(q['foo'], 'another')
|
||||||
self.failUnless(q.has_key('foo'))
|
self.assertTrue(q.has_key('foo'))
|
||||||
self.failUnless('foo' in q)
|
self.assertTrue('foo' in q)
|
||||||
|
|
||||||
self.assertEqual(q.items(), [(u'foo', u'another'), (u'name', u'john')])
|
self.assertEqual(q.items(), [(u'foo', u'another'), (u'name', u'john')])
|
||||||
self.assertEqual(q.lists(), [(u'foo', [u'bar', u'baz', u'another']), (u'name', [u'john'])])
|
self.assertEqual(q.lists(), [(u'foo', [u'bar', u'baz', u'another']), (u'name', [u'john'])])
|
||||||
@ -126,20 +128,20 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
"""Test QueryDict with two key/value pairs with same keys."""
|
"""Test QueryDict with two key/value pairs with same keys."""
|
||||||
|
|
||||||
q = QueryDict('vote=yes&vote=no')
|
q = QueryDict('vote=yes&vote=no')
|
||||||
|
|
||||||
self.assertEqual(q['vote'], u'no')
|
self.assertEqual(q['vote'], u'no')
|
||||||
self.assertRaises(AttributeError, q.__setitem__, 'something', 'bar')
|
self.assertRaises(AttributeError, q.__setitem__, 'something', 'bar')
|
||||||
|
|
||||||
self.assertEqual(q.get('vote', 'default'), u'no')
|
self.assertEqual(q.get('vote', 'default'), u'no')
|
||||||
self.assertEqual(q.get('foo', 'default'), 'default')
|
self.assertEqual(q.get('foo', 'default'), 'default')
|
||||||
self.assertEqual(q.getlist('vote'), [u'yes', u'no'])
|
self.assertEqual(q.getlist('vote'), [u'yes', u'no'])
|
||||||
self.assertEqual(q.getlist('foo'), [])
|
self.assertEqual(q.getlist('foo'), [])
|
||||||
|
|
||||||
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
|
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
|
||||||
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
|
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
|
||||||
self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
|
self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
|
||||||
|
|
||||||
self.assertEqual(q.has_key('vote'), True)
|
self.assertEqual(q.has_key('vote'), True)
|
||||||
self.assertEqual('vote' in q, True)
|
self.assertEqual('vote' in q, True)
|
||||||
self.assertEqual(q.has_key('foo'), False)
|
self.assertEqual(q.has_key('foo'), False)
|
||||||
self.assertEqual('foo' in q, False)
|
self.assertEqual('foo' in q, False)
|
||||||
@ -148,23 +150,23 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
self.assertEqual(q.keys(), [u'vote'])
|
self.assertEqual(q.keys(), [u'vote'])
|
||||||
self.assertEqual(q.values(), [u'no'])
|
self.assertEqual(q.values(), [u'no'])
|
||||||
self.assertEqual(len(q), 1)
|
self.assertEqual(len(q), 1)
|
||||||
|
|
||||||
self.assertRaises(AttributeError, q.update, {'foo': 'bar'})
|
self.assertRaises(AttributeError, q.update, {'foo': 'bar'})
|
||||||
self.assertRaises(AttributeError, q.pop, 'foo')
|
self.assertRaises(AttributeError, q.pop, 'foo')
|
||||||
self.assertRaises(AttributeError, q.popitem)
|
self.assertRaises(AttributeError, q.popitem)
|
||||||
self.assertRaises(AttributeError, q.clear)
|
self.assertRaises(AttributeError, q.clear)
|
||||||
self.assertRaises(AttributeError, q.setdefault, 'foo', 'bar')
|
self.assertRaises(AttributeError, q.setdefault, 'foo', 'bar')
|
||||||
self.assertRaises(AttributeError, q.__delitem__, 'vote')
|
self.assertRaises(AttributeError, q.__delitem__, 'vote')
|
||||||
|
|
||||||
def test_invalid_input_encoding(self):
|
def test_invalid_input_encoding(self):
|
||||||
"""
|
"""
|
||||||
QueryDicts must be able to handle invalid input encoding (in this
|
QueryDicts must be able to handle invalid input encoding (in this
|
||||||
case, bad UTF-8 encoding).
|
case, bad UTF-8 encoding).
|
||||||
"""
|
"""
|
||||||
q = QueryDict('foo=bar&foo=\xff')
|
q = QueryDict('foo=bar&foo=\xff')
|
||||||
self.assertEqual(q['foo'], u'\ufffd')
|
self.assertEqual(q['foo'], u'\ufffd')
|
||||||
self.assertEqual(q.getlist('foo'), [u'bar', u'\ufffd'])
|
self.assertEqual(q.getlist('foo'), [u'bar', u'\ufffd'])
|
||||||
|
|
||||||
def test_pickle(self):
|
def test_pickle(self):
|
||||||
q = QueryDict('')
|
q = QueryDict('')
|
||||||
q1 = pickle.loads(pickle.dumps(q, 2))
|
q1 = pickle.loads(pickle.dumps(q, 2))
|
||||||
@ -172,7 +174,7 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
q = QueryDict('a=b&c=d')
|
q = QueryDict('a=b&c=d')
|
||||||
q1 = pickle.loads(pickle.dumps(q, 2))
|
q1 = pickle.loads(pickle.dumps(q, 2))
|
||||||
self.assertEqual(q == q1, True)
|
self.assertEqual(q == q1, True)
|
||||||
q = QueryDict('a=b&c=d&a=1')
|
q = QueryDict('a=b&c=d&a=1')
|
||||||
q1 = pickle.loads(pickle.dumps(q, 2))
|
q1 = pickle.loads(pickle.dumps(q, 2))
|
||||||
self.assertEqual(q == q1 , True)
|
self.assertEqual(q == q1 , True)
|
||||||
|
|
||||||
@ -181,32 +183,31 @@ class QueryDictTests(unittest.TestCase):
|
|||||||
x = QueryDict("a=1&a=2", mutable=True)
|
x = QueryDict("a=1&a=2", mutable=True)
|
||||||
y = QueryDict("a=3&a=4")
|
y = QueryDict("a=3&a=4")
|
||||||
x.update(y)
|
x.update(y)
|
||||||
self.assertEqual(x.getlist('a'), [u'1', u'2', u'3', u'4'])
|
self.assertEqual(x.getlist('a'), [u'1', u'2', u'3', u'4'])
|
||||||
|
|
||||||
def test_non_default_encoding(self):
|
def test_non_default_encoding(self):
|
||||||
"""#13572 - QueryDict with a non-default encoding"""
|
"""#13572 - QueryDict with a non-default encoding"""
|
||||||
q = QueryDict('sbb=one', encoding='rot_13')
|
q = QueryDict('sbb=one', encoding='rot_13')
|
||||||
self.assertEqual(q.encoding , 'rot_13' )
|
self.assertEqual(q.encoding , 'rot_13' )
|
||||||
self.assertEqual(q.items() , [(u'foo', u'bar')] )
|
self.assertEqual(q.items() , [(u'foo', u'bar')] )
|
||||||
self.assertEqual(q.urlencode() , 'sbb=one' )
|
self.assertEqual(q.urlencode() , 'sbb=one' )
|
||||||
q = q.copy()
|
q = q.copy()
|
||||||
self.assertEqual(q.encoding , 'rot_13' )
|
self.assertEqual(q.encoding , 'rot_13' )
|
||||||
self.assertEqual(q.items() , [(u'foo', u'bar')] )
|
self.assertEqual(q.items() , [(u'foo', u'bar')] )
|
||||||
self.assertEqual(q.urlencode() , 'sbb=one' )
|
self.assertEqual(q.urlencode() , 'sbb=one' )
|
||||||
self.assertEqual(copy.copy(q).encoding , 'rot_13' )
|
self.assertEqual(copy.copy(q).encoding , 'rot_13' )
|
||||||
self.assertEqual(copy.deepcopy(q).encoding , 'rot_13')
|
self.assertEqual(copy.deepcopy(q).encoding , 'rot_13')
|
||||||
|
|
||||||
class HttpResponseTests(unittest.TestCase):
|
class HttpResponseTests(unittest.TestCase):
|
||||||
def test_unicode_headers(self):
|
def test_unicode_headers(self):
|
||||||
r = HttpResponse()
|
r = HttpResponse()
|
||||||
|
|
||||||
# If we insert a unicode value it will be converted to an ascii
|
# If we insert a unicode value it will be converted to an ascii
|
||||||
r['value'] = u'test value'
|
r['value'] = u'test value'
|
||||||
self.failUnless(isinstance(r['value'], str))
|
self.assertTrue(isinstance(r['value'], str))
|
||||||
|
|
||||||
# An error is raised ~hen a unicode object with non-ascii is assigned.
|
# An error is raised ~hen a unicode object with non-ascii is assigned.
|
||||||
self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', u't\xebst value')
|
self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', u't\xebst value')
|
||||||
|
|
||||||
# An error is raised when a unicode object with non-ASCII format is
|
# An error is raised when a unicode object with non-ASCII format is
|
||||||
# passed as initial mimetype or content_type.
|
# passed as initial mimetype or content_type.
|
||||||
self.assertRaises(UnicodeEncodeError, HttpResponse,
|
self.assertRaises(UnicodeEncodeError, HttpResponse,
|
||||||
@ -216,12 +217,12 @@ class HttpResponseTests(unittest.TestCase):
|
|||||||
self.assertRaises(UnicodeEncodeError, HttpResponse,
|
self.assertRaises(UnicodeEncodeError, HttpResponse,
|
||||||
content_type=u't\xebst value')
|
content_type=u't\xebst value')
|
||||||
|
|
||||||
# The response also converts unicode keys to strings.)
|
# The response also converts unicode keys to strings.)
|
||||||
r[u'test'] = 'testing key'
|
r[u'test'] = 'testing key'
|
||||||
l = list(r.items())
|
l = list(r.items())
|
||||||
l.sort()
|
l.sort()
|
||||||
self.assertEqual(l[1], ('test', 'testing key'))
|
self.assertEqual(l[1], ('test', 'testing key'))
|
||||||
|
|
||||||
# It will also raise errors for keys with non-ascii data.
|
# It will also raise errors for keys with non-ascii data.
|
||||||
self.assertRaises(UnicodeEncodeError, r.__setitem__, u't\xebst key', 'value')
|
self.assertRaises(UnicodeEncodeError, r.__setitem__, u't\xebst key', 'value')
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from django.test import TestCase
|
|
||||||
from django.forms.models import inlineformset_factory
|
from django.forms.models import inlineformset_factory
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
from regressiontests.inline_formsets.models import Poet, Poem, School, Parent, Child
|
from regressiontests.inline_formsets.models import Poet, Poem, School, Parent, Child
|
||||||
|
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ class DeletionTests(TestCase):
|
|||||||
}
|
}
|
||||||
formset = PoemFormSet(data, instance=poet)
|
formset = PoemFormSet(data, instance=poet)
|
||||||
formset.save()
|
formset.save()
|
||||||
self.failUnless(formset.is_valid())
|
self.assertTrue(formset.is_valid())
|
||||||
self.assertEqual(Poem.objects.count(), 0)
|
self.assertEqual(Poem.objects.count(), 0)
|
||||||
|
|
||||||
def test_add_form_deletion_when_invalid(self):
|
def test_add_form_deletion_when_invalid(self):
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.conf import settings
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.middleware.common import CommonMiddleware
|
from django.middleware.common import CommonMiddleware
|
||||||
from django.conf import settings
|
from django.test import TestCase
|
||||||
|
|
||||||
|
|
||||||
class CommonMiddlewareTest(TestCase):
|
class CommonMiddlewareTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -74,7 +75,7 @@ class CommonMiddlewareTest(TestCase):
|
|||||||
try:
|
try:
|
||||||
CommonMiddleware().process_request(request)
|
CommonMiddleware().process_request(request)
|
||||||
except RuntimeError, e:
|
except RuntimeError, e:
|
||||||
self.failUnless('end in a slash' in str(e))
|
self.assertTrue('end in a slash' in str(e))
|
||||||
settings.DEBUG = False
|
settings.DEBUG = False
|
||||||
|
|
||||||
def test_append_slash_disabled(self):
|
def test_append_slash_disabled(self):
|
||||||
@ -125,7 +126,7 @@ class CommonMiddlewareTest(TestCase):
|
|||||||
self.assertEquals(r.status_code, 301)
|
self.assertEquals(r.status_code, 301)
|
||||||
self.assertEquals(r['Location'],
|
self.assertEquals(r['Location'],
|
||||||
'http://www.testserver/middleware/slash/')
|
'http://www.testserver/middleware/slash/')
|
||||||
|
|
||||||
|
|
||||||
# The following tests examine expected behavior given a custom urlconf that
|
# The following tests examine expected behavior given a custom urlconf that
|
||||||
# overrides the default one through the request object.
|
# overrides the default one through the request object.
|
||||||
@ -165,7 +166,7 @@ class CommonMiddlewareTest(TestCase):
|
|||||||
request = self._get_request('customurlconf/slash')
|
request = self._get_request('customurlconf/slash')
|
||||||
request.urlconf = 'regressiontests.middleware.extra_urls'
|
request.urlconf = 'regressiontests.middleware.extra_urls'
|
||||||
r = CommonMiddleware().process_request(request)
|
r = CommonMiddleware().process_request(request)
|
||||||
self.failIf(r is None,
|
self.assertFalse(r is None,
|
||||||
"CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
|
"CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
|
||||||
self.assertEquals(r.status_code, 301)
|
self.assertEquals(r.status_code, 301)
|
||||||
self.assertEquals(r['Location'], 'http://testserver/middleware/customurlconf/slash/')
|
self.assertEquals(r['Location'], 'http://testserver/middleware/customurlconf/slash/')
|
||||||
@ -188,7 +189,7 @@ class CommonMiddlewareTest(TestCase):
|
|||||||
try:
|
try:
|
||||||
CommonMiddleware().process_request(request)
|
CommonMiddleware().process_request(request)
|
||||||
except RuntimeError, e:
|
except RuntimeError, e:
|
||||||
self.failUnless('end in a slash' in str(e))
|
self.assertTrue('end in a slash' in str(e))
|
||||||
settings.DEBUG = False
|
settings.DEBUG = False
|
||||||
|
|
||||||
def test_append_slash_disabled_custom_urlconf(self):
|
def test_append_slash_disabled_custom_urlconf(self):
|
||||||
@ -209,7 +210,7 @@ class CommonMiddlewareTest(TestCase):
|
|||||||
request = self._get_request('customurlconf/needsquoting#')
|
request = self._get_request('customurlconf/needsquoting#')
|
||||||
request.urlconf = 'regressiontests.middleware.extra_urls'
|
request.urlconf = 'regressiontests.middleware.extra_urls'
|
||||||
r = CommonMiddleware().process_request(request)
|
r = CommonMiddleware().process_request(request)
|
||||||
self.failIf(r is None,
|
self.assertFalse(r is None,
|
||||||
"CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
|
"CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
|
||||||
self.assertEquals(r.status_code, 301)
|
self.assertEquals(r.status_code, 301)
|
||||||
self.assertEquals(
|
self.assertEquals(
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
from django import db
|
from django import db, forms
|
||||||
from django import forms
|
|
||||||
from django.forms.models import modelform_factory, ModelChoiceField
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.forms.models import modelform_factory, ModelChoiceField
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from models import Person, RealPerson, Triple, FilePathModel, Article, \
|
from models import Person, RealPerson, Triple, FilePathModel, Article, \
|
||||||
@ -47,10 +46,10 @@ class UniqueTogetherTests(TestCase):
|
|||||||
Triple.objects.create(left=1, middle=2, right=3)
|
Triple.objects.create(left=1, middle=2, right=3)
|
||||||
|
|
||||||
form = TripleForm({'left': '1', 'middle': '2', 'right': '3'})
|
form = TripleForm({'left': '1', 'middle': '2', 'right': '3'})
|
||||||
self.failIf(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
|
|
||||||
form = TripleForm({'left': '1', 'middle': '3', 'right': '1'})
|
form = TripleForm({'left': '1', 'middle': '3', 'right': '1'})
|
||||||
self.failUnless(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
|
|
||||||
class TripleFormWithCleanOverride(forms.ModelForm):
|
class TripleFormWithCleanOverride(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -68,7 +67,7 @@ class OverrideCleanTests(TestCase):
|
|||||||
optional.
|
optional.
|
||||||
"""
|
"""
|
||||||
form = TripleFormWithCleanOverride({'left': 1, 'middle': 2, 'right': 1})
|
form = TripleFormWithCleanOverride({'left': 1, 'middle': 2, 'right': 1})
|
||||||
self.failUnless(form.is_valid())
|
self.assertTrue(form.is_valid())
|
||||||
# form.instance.left will be None if the instance was not constructed
|
# form.instance.left will be None if the instance was not constructed
|
||||||
# by form.full_clean().
|
# by form.full_clean().
|
||||||
self.assertEquals(form.instance.left, 1)
|
self.assertEquals(form.instance.left, 1)
|
||||||
@ -293,4 +292,3 @@ class FormFieldCallbackTests(TestCase):
|
|||||||
# A bad callback provided by user still gives an error
|
# A bad callback provided by user still gives an error
|
||||||
self.assertRaises(TypeError, modelform_factory, Person,
|
self.assertRaises(TypeError, modelform_factory, Person,
|
||||||
formfield_callback='not a function or callable')
|
formfield_callback='not a function or callable')
|
||||||
|
|
||||||
|
@ -3,15 +3,16 @@
|
|||||||
Regression tests for the Test Client, especially the customized assertions.
|
Regression tests for the Test Client, especially the customized assertions.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from django.test import Client, TestCase
|
from django.conf import settings
|
||||||
from django.test.utils import ContextList
|
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.core.exceptions import SuspiciousOperation
|
from django.core.exceptions import SuspiciousOperation
|
||||||
from django.template import TemplateDoesNotExist, TemplateSyntaxError, Context
|
from django.core.urlresolvers import reverse
|
||||||
from django.template import loader
|
from django.template import (TemplateDoesNotExist, TemplateSyntaxError,
|
||||||
|
Context, loader)
|
||||||
|
from django.test import TestCase, Client
|
||||||
from django.test.client import encode_file
|
from django.test.client import encode_file
|
||||||
|
from django.test.utils import ContextList
|
||||||
|
|
||||||
|
|
||||||
class AssertContainsTests(TestCase):
|
class AssertContainsTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -484,7 +485,7 @@ class LoginTests(TestCase):
|
|||||||
# Create a second client, and log in.
|
# Create a second client, and log in.
|
||||||
c = Client()
|
c = Client()
|
||||||
login = c.login(username='testclient', password='password')
|
login = c.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Get a redirection page with the second client.
|
# Get a redirection page with the second client.
|
||||||
response = c.get("/test_client_regress/login_protected_redirect_view/")
|
response = c.get("/test_client_regress/login_protected_redirect_view/")
|
||||||
@ -508,7 +509,7 @@ class SessionEngineTests(TestCase):
|
|||||||
def test_login(self):
|
def test_login(self):
|
||||||
"A session engine that modifies the session key can be used to log in"
|
"A session engine that modifies the session key can be used to log in"
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Try to access a login protected page.
|
# Try to access a login protected page.
|
||||||
response = self.client.get("/test_client/login_protected_view/")
|
response = self.client.get("/test_client/login_protected_view/")
|
||||||
@ -547,7 +548,7 @@ class ExceptionTests(TestCase):
|
|||||||
"#5836 - A stale user exception isn't re-raised by the test client."
|
"#5836 - A stale user exception isn't re-raised by the test client."
|
||||||
|
|
||||||
login = self.client.login(username='testclient',password='password')
|
login = self.client.login(username='testclient',password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
try:
|
try:
|
||||||
response = self.client.get("/test_client_regress/staff_only/")
|
response = self.client.get("/test_client_regress/staff_only/")
|
||||||
self.fail("General users should not be able to visit this page")
|
self.fail("General users should not be able to visit this page")
|
||||||
@ -558,7 +559,7 @@ class ExceptionTests(TestCase):
|
|||||||
|
|
||||||
# This next operation should be successful; if it isn't we have a problem.
|
# This next operation should be successful; if it isn't we have a problem.
|
||||||
login = self.client.login(username='staff', password='password')
|
login = self.client.login(username='staff', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
try:
|
try:
|
||||||
self.client.get("/test_client_regress/staff_only/")
|
self.client.get("/test_client_regress/staff_only/")
|
||||||
except SuspiciousOperation:
|
except SuspiciousOperation:
|
||||||
@ -670,7 +671,7 @@ class SessionTests(TestCase):
|
|||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
login = self.client.login(username='testclient',password='password')
|
login = self.client.login(username='testclient',password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
|
|
||||||
# Session should still contain the modified value
|
# Session should still contain the modified value
|
||||||
response = self.client.get('/test_client_regress/check_session/')
|
response = self.client.get('/test_client_regress/check_session/')
|
||||||
@ -681,7 +682,7 @@ class SessionTests(TestCase):
|
|||||||
"""Logout should work whether the user is logged in or not (#9978)."""
|
"""Logout should work whether the user is logged in or not (#9978)."""
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
login = self.client.login(username='testclient',password='password')
|
login = self.client.login(username='testclient',password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@ class DebugViewTests(TestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.old_debug = settings.DEBUG
|
self.old_debug = settings.DEBUG
|
||||||
settings.DEBUG = True
|
settings.DEBUG = True
|
||||||
self.old_template_debug = settings.TEMPLATE_DEBUG
|
self.old_template_debug = settings.TEMPLATE_DEBUG
|
||||||
settings.TEMPLATE_DEBUG = True
|
settings.TEMPLATE_DEBUG = True
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
settings.DEBUG = self.old_debug
|
settings.DEBUG = self.old_debug
|
||||||
@ -27,8 +27,8 @@ class DebugViewTests(TestCase):
|
|||||||
'file_data.txt': SimpleUploadedFile('file_data.txt', 'haha'),
|
'file_data.txt': SimpleUploadedFile('file_data.txt', 'haha'),
|
||||||
}
|
}
|
||||||
response = self.client.post('/views/raises/', data)
|
response = self.client.post('/views/raises/', data)
|
||||||
self.failUnless('file_data.txt' in response.content)
|
self.assertTrue('file_data.txt' in response.content)
|
||||||
self.failIf('haha' in response.content)
|
self.assertFalse('haha' in response.content)
|
||||||
|
|
||||||
def test_404(self):
|
def test_404(self):
|
||||||
response = self.client.get('/views/raises404/')
|
response = self.client.get('/views/raises404/')
|
||||||
@ -45,7 +45,6 @@ class DebugViewTests(TestCase):
|
|||||||
self.client.get(reverse('template_exception', args=(n,)))
|
self.client.get(reverse('template_exception', args=(n,)))
|
||||||
except TemplateSyntaxError, e:
|
except TemplateSyntaxError, e:
|
||||||
raising_loc = inspect.trace()[-1][-2][0].strip()
|
raising_loc = inspect.trace()[-1][-2][0].strip()
|
||||||
self.failIf(raising_loc.find('raise BrokenException') == -1,
|
self.assertFalse(raising_loc.find('raise BrokenException') == -1,
|
||||||
"Failed to find 'raise BrokenException' in last frame of traceback, instead found: %s" %
|
"Failed to find 'raise BrokenException' in last frame of traceback, instead found: %s" %
|
||||||
raising_loc)
|
raising_loc)
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class CreateObjectTest(TestCase):
|
|||||||
self.assertRedirects(response, '/accounts/login/?next=%s' % view_url)
|
self.assertRedirects(response, '/accounts/login/?next=%s' % view_url)
|
||||||
# Now login and try again.
|
# Now login and try again.
|
||||||
login = self.client.login(username='testclient', password='password')
|
login = self.client.login(username='testclient', password='password')
|
||||||
self.failUnless(login, 'Could not log in')
|
self.assertTrue(login, 'Could not log in')
|
||||||
response = self.client.get(view_url)
|
response = self.client.get(view_url)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertTemplateUsed(response, 'views/article_form.html')
|
self.assertTemplateUsed(response, 'views/article_form.html')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user