Django testing stored session data in tests
Asked Answered
E

1

26

I have a view as such:

def ProjectInfo(request):
    if request.method == 'POST':
        form = ProjectInfoForm(request.POST)
        if form.is_valid():
            # if form is valid, iterate cleaned form data
            # and save data to session
            for k, v in form.cleaned_data.iteritems():
                request.session[k] = v
            return HttpResponseRedirect('/next/')
        else:
            ...
    else:
        ...

And in my tests:

from django.test import TestCase, Client
from django.core.urlresolvers import reverse
from tool.models import Module, Model
from django.contrib.sessions.models import Session

def test_project_info_form_post_submission(self):
    """
    Test if project info form can be submitted via post.
    """
    # set up our POST data
    post_data = {
        'zipcode': '90210',
        'module': self.module1.name,
        'model': self.model1.name,
        'orientation': 1,
        'tilt': 1,
        'rails_direction': 1,
    }
    ...
    self.assertEqual(response.status_code, 302)
    # test if 'zipcode' in session is equal to posted value.

So, where the last comment is in my test, I want to test if a specific value is in the session dict and that the key:value pairing is correct. How do I go about this? Can I use request.session?

Any help much appreciated.

Eustazio answered 29/10, 2012 at 19:39 Comment(0)
P
52

According to the docs:

from django.test import TestCase

class SimpleTest(TestCase):
    def test_details(self):
        # Issue a GET request.
        self.client.get('/customer/details/')
        session = self.client.session
        self.assertEqual(session["somekey"], "test")
Ptolemaist answered 29/10, 2012 at 20:16 Comment(2)
I don't see where the response is used. Does it need to be?Saltation
You also don't need to set self.client´in ´setUp()´ because TestCase` already does that for you (see docs.djangoproject.com/en/1.11/topics/testing/tools/…). I've edited the answer.Plea

© 2022 - 2024 — McMap. All rights reserved.