~elopio/u1-test-utils/fix1197028-localmail_SMTPClient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from __future__ import absolute_import

import re
import string
import time

import django
from django.conf import settings
from django.test import TestCase
from django.utils.http import http_date


# Original snippet from http://djangosnippets.org/snippets/2156/
class SettingDoesNotExist:
    pass


def switch_settings(**kwargs):
    """Helper method that updates settings and returns old settings."""
    old_settings = {}
    for key, new_value in kwargs.items():
        old_value = getattr(settings, key, SettingDoesNotExist)
        old_settings[key] = old_value

        if new_value is SettingDoesNotExist:
            delattr(settings, key)
        else:
            setattr(settings, key, new_value)

    return old_settings

# end snippet


class patch_settings(object):

    def __init__(self, **kwargs):
        super(patch_settings, self).__init__()
        self.marker = object()
        self.old_settings = {}
        self.kwargs = kwargs

    def start(self):
        for setting, new_value in self.kwargs.items():
            old_value = getattr(settings, setting, self.marker)
            self.old_settings[setting] = old_value
            setattr(settings, setting, new_value)

    def stop(self):
        for setting, old_value in self.old_settings.items():
            if old_value is self.marker:
                delattr(settings, setting)
            else:
                setattr(settings, setting, old_value)

    def __enter__(self):
        self.start()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.stop()


class CsrfMiddlewareEnabledTestCase(TestCase):

    def setUp(self):
        super(CsrfMiddlewareEnabledTestCase, self).setUp()

        if django.VERSION[:2] > (1, 3):
            csrf_middleware = 'django.middleware.csrf.CsrfViewMiddleware'
        else:
            csrf_middleware = 'django.contrib.csrf.middleware.CsrfMiddleware'

        # make sure csrf middleware is enabled
        self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
        settings.MIDDLEWARE_CLASSES = [
            'django.middleware.common.CommonMiddleware',
            csrf_middleware,
            'django.contrib.sessions.middleware.SessionMiddleware',
            'django.contrib.auth.middleware.AuthenticationMiddleware',
        ]

    def tearDown(self):
        settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES

        super(CsrfMiddlewareEnabledTestCase, self).tearDown()

    def get_csrf_token(self, response):
        # get csrf token
        csrf_token_re = re.compile(r"name='csrfmiddlewaretoken' value='(.*)'")
        match = re.search(csrf_token_re, response.content)
        token = match.group(1)
        return token


class NeverCacheTestCase(TestCase):

    def is_cacheable(self, response):
        result = True
        if 'Expires'in response:
            expires = response['Expires']
            now = http_date(time.time())
            result &= expires > now
        if 'Cache-Control' in response:
            cache_control = response['Cache-Control']
            values = map(string.strip, cache_control.split(','))
            for value in values:
                if '=' in value:
                    k, v = value.split('=')
                    if k == 'max-age':
                        result &= int(v) > 0
                        break
        return result