parts/django/tests/modeltests/test_client/views.py
changeset 69 c6bca38c1cbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parts/django/tests/modeltests/test_client/views.py	Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,214 @@
+from xml.dom.minidom import parseString
+
+from django.core import mail
+from django.template import Context, Template
+from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
+from django.contrib.auth.decorators import login_required, permission_required
+from django.forms.forms import Form
+from django.forms import fields
+from django.shortcuts import render_to_response
+from django.utils.decorators import method_decorator
+
+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):
+    """A view that expects a POST, and returns a different template depending
+    on whether any POST data is available
+    """
+    if request.method == 'POST':
+        if request.POST:
+            t = Template('Data received: {{ data }} is the value.', name='POST Template')
+            c = Context({'data': request.POST['value']})
+        else:
+            t = Template('Viewing POST page.', name='Empty POST Template')
+            c = Context()
+    else:
+        t = Template('Viewing GET page.', name='Empty GET Template')
+        c = Context()
+
+    return HttpResponse(t.render(c))
+
+def view_with_header(request):
+    "A view that has a custom header"
+    response = HttpResponse()
+    response['X-DJANGO-TEST'] = 'Slartibartfast'
+    return response
+
+def raw_post_view(request):
+    """A view which expects raw XML to be posted and returns content extracted
+    from the XML"""
+    if request.method == 'POST':
+        root = parseString(request.raw_post_data)
+        first_book = root.firstChild.firstChild
+        title, author = [n.firstChild.nodeValue for n in first_book.childNodes]
+        t = Template("{{ title }} - {{ author }}", name="Book template")
+        c = Context({"title": title, "author": author})
+    else:
+        t = Template("GET request.", name="Book GET template")
+        c = Context()
+
+    return HttpResponse(t.render(c))
+
+def redirect_view(request):
+    "A view that redirects all requests to the GET view"
+    if request.GET:
+        from urllib import urlencode
+        query = '?' + urlencode(request.GET, True)
+    else:
+        query = ''
+    return HttpResponseRedirect('/test_client/get_view/' + query)
+
+def view_with_secure(request):
+    "A view that indicates if the request was secure"
+    response = HttpResponse()
+    response.test_was_secure_request = request.is_secure()
+    return response
+
+def double_redirect_view(request):
+    "A view that redirects all requests to a redirection view"
+    return HttpResponseRedirect('/test_client/permanent_redirect_view/')
+
+def bad_view(request):
+    "A view that returns a 404 with some error content"
+    return HttpResponseNotFound('Not found!. This page contains some MAGIC content')
+
+TestChoices = (
+    ('a', 'First Choice'),
+    ('b', 'Second Choice'),
+    ('c', 'Third Choice'),
+    ('d', 'Fourth Choice'),
+    ('e', 'Fifth Choice')
+)
+
+class TestForm(Form):
+    text = fields.CharField()
+    email = fields.EmailField()
+    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':
+        form = TestForm(request.POST)
+        if form.is_valid():
+            t = Template('Valid POST data.', name='Valid POST Template')
+            c = Context()
+        else:
+            t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
+            c = Context({'form': form})
+    else:
+        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):
+    "A view that tests a simple form"
+    if request.method == 'POST':
+        form = TestForm(request.POST)
+        if form.is_valid():
+            message = 'POST data OK'
+        else:
+            message = 'POST data has errors'
+    else:
+        form = TestForm()
+        message = 'GET form page'
+    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 login_protected_view_changed_redirect(request):
+    "A simple view that is login protected with a custom redirect field set"
+    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_changed_redirect = login_required(redirect_field_name="redirect_to")(login_protected_view_changed_redirect)
+
+def permission_protected_view(request):
+    "A simple view that is permission protected."
+    t = Template('This is a permission protected test. '
+                 'Username is {{ user.username }}. '
+                 'Permissions are {{ user.get_all_permissions }}.' ,
+                 name='Permissions Template')
+    c = Context({'user': request.user})
+    return HttpResponse(t.render(c))
+permission_protected_view = permission_required('modeltests.test_perm')(permission_protected_view)
+
+class _ViewManager(object):
+    @method_decorator(login_required)
+    def login_protected_view(self, request):
+        t = Template('This is a login protected test using a method. '
+                     'Username is {{ user.username }}.',
+                     name='Login Method Template')
+        c = Context({'user': request.user})
+        return HttpResponse(t.render(c))
+
+    @method_decorator(permission_required('modeltests.test_perm'))
+    def permission_protected_view(self, request):
+        t = Template('This is a permission protected test using a method. '
+                     'Username is {{ user.username }}. '
+                     'Permissions are {{ user.get_all_permissions }}.' ,
+                     name='Permissions Template')
+        c = Context({'user': request.user})
+        return HttpResponse(t.render(c))
+
+_view_manager = _ViewManager()
+login_protected_method_view = _view_manager.login_protected_view
+permission_protected_method_view = _view_manager.permission_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.',
+                 name='Session Modifying View Template')
+    c = Context()
+    return HttpResponse(t.render(c))
+
+def broken_view(request):
+    """A view which just raises an exception, simulating a broken view."""
+    raise KeyError("Oops! Looks like you wrote some bad code.")
+
+def mail_sending_view(request):
+    mail.EmailMessage(
+        "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 = mail.EmailMessage(
+        'First Test message',
+        'This is the first test email',
+        'from@example.com',
+        ['first@example.com', 'second@example.com'])
+    m2 = mail.EmailMessage(
+        'Second Test message',
+        'This is the second test email',
+        'from@example.com',
+        ['second@example.com', 'third@example.com'])
+
+    c = mail.get_connection()
+    c.send_messages([m1,m2])
+
+    return HttpResponse("Mail sent")