From bd566a596446c852f70a7e26cb0d23a042371019 Mon Sep 17 00:00:00 2001 From: Agate Date: Thu, 28 Jul 2022 12:22:41 +0200 Subject: [PATCH 4/7] 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(-) diff --git a/hobo/multitenant/settings.py b/hobo/multitenant/settings.py index 98ca30c..3956a5f 100644 --- a/hobo/multitenant/settings.py +++ b/hobo/multitenant/settings.py @@ -29,12 +29,16 @@ def import_class(klass): class TenantSettingsWrapper(object): local = threading.local() + # Uppercase is necessary for properties + # accessed via settings.FOO + # because django 3 raises an error + # when trying to access a non-uppercase setting value def __init__(self, default_settings): self.__dict__['tenants_settings'] = {} self.__dict__['default_settings'] = default_settings - def clear_tenants_settings(self): + def CLEAR_TENANTS_SETTINGS(self): self.__dict__['tenants_settings'] = {} @property diff --git a/tests_multitenant/test_middleware.py b/tests_multitenant/test_middleware.py index c6b3494..bffd3ec 100644 --- a/tests_multitenant/test_middleware.py +++ b/tests_multitenant/test_middleware.py @@ -24,12 +24,12 @@ def test_internalipmiddleware(app, tenants, settings): settings.DEBUG_PROPAGATE_EXCEPTIONS = False app.get('/?raise', status=404) response = app.get('/?raise', status=500, extra_environ={'HTTP_HOST': tenants[0].domain_url}) - assert response.text == '

Server Error (500)

' + assert 'Server Error (500)' in response.text settings.INTERNAL_IPS = ['127.0.0.1'] response = app.get('/?raise', status=500, extra_environ={'HTTP_HOST': tenants[0].domain_url}) - assert 'You\'re seeing this error because you have' in response.text + assert 'seeing this error because you have' in response.text def test_samesite_middleware(app, tenants, settings): diff --git a/tests_multitenant/test_settings.py b/tests_multitenant/test_settings.py index cb33748..02badba 100644 --- a/tests_multitenant/test_settings.py +++ b/tests_multitenant/test_settings.py @@ -39,7 +39,7 @@ def test_tenant_middleware(tenants, client, settings): def test_tenant_json_settings(tenants, settings): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsJSON',) @@ -67,7 +67,7 @@ def test_tenant_json_settings(tenants, settings): def test_tenant_template_vars(tenants, settings, client): - django.conf.settings.clear_tenants_settings() + django.conf.settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',) @@ -99,7 +99,7 @@ def test_tenant_template_vars(tenants, settings, client): def test_tenant_settings_vars(tenants, settings, client): - django.conf.settings.clear_tenants_settings() + django.conf.settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsVars',) @@ -127,7 +127,7 @@ def test_tenant_settings_vars(tenants, settings, client): def test_tenant_cors_settings(tenants, settings, client): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.CORSSettings',) @@ -148,7 +148,7 @@ def test_tenant_cors_settings(tenants, settings, client): def test_tenant_theme_settings(tenants, settings, client): - django.conf.settings.clear_tenants_settings() + django.conf.settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, @@ -183,7 +183,7 @@ def test_shared_secret(): def test_known_services(tenants, settings): from hobo.multitenant.settings_loaders import KnownServices - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() settings.SETTINGS_MODULE = 'fake.settings' for tenant in tenants: @@ -229,7 +229,7 @@ def test_known_services(tenants, settings): def test_legacy_urls_mapping(tenants, settings): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() settings.SETTINGS_MODULE = 'fake.settings' for tenant in tenants: @@ -240,7 +240,7 @@ def test_legacy_urls_mapping(tenants, settings): def test_unique_cookies(tenants, settings): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() cookie_names = set() for tenant in tenants: @@ -252,7 +252,7 @@ def test_unique_cookies(tenants, settings): def test_tenant_json_settings_reload(tenants, settings, freezer): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.SettingsJSON',) diff --git a/tests_multitenant/test_tenant_command.py b/tests_multitenant/test_tenant_command.py index 29fe5e7..3b830c7 100644 --- a/tests_multitenant/test_tenant_command.py +++ b/tests_multitenant/test_tenant_command.py @@ -50,7 +50,7 @@ def test_all_tenants(handle, tenants): def test_all_tenants_disable_cron(handle, tenants, settings): from django.core.management import execute_from_command_line - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() settings.DISABLE_CRON_JOBS = True handle.side_effect = RecordTenant() execute_from_command_line(['manage.py', 'tenant_command', 'clearsessions', '--all-tenants']) @@ -62,7 +62,7 @@ def test_all_tenants_disable_cron(handle, tenants, settings): def test_all_tenants_disable_cron_for_specific_tenant(handle, tenants, settings): from django.core.management import execute_from_command_line - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() disabled_tenant = tenants[0] with open(os.path.join(disabled_tenant.get_directory(), 'settings.json'), 'w') as fd: json.dump( @@ -79,7 +79,7 @@ def test_all_tenants_disable_cron_for_specific_tenant(handle, tenants, settings) def test_all_tenants_global_disable_cron_with_force_job(handle, tenants, settings): from django.core.management import execute_from_command_line - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() settings.DISABLE_CRON_JOBS = True handle.side_effect = RecordTenant() execute_from_command_line( diff --git a/tests_multitenant/test_threading.py b/tests_multitenant/test_threading.py index f0bcfcd..b88da3d 100644 --- a/tests_multitenant/test_threading.py +++ b/tests_multitenant/test_threading.py @@ -18,21 +18,22 @@ import threading import django.conf import utilities -from django.core.cache import cache, caches +from django.core.cache import cache from tenant_schemas.utils import tenant_context def test_thread(tenants, settings, client): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',) ): def f(tenant=None): if tenant is not None: - assert hasattr(settings, 'TEMPLATE_VARS') - assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url() + with tenant_context(tenant): + assert hasattr(settings, 'TEMPLATE_VARS') + assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url() else: assert not hasattr(django.conf.settings, 'TEMPLATE_VARS') @@ -56,7 +57,7 @@ def test_thread(tenants, settings, client): def test_cache(tenants, client): # Clear caches - caches._caches.caches = {} + cache.clear() cache.set('coin', 1) @@ -68,12 +69,12 @@ def test_cache(tenants, client): assert cache.get('coin') == 1 for tenant in tenants: - with tenant_context(tenant): - def f(): + def f(): + with tenant_context(tenant): assert cache.get('coin') == tenant.domain_url - t1 = threading.Thread(target=f) + t1 = threading.Thread(target=f) t1.start() t1.join() @@ -86,15 +87,16 @@ def test_cache(tenants, client): def test_timer_thread(tenants, settings, client): - settings.clear_tenants_settings() + settings.CLEAR_TENANTS_SETTINGS() with utilities.patch_default_settings( settings, TENANT_SETTINGS_LOADERS=('hobo.multitenant.settings_loaders.TemplateVars',) ): def f(tenant=None): if tenant is not None: - assert hasattr(settings, 'TEMPLATE_VARS') - assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url() + with tenant_context(tenant): + assert hasattr(settings, 'TEMPLATE_VARS') + assert settings.TEMPLATE_VARS['test_url'] == tenant.get_base_url() else: assert not hasattr(django.conf.settings, 'TEMPLATE_VARS') -- 2.36.1