diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2007-09-05 20:01:24 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2007-09-05 20:01:24 +0000 |
| commit | 976acdc7743180993dc8257f5d256206857e8160 (patch) | |
| tree | de6c056010fac0e747043b34dcfdb5f4b7510d6d /tests | |
| parent | bd01c6ee5703f8efec06f65374c7961458de6ea6 (diff) | |
newforms-admin: Merged to [6050]
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@6051 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/test_client/models.py | 14 | ||||
| -rw-r--r-- | tests/modeltests/test_client/views.py | 52 | ||||
| -rw-r--r-- | tests/regressiontests/defaultfilters/tests.py | 19 | ||||
| -rw-r--r-- | tests/regressiontests/test_client_regress/fixtures/testdata.json | 20 | ||||
| -rw-r--r-- | tests/regressiontests/test_client_regress/models.py | 54 | ||||
| -rw-r--r-- | tests/regressiontests/test_client_regress/urls.py | 2 | ||||
| -rw-r--r-- | tests/regressiontests/test_client_regress/views.py | 12 |
7 files changed, 143 insertions, 30 deletions
diff --git a/tests/modeltests/test_client/models.py b/tests/modeltests/test_client/models.py index e1f3987847..2bc1dfe02b 100644 --- a/tests/modeltests/test_client/models.py +++ b/tests/modeltests/test_client/models.py @@ -86,6 +86,13 @@ class ClientTest(TestCase): # Check that the response was a 302 (redirect) self.assertRedirects(response, '/test_client/get_view/') + + def test_redirect_with_query(self): + "GET a URL that redirects with given GET parameters" + response = self.client.get('/test_client/redirect_view/', {'var': 'value'}) + + # Check if parameters are intact + self.assertRedirects(response, '/test_client/get_view/?var=value') def test_permanent_redirect(self): "GET a URL that redirects permanently elsewhere" @@ -224,10 +231,11 @@ class ClientTest(TestCase): # Get the page without logging in. Should result in 302. response = self.client.get('/test_client/login_protected_view/') - self.assertRedirects(response, '/accounts/login/') + self.assertRedirects(response, '/accounts/login/?next=/test_client/login_protected_view/') # Log in - self.client.login(username='testclient', password='password') + login = self.client.login(username='testclient', password='password') + self.assertTrue(login, 'Could not log in') # Request a page that requires a login response = self.client.get('/test_client/login_protected_view/') @@ -261,7 +269,7 @@ class ClientTest(TestCase): # Request a page that requires a login response = self.client.get('/test_client/login_protected_view/') - self.assertRedirects(response, '/accounts/login/') + self.assertRedirects(response, '/accounts/login/?next=/test_client/login_protected_view/') def test_session_modifying_view(self): "Request a page that modifies the session" diff --git a/tests/modeltests/test_client/views.py b/tests/modeltests/test_client/views.py index 81b4a2f283..e2a9081fb2 100644 --- a/tests/modeltests/test_client/views.py +++ b/tests/modeltests/test_client/views.py @@ -1,4 +1,5 @@ from xml.dom.minidom import parseString + from django.core.mail import EmailMessage, SMTPConnection from django.template import Context, Template from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound @@ -11,7 +12,7 @@ def get_view(request): "A simple view that expects a GET request, and returns a rendered template" t = Template('This is a test. {{ var }} is the value.', name='GET Template') c = Context({'var': request.GET.get('var', 42)}) - + return HttpResponse(t.render(c)) def post_view(request): @@ -28,9 +29,9 @@ def post_view(request): else: t = Template('Viewing GET page.', name='Empty GET Template') c = Context() - + return HttpResponse(t.render(c)) - + def raw_post_view(request): """A view which expects raw XML to be posted and returns content extracted from the XML""" @@ -48,7 +49,12 @@ def raw_post_view(request): def redirect_view(request): "A view that redirects all requests to the GET view" - return HttpResponseRedirect('/test_client/get_view/') + if request.GET: + from urllib import urlencode + query = '?' + urlencode(request.GET, True) + else: + query = '' + return HttpResponseRedirect('/test_client/get_view/' + query) def double_redirect_view(request): "A view that redirects all requests to a redirection view" @@ -72,7 +78,7 @@ class TestForm(Form): value = fields.IntegerField() single = fields.ChoiceField(choices=TestChoices) multi = fields.MultipleChoiceField(choices=TestChoices) - + def form_view(request): "A view that tests a simple form" if request.method == 'POST': @@ -87,7 +93,7 @@ def form_view(request): form = TestForm(request.GET) t = Template('Viewing base form. {{ form }}.', name='Form GET Template') c = Context({'form': form}) - + return HttpResponse(t.render(c)) def form_view_with_template(request): @@ -101,26 +107,26 @@ def form_view_with_template(request): else: form = TestForm() message = 'GET form page' - return render_to_response('form_view.html', - { + return render_to_response('form_view.html', + { 'form': form, 'message': message } ) - + def login_protected_view(request): "A simple view that is login protected." t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template') c = Context({'user': request.user}) - + return HttpResponse(t.render(c)) login_protected_view = login_required(login_protected_view) def session_view(request): "A view that modifies the session" request.session['tobacconist'] = 'hovercraft' - - t = Template('This is a view that modifies the session.', + + t = Template('This is a view that modifies the session.', name='Session Modifying View Template') c = Context() return HttpResponse(t.render(c)) @@ -131,25 +137,25 @@ def broken_view(request): def mail_sending_view(request): EmailMessage( - "Test message", - "This is a test email", - "from@example.com", + "Test message", + "This is a test email", + "from@example.com", ['first@example.com', 'second@example.com']).send() return HttpResponse("Mail sent") def mass_mail_sending_view(request): m1 = EmailMessage( - 'First Test message', - 'This is the first test email', - 'from@example.com', + 'First Test message', + 'This is the first test email', + 'from@example.com', ['first@example.com', 'second@example.com']) m2 = EmailMessage( - 'Second Test message', - 'This is the second test email', - 'from@example.com', + 'Second Test message', + 'This is the second test email', + 'from@example.com', ['second@example.com', 'third@example.com']) - + c = SMTPConnection() c.send_messages([m1,m2]) - + return HttpResponse("Mail sent") diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index a1efae66f6..9482f1cc9f 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -266,6 +266,22 @@ u'bc' >>> slice_(u'abcdefg', u'0::2') u'aceg' +>>> unordered_list([u'item 1', u'item 2']) +u'\t<li>item 1</li>\n\t<li>item 2</li>' + +>>> unordered_list([u'item 1', [u'item 1.1']]) +u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>' + +>>> unordered_list([u'item 1', [u'item 1.1', u'item1.2'], u'item 2']) +u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item1.2</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>' + +>>> unordered_list([u'item 1', [u'item 1.1', [u'item 1.1.1', [u'item 1.1.1.1']]]]) +u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1\n\t\t<ul>\n\t\t\t<li>item 1.1.1\n\t\t\t<ul>\n\t\t\t\t<li>item 1.1.1.1</li>\n\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>' + +>>> unordered_list(['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]) +u'\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>' + +# Old format for unordered lists should still work >>> unordered_list([u'item 1', []]) u'\t<li>item 1</li>' @@ -275,6 +291,9 @@ u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>' >>> unordered_list([u'item 1', [[u'item 1.1', []], [u'item 1.2', []]]]) u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>' +>>> unordered_list(['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]) +u'\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>' + >>> add(u'1', u'2') 3 diff --git a/tests/regressiontests/test_client_regress/fixtures/testdata.json b/tests/regressiontests/test_client_regress/fixtures/testdata.json new file mode 100644 index 0000000000..5c9e415240 --- /dev/null +++ b/tests/regressiontests/test_client_regress/fixtures/testdata.json @@ -0,0 +1,20 @@ +[ + { + "pk": "1", + "model": "auth.user", + "fields": { + "username": "testclient", + "first_name": "Test", + "last_name": "Client", + "is_active": true, + "is_superuser": false, + "is_staff": false, + "last_login": "2006-12-17 07:03:31", + "groups": [], + "user_permissions": [], + "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161", + "email": "testclient@example.com", + "date_joined": "2006-12-17 07:03:31" + } + } +]
\ No newline at end of file diff --git a/tests/regressiontests/test_client_regress/models.py b/tests/regressiontests/test_client_regress/models.py index e17770cd03..a15e4f15ec 100644 --- a/tests/regressiontests/test_client_regress/models.py +++ b/tests/regressiontests/test_client_regress/models.py @@ -75,7 +75,7 @@ class AssertTemplateUsedTests(TestCase): try: self.assertTemplateUsed(response, 'Empty POST Template') except AssertionError, e: - self.assertEquals(str(e), "Template 'Empty POST Template' was not used to render the response. Actual template was 'Empty GET Template'") + self.assertEquals(str(e), "Template 'Empty POST Template' was not a template used to render the response. Actual template(s) used: Empty GET Template") def test_multiple_context(self): "Template assertions work when there are multiple contexts" @@ -101,7 +101,7 @@ class AssertTemplateUsedTests(TestCase): try: self.assertTemplateUsed(response, "Valid POST Template") except AssertionError, e: - self.assertEquals(str(e), "Template 'Valid POST Template' was not one of the templates used to render the response. Templates used: form_view.html, base.html") + self.assertEquals(str(e), "Template 'Valid POST Template' was not a template used to render the response. Actual template(s) used: form_view.html, base.html") class AssertRedirectsTests(TestCase): def test_redirect_page(self): @@ -112,6 +112,14 @@ class AssertRedirectsTests(TestCase): self.assertRedirects(response, '/test_client/get_view/') except AssertionError, e: self.assertEquals(str(e), "Response didn't redirect as expected: Response code was 301 (expected 302)") + + def test_lost_query(self): + "An assertion is raised if the redirect location doesn't preserve GET parameters" + response = self.client.get('/test_client/redirect_view/', {'var': 'value'}) + try: + self.assertRedirects(response, '/test_client/get_view/') + except AssertionError, e: + self.assertEquals(str(e), "Response redirected to '/test_client/get_view/?var=value', expected '/test_client/get_view/'") def test_incorrect_target(self): "An assertion is raised if the response redirects to another target" @@ -203,8 +211,29 @@ class AssertFormErrorTests(TestCase): self.assertFormError(response, 'form', 'email', 'Some error.') except AssertionError, e: self.assertEqual(str(e), "The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [u'Enter a valid e-mail address.'])") + + def test_unknown_nonfield_error(self): + """ + Checks that an assertion is raised if the form's non field errors + doesn't contain the provided error. + """ + post_data = { + 'text': 'Hello World', + 'email': 'not an email address', + 'value': 37, + 'single': 'b', + 'multi': ('b','c','e') + } + response = self.client.post('/test_client/form_view/', post_data) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, "Invalid POST Template") + + try: + self.assertFormError(response, 'form', None, 'Some error.') + except AssertionError, e: + self.assertEqual(str(e), "The form 'form' in context 0 does not contain the non-field error 'Some error.' (actual errors: )") -class AssertFileUploadTests(TestCase): +class FileUploadTests(TestCase): def test_simple_upload(self): fd = open(os.path.join(os.path.dirname(__file__), "views.py")) post_data = { @@ -213,3 +242,22 @@ class AssertFileUploadTests(TestCase): } response = self.client.post('/test_client_regress/file_upload/', post_data) self.assertEqual(response.status_code, 200) + +class LoginTests(TestCase): + fixtures = ['testdata'] + + def test_login_different_client(self): + "Check that using a different test client doesn't violate authentication" + + # Create a second client, and log in. + c = Client() + login = c.login(username='testclient', password='password') + self.assertTrue(login, 'Could not log in') + + # Get a redirection page with the second client. + response = c.get("/test_client_regress/login_protected_redirect_view/") + + # At this points, the self.client isn't logged in. + # Check that assertRedirects uses the original client, not the + # default client. + self.assertRedirects(response, "/test_client_regress/get_view/") diff --git a/tests/regressiontests/test_client_regress/urls.py b/tests/regressiontests/test_client_regress/urls.py index 160f9f992d..e771707f61 100644 --- a/tests/regressiontests/test_client_regress/urls.py +++ b/tests/regressiontests/test_client_regress/urls.py @@ -4,4 +4,6 @@ import views urlpatterns = patterns('', (r'^no_template_view/$', views.no_template_view), (r'^file_upload/$', views.file_upload_view), + (r'^get_view/$', views.get_view), + (r'^login_protected_redirect_view/$', views.login_protected_redirect_view) ) diff --git a/tests/regressiontests/test_client_regress/views.py b/tests/regressiontests/test_client_regress/views.py index d3fbcf8448..75efd212e1 100644 --- a/tests/regressiontests/test_client_regress/views.py +++ b/tests/regressiontests/test_client_regress/views.py @@ -1,5 +1,6 @@ +from django.contrib.auth.decorators import login_required from django.core.mail import EmailMessage, SMTPConnection -from django.http import HttpResponse, HttpResponseServerError +from django.http import HttpResponse, HttpResponseRedirect, HttpResponseServerError from django.shortcuts import render_to_response def no_template_view(request): @@ -18,3 +19,12 @@ def file_upload_view(request): else: return HttpResponseServerError() +def get_view(request): + "A simple login protected view" + return HttpResponse("Hello world") +get_view = login_required(get_view) + +def login_protected_redirect_view(request): + "A view that redirects all requests to the GET view" + return HttpResponseRedirect('/test_client_regress/get_view/') +login_protected_redirect_view = login_required(login_protected_redirect_view)
\ No newline at end of file |
