Projet

Général

Profil

0004-Fix-multitenant-tests-under-django-3.2.patch

A. Berriot, 10 août 2022 15:22

Télécharger (9,42 ko)

Voir les différences:

Subject: [PATCH 4/6] Fix multitenant tests under django 3.2

 hobo/multitenant/settings.py             |  6 +++++-
 tests_multitenant/test_middleware.py     |  4 ++--
 tests_multitenant/test_settings.py       | 18 +++++++++---------
 tests_multitenant/test_tenant_command.py |  6 +++---
 tests_multitenant/test_threading.py      | 24 +++++++++++++-----------
 5 files changed, 32 insertions(+), 26 deletions(-)
hobo/multitenant/settings.py
29 29

  
30 30
class TenantSettingsWrapper(object):
31 31
    local = threading.local()
32
    # Uppercase is necessary for properties
33
    # accessed via settings.FOO
34
    # because django 3 raises an error
35
    # when trying to access a non-uppercase setting value
32 36

  
33 37
    def __init__(self, default_settings):
34 38
        self.__dict__['tenants_settings'] = {}
35 39
        self.__dict__['default_settings'] = default_settings
36 40

  
37
    def clear_tenants_settings(self):
41
    def CLEAR_TENANTS_SETTINGS(self):
38 42
        self.__dict__['tenants_settings'] = {}
39 43

  
40 44
    @property
tests_multitenant/test_middleware.py
24 24
    settings.DEBUG_PROPAGATE_EXCEPTIONS = False
25 25
    app.get('/?raise', status=404)
26 26
    response = app.get('/?raise', status=500, extra_environ={'HTTP_HOST': tenants[0].domain_url})
27
    assert response.text == '<h1>Server Error (500)</h1>'
27
    assert 'Server Error (500)' in response.text
28 28

  
29 29
    settings.INTERNAL_IPS = ['127.0.0.1']
30 30

  
31 31
    response = app.get('/?raise', status=500, extra_environ={'HTTP_HOST': tenants[0].domain_url})
32
    assert 'You\'re seeing this error because you have' in response.text
32
    assert 'seeing this error because you have' in response.text
33 33

  
34 34

  
35 35
def test_samesite_middleware(app, tenants, settings):
tests_multitenant/test_settings.py
39 39

  
40 40

  
41 41
def test_tenant_json_settings(tenants, settings):
42
    settings.clear_tenants_settings()
42
    settings.CLEAR_TENANTS_SETTINGS()
43 43

  
44 44
    with utilities.patch_default_settings(
45 45
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsJSON',)
......
67 67

  
68 68

  
69 69
def test_tenant_template_vars(tenants, settings, client):
70
    django.conf.settings.clear_tenants_settings()
70
    django.conf.settings.CLEAR_TENANTS_SETTINGS()
71 71

  
72 72
    with utilities.patch_default_settings(
73 73
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',)
......
99 99

  
100 100

  
101 101
def test_tenant_settings_vars(tenants, settings, client):
102
    django.conf.settings.clear_tenants_settings()
102
    django.conf.settings.CLEAR_TENANTS_SETTINGS()
103 103

  
104 104
    with utilities.patch_default_settings(
105 105
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsVars',)
......
127 127

  
128 128

  
129 129
def test_tenant_cors_settings(tenants, settings, client):
130
    settings.clear_tenants_settings()
130
    settings.CLEAR_TENANTS_SETTINGS()
131 131

  
132 132
    with utilities.patch_default_settings(
133 133
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.CORSSettings',)
......
148 148

  
149 149

  
150 150
def test_tenant_theme_settings(tenants, settings, client):
151
    django.conf.settings.clear_tenants_settings()
151
    django.conf.settings.CLEAR_TENANTS_SETTINGS()
152 152

  
153 153
    with utilities.patch_default_settings(
154 154
        settings,
......
183 183
def test_known_services(tenants, settings):
184 184
    from hobo.multitenant.settings_loaders import KnownServices
185 185

  
186
    settings.clear_tenants_settings()
186
    settings.CLEAR_TENANTS_SETTINGS()
187 187
    settings.SETTINGS_MODULE = 'fake.settings'
188 188

  
189 189
    for tenant in tenants:
......
229 229

  
230 230
def test_legacy_urls_mapping(tenants, settings):
231 231

  
232
    settings.clear_tenants_settings()
232
    settings.CLEAR_TENANTS_SETTINGS()
233 233
    settings.SETTINGS_MODULE = 'fake.settings'
234 234

  
235 235
    for tenant in tenants:
......
240 240

  
241 241

  
242 242
def test_unique_cookies(tenants, settings):
243
    settings.clear_tenants_settings()
243
    settings.CLEAR_TENANTS_SETTINGS()
244 244

  
245 245
    cookie_names = set()
246 246
    for tenant in tenants:
......
252 252

  
253 253

  
254 254
def test_tenant_json_settings_reload(tenants, settings, freezer):
255
    settings.clear_tenants_settings()
255
    settings.CLEAR_TENANTS_SETTINGS()
256 256

  
257 257
    with utilities.patch_default_settings(
258 258
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsJSON',)
tests_multitenant/test_tenant_command.py
50 50
def test_all_tenants_disable_cron(handle, tenants, settings):
51 51
    from django.core.management import execute_from_command_line
52 52

  
53
    settings.clear_tenants_settings()
53
    settings.CLEAR_TENANTS_SETTINGS()
54 54
    settings.DISABLE_CRON_JOBS = True
55 55
    handle.side_effect = RecordTenant()
56 56
    execute_from_command_line(['manage.py', 'tenant_command', 'clearsessions', '--all-tenants'])
......
62 62
def test_all_tenants_disable_cron_for_specific_tenant(handle, tenants, settings):
63 63
    from django.core.management import execute_from_command_line
64 64

  
65
    settings.clear_tenants_settings()
65
    settings.CLEAR_TENANTS_SETTINGS()
66 66
    disabled_tenant = tenants[0]
67 67
    with open(os.path.join(disabled_tenant.get_directory(), 'settings.json'), 'w') as fd:
68 68
        json.dump(
......
79 79
def test_all_tenants_global_disable_cron_with_force_job(handle, tenants, settings):
80 80
    from django.core.management import execute_from_command_line
81 81

  
82
    settings.clear_tenants_settings()
82
    settings.CLEAR_TENANTS_SETTINGS()
83 83
    settings.DISABLE_CRON_JOBS = True
84 84
    handle.side_effect = RecordTenant()
85 85
    execute_from_command_line(
tests_multitenant/test_threading.py
18 18

  
19 19
import django.conf
20 20
import utilities
21
from django.core.cache import cache, caches
21
from django.core.cache import cache
22 22
from tenant_schemas.utils import tenant_context
23 23

  
24 24

  
25 25
def test_thread(tenants, settings, client):
26 26

  
27
    settings.clear_tenants_settings()
27
    settings.CLEAR_TENANTS_SETTINGS()
28 28
    with utilities.patch_default_settings(
29 29
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',)
30 30
    ):
31 31

  
32 32
        def f(tenant=None):
33 33
            if tenant is not None:
34
                assert hasattr(settings, 'TEMPLATE_VARS')
35
                assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url()
34
                with tenant_context(tenant):
35
                    assert hasattr(settings, 'TEMPLATE_VARS')
36
                    assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url()
36 37
            else:
37 38
                assert not hasattr(django.conf.settings, 'TEMPLATE_VARS')
38 39

  
......
56 57

  
57 58
def test_cache(tenants, client):
58 59
    # Clear caches
59
    caches._caches.caches = {}
60
    cache.clear()
60 61

  
61 62
    cache.set('coin', 1)
62 63

  
......
68 69
    assert cache.get('coin') == 1
69 70

  
70 71
    for tenant in tenants:
71
        with tenant_context(tenant):
72 72

  
73
            def f():
73
        def f():
74
            with tenant_context(tenant):
74 75
                assert cache.get('coin') == tenant.domain_url
75 76

  
76
            t1 = threading.Thread(target=f)
77
        t1 = threading.Thread(target=f)
77 78
        t1.start()
78 79
        t1.join()
79 80

  
......
86 87

  
87 88

  
88 89
def test_timer_thread(tenants, settings, client):
89
    settings.clear_tenants_settings()
90
    settings.CLEAR_TENANTS_SETTINGS()
90 91
    with utilities.patch_default_settings(
91 92
        settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',)
92 93
    ):
93 94

  
94 95
        def f(tenant=None):
95 96
            if tenant is not None:
96
                assert hasattr(settings, 'TEMPLATE_VARS')
97
                assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url()
97
                with tenant_context(tenant):
98
                    assert hasattr(settings, 'TEMPLATE_VARS')
99
                    assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url()
98 100
            else:
99 101
                assert not hasattr(django.conf.settings, 'TEMPLATE_VARS')
100 102

  
101
-