Merge pull request #90 from aniav/master
Fix tests, move from PUBLIC_SCHEMA_URL_TOKEN to PUBLIC_SCHEMA_URLCONF
This commit is contained in:
commit
45c32caff3
|
@ -151,7 +151,7 @@ Optional Settings
|
|||
Tenant View-Routing
|
||||
-------------------
|
||||
|
||||
.. attribute:: PUBLIC_SCHEMA_URL_TOKEN
|
||||
.. attribute:: PUBLIC_SCHEMA_URLCONF
|
||||
|
||||
:Default: ``None``
|
||||
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
from django.conf import settings
|
||||
from django.db import connection
|
||||
from django.test import TransactionTestCase
|
||||
from django.test.client import RequestFactory
|
||||
from tenant_schemas.middleware import TenantMiddleware
|
||||
from tenant_schemas.tests.models import Tenant
|
||||
from tenant_schemas.utils import get_public_schema_name
|
||||
|
||||
|
||||
class RoutesTestCase(TransactionTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
settings.TENANT_APPS = ('tenant_schemas', 'django.contrib.contenttypes', 'django.contrib.auth', )
|
||||
settings.TENANT_APPS = ('tenant_schemas',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.auth', )
|
||||
|
||||
def setUp(self):
|
||||
self.factory = RequestFactory()
|
||||
|
@ -16,11 +20,11 @@ class RoutesTestCase(TransactionTestCase):
|
|||
|
||||
# settings needs some patching
|
||||
settings.TENANT_MODEL = 'tenant_schemas.Tenant'
|
||||
settings.PUBLIC_SCHEMA_URL_TOKEN = '/public'
|
||||
|
||||
# add the public tenant
|
||||
self.public_tenant_domain = 'test.com'
|
||||
self.public_tenant = Tenant(domain_url=self.public_tenant_domain, schema_name='public')
|
||||
self.public_tenant = Tenant(domain_url=self.public_tenant_domain,
|
||||
schema_name='public')
|
||||
self.public_tenant.save()
|
||||
|
||||
# add a test tenant
|
||||
|
@ -29,6 +33,23 @@ class RoutesTestCase(TransactionTestCase):
|
|||
self.tenant.save()
|
||||
|
||||
def tearDown(self):
|
||||
"""
|
||||
Delete all tenant schemas. Tenant schema are not deleted
|
||||
automatically by django.
|
||||
"""
|
||||
connection.set_schema_to_public()
|
||||
do_not_delete = [get_public_schema_name(), 'information_schema']
|
||||
cursor = connection.cursor()
|
||||
|
||||
# Use information_schema.schemata instead of pg_catalog.pg_namespace in
|
||||
# utils.schema_exists, so that we only "see" schemas that we own
|
||||
cursor.execute('SELECT schema_name FROM information_schema.schemata')
|
||||
|
||||
for row in cursor.fetchall():
|
||||
if not row[0].startswith('pg_') and row[0] not in do_not_delete:
|
||||
print("Deleting schema %s" % row[0])
|
||||
cursor.execute('DROP SCHEMA %s CASCADE' % row[0])
|
||||
|
||||
Tenant.objects.all().delete()
|
||||
|
||||
def test_tenant_routing(self):
|
||||
|
@ -36,7 +57,8 @@ class RoutesTestCase(TransactionTestCase):
|
|||
request path should not be altered
|
||||
"""
|
||||
request_url = '/any/request/'
|
||||
request = self.factory.get('/any/request/', HTTP_HOST=self.tenant_domain)
|
||||
request = self.factory.get('/any/request/',
|
||||
HTTP_HOST=self.tenant_domain)
|
||||
self.tm.process_request(request)
|
||||
|
||||
self.assertEquals(request.path_info, request_url)
|
||||
|
@ -46,13 +68,14 @@ class RoutesTestCase(TransactionTestCase):
|
|||
|
||||
def test_public_schema_routing(self):
|
||||
"""
|
||||
request path should get prepended with PUBLIC_SCHEMA_URL_TOKEN
|
||||
request path should not be altered
|
||||
"""
|
||||
request_url = '/any/request/'
|
||||
request = self.factory.get('/any/request/', HTTP_HOST=self.public_tenant_domain)
|
||||
request = self.factory.get('/any/request/',
|
||||
HTTP_HOST=self.public_tenant_domain)
|
||||
self.tm.process_request(request)
|
||||
|
||||
self.assertEquals(request.path_info, settings.PUBLIC_SCHEMA_URL_TOKEN + request_url)
|
||||
self.assertEquals(request.path_info, request_url)
|
||||
|
||||
# request.tenant should also have been set
|
||||
self.assertEquals(request.tenant, self.public_tenant)
|
||||
self.assertEquals(request.tenant, self.public_tenant)
|
||||
|
|
|
@ -2,15 +2,27 @@ from django.conf import settings
|
|||
from django.db import connection
|
||||
from django.test.testcases import TransactionTestCase
|
||||
from tenant_schemas.tests.models import Tenant, NonAutoSyncTenant, DummyModel
|
||||
from tenant_schemas.utils import tenant_context, schema_exists, get_public_schema_name
|
||||
from tenant_schemas.utils import (tenant_context, schema_exists,
|
||||
get_public_schema_name)
|
||||
|
||||
|
||||
class TenantTestCase(TransactionTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
settings.TENANT_APPS = ('tenant_schemas', 'django.contrib.contenttypes', 'django.contrib.auth', )
|
||||
settings.TENANT_APPS = ('tenant_schemas',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.auth', )
|
||||
|
||||
def setUp(self):
|
||||
# settings needs some patching
|
||||
settings.TENANT_MODEL = 'tenant_schemas.Tenant'
|
||||
|
||||
# add the public tenant
|
||||
self.public_tenant_domain = 'test.com'
|
||||
self.public_tenant = Tenant(domain_url=self.public_tenant_domain,
|
||||
schema_name='public')
|
||||
self.public_tenant.save()
|
||||
|
||||
connection.set_schema_to_public()
|
||||
|
||||
def tearDown(self):
|
||||
|
@ -28,14 +40,17 @@ class TenantTestCase(TransactionTestCase):
|
|||
|
||||
for row in cursor.fetchall():
|
||||
if not row[0].startswith('pg_') and row[0] not in do_not_delete:
|
||||
print "Deleting schema %s" % row[0]
|
||||
print("Deleting schema %s" % row[0])
|
||||
cursor.execute('DROP SCHEMA %s CASCADE' % row[0])
|
||||
|
||||
Tenant.objects.all().delete()
|
||||
NonAutoSyncTenant.objects.all().delete()
|
||||
|
||||
def test_tenant_schema_is_created(self):
|
||||
"""
|
||||
when saving a tenant, it's schema should be created
|
||||
"""
|
||||
tenant = Tenant(domain_url='test.com', schema_name='test')
|
||||
tenant = Tenant(domain_url='something.test.com', schema_name='test')
|
||||
tenant.save()
|
||||
|
||||
self.assertTrue(schema_exists(tenant.schema_name))
|
||||
|
@ -47,16 +62,17 @@ class TenantTestCase(TransactionTestCase):
|
|||
"""
|
||||
self.assertFalse(schema_exists('non_auto_sync_tenant'))
|
||||
|
||||
tenant = NonAutoSyncTenant(domain_url='test.com', schema_name='test')
|
||||
tenant = NonAutoSyncTenant(domain_url='something.test.com',
|
||||
schema_name='test')
|
||||
tenant.save()
|
||||
|
||||
self.assertFalse(schema_exists(tenant.schema_name))
|
||||
|
||||
def test_edit_tenant(self):
|
||||
def test_sync_tenant(self):
|
||||
"""
|
||||
when editing an existing tenant, all data should be kept
|
||||
"""
|
||||
tenant = Tenant(domain_url='test.com', schema_name='test')
|
||||
tenant = Tenant(domain_url='something.test.com', schema_name='test')
|
||||
tenant.save()
|
||||
|
||||
# go to tenant's path
|
||||
|
@ -71,13 +87,16 @@ class TenantTestCase(TransactionTestCase):
|
|||
tenant.domain_url = 'example.com'
|
||||
tenant.save()
|
||||
|
||||
connection.set_tenant(tenant)
|
||||
|
||||
# test if data is still there
|
||||
self.assertEquals(DummyModel.objects.count(), 2)
|
||||
|
||||
def test_switching_search_path(self):
|
||||
dummies_tenant1_count, dummies_tenant2_count = 0, 0
|
||||
|
||||
tenant1 = Tenant(domain_url='test.com', schema_name='tenant1')
|
||||
tenant1 = Tenant(domain_url='something.test.com',
|
||||
schema_name='tenant1')
|
||||
tenant1.save()
|
||||
|
||||
connection.set_schema_to_public()
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
import warnings
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse as reverse_default
|
||||
from django.utils.functional import lazy
|
||||
from tenant_schemas.utils import clean_tenant_url
|
||||
|
||||
|
||||
def reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None):
|
||||
warnings.warn("PUBLIC_SCHEMA_URL_TOKEN is deprecated. Use PUBLIC_SCHEMA_URLCONF instead.",
|
||||
category=DeprecationWarning)
|
||||
def reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None,
|
||||
current_app=None):
|
||||
if hasattr(settings, 'PUBLIC_SCHEMA_URL_TOKEN'):
|
||||
warnings.warn("PUBLIC_SCHEMA_URL_TOKEN is deprecated. "
|
||||
"Use PUBLIC_SCHEMA_URLCONF instead.",
|
||||
category=DeprecationWarning)
|
||||
|
||||
url = reverse_default(viewname, urlconf, args, kwargs, prefix, current_app)
|
||||
return clean_tenant_url(url)
|
||||
|
||||
reverse_lazy = lazy(reverse, str)
|
||||
reverse_lazy = lazy(reverse, str)
|
||||
|
|
|
@ -37,9 +37,10 @@ def clean_tenant_url(url_string):
|
|||
"""
|
||||
Removes the TENANT_TOKEN from a particular string
|
||||
"""
|
||||
if hasattr(settings, 'PUBLIC_SCHEMA_URL_TOKEN'):
|
||||
if settings.PUBLIC_SCHEMA_URL_TOKEN and url_string.startswith(settings.PUBLIC_SCHEMA_URL_TOKEN):
|
||||
url_string = url_string[len(settings.PUBLIC_SCHEMA_URL_TOKEN):]
|
||||
if hasattr(settings, 'PUBLIC_SCHEMA_URLCONF'):
|
||||
if (settings.PUBLIC_SCHEMA_URLCONF
|
||||
and url_string.startswith(settings.PUBLIC_SCHEMA_URLCONF)):
|
||||
url_string = url_string[len(settings.PUBLIC_SCHEMA_URLCONF):]
|
||||
return url_string
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue