view wiki/tests/test_middleware.py @ 1184:fbfb1a9c70e2

Make donations business a list. Paypal is now returning a different business email in IPN messages.
author Brian Neal <bgneal@gmail.com>
date Sun, 17 Oct 2021 14:40:53 -0500
parents ba3230aba90c
children
line wrap: on
line source
# coding=utf-8
"""
Tests for the wiki integration application.

"""
import hashlib
import datetime

from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import RequestFactory
from django.http import HttpResponse
from django.conf import settings

from core.services import get_redis_connection
from wiki.middleware import WikiMiddleware
from wiki.constants import SESSION_SET_MEMBER


class MiddleWareTestCase(TestCase):

    def setUp(self):
        self.factory = RequestFactory()
        self.user = User.objects.create_user(u'Sérgio', u'test@example.com',
                u'password')
        self.conn = get_redis_connection()
        self.mw = WikiMiddleware()

    def tearDown(self):
        self.conn.delete(settings.WIKI_REDIS_SET)

    def create_request(self):
        request = self.factory.get('/contact/')
        request.session = {}
        request.user = self.user
        return request

    def test_middleware(self):

        request = self.create_request()
        response = HttpResponse()

        request.wiki_set_cookie = True
        response = self.mw.process_response(request, response)

        cookie = response.cookies.get(settings.WIKI_COOKIE_NAME)
        cookie_val = ''
        self.assertIsNotNone(cookie)
        if cookie:
            self.assertEqual(cookie['domain'], settings.WIKI_COOKIE_DOMAIN)
            self.assertEqual(cookie['path'], '/')
            self.assertEqual(cookie['max-age'], settings.WIKI_COOKIE_AGE)

            cookie_val = cookie.value
            try:
                user, email, key = cookie_val.decode('utf-8').split('#')
            except ValueError:
                self.fail('invalid cookie value')
            else:
                self.assertEqual(user, self.user.username)
                self.assertEqual(email, self.user.email)
                self.assertEqual(len(key), 64)

        self.assertEqual(self.conn.zcard(settings.WIKI_REDIS_SET), 1)

        h = hashlib.sha256()
        h.update(cookie_val)
        member = h.hexdigest()

        score = self.conn.zscore(settings.WIKI_REDIS_SET, member)
        now = datetime.datetime.utcnow()
        session_start = datetime.datetime.fromtimestamp(score)
        self.assertLess(now - session_start, datetime.timedelta(seconds=2))

        session_member = request.session.get(SESSION_SET_MEMBER)
        self.assertTrue(session_member and session_member == member)

        # test the destroy session logic

        request = self.create_request()
        request.wiki_delete_cookie = member
        response = self.mw.process_response(request, response)

        cookie = response.cookies.get(settings.WIKI_COOKIE_NAME)
        self.assertIsNotNone(cookie)
        if cookie:
            self.assertEqual(cookie.value, '')
            self.assertEqual(cookie['domain'], settings.WIKI_COOKIE_DOMAIN)
            self.assertEqual(cookie['path'], '/')
            self.assertEqual(cookie['max-age'], 0)
            self.assertEqual(cookie['expires'], 'Thu, 01-Jan-1970 00:00:00 GMT')

        self.assertEqual(self.conn.zcard(settings.WIKI_REDIS_SET), 0)