Skip to content

Commit

Permalink
Multiple corrections in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lorinkoz committed Apr 19, 2020
1 parent 1faa360 commit 24b3210
Show file tree
Hide file tree
Showing 7 changed files with 16 additions and 20 deletions.
3 changes: 2 additions & 1 deletion dpgs_sandbox/tests/test_protocol_router.py
Expand Up @@ -23,7 +23,8 @@ def setUpClass(cls):
@classmethod
def tearDownClass(cls):
TenantModel = get_tenant_model()
TenantModel.objects.all().delete()
for tenant in TenantModel.objects.all():
tenant.delete(force_drop=True)

def test_get_tenant_scope_static(self):
scope = {"path": "/", "headers": [(b"host", b"blog.test.com")]}
Expand Down
4 changes: 2 additions & 2 deletions dpgs_sandbox/tests/test_schema_creation_commands.py
Expand Up @@ -53,14 +53,14 @@ def setUpClass(cls):
TenantModel = utils.get_tenant_model()
DomainModel = utils.get_domain_model()
tenant = TenantModel(schema_name="tenant1")
tenant.auto_create_schema = True
tenant.save(verbosity=0)
DomainModel.objects.create(tenant=tenant, domain="tenant1.test.com", is_primary=True)

@classmethod
def tearDownClass(cls):
TenantModel = utils.get_tenant_model()
TenantModel.objects.all().delete()
for tenant in TenantModel.objects.all():
tenant.delete(force_drop=True)

def test_interactive_cloneschema(self):
class CustomCloneSchemaCommand(CloneSchemaCommand):
Expand Down
2 changes: 2 additions & 0 deletions dpgs_sandbox/tests/test_signals.py
Expand Up @@ -10,6 +10,7 @@ class SignalsTestCase(TestCase):

def test_tenant_delete_callback(self):
TenantModel = get_tenant_model()
backup_create, backup_drop = TenantModel.auto_create_schema, TenantModel.auto_drop_schema
TenantModel.auto_create_schema = False
TenantModel.auto_drop_schema = True

This comment has been minimized.

Copy link
@lorinkoz

lorinkoz Apr 19, 2020

Author Owner

@ktowen Let me share with you this mistake of mine. In this test, I needed to change the default values for a couple of attributes in a whole class (TenantModel). These two attributes control no less than the automatic schema creation/dropping. I wasn't restoring the attributes to their original value, and therefore, every test that came after this one, would yield unpredictable results.

I had a hard time figuring out why those tests worked in isolation, but failed when run together with the other tests. Therefore, as general life lessons:

  1. Make sure each test case leaves the code/database in the same state it got it (some test cases do this automatically, in others you have to do the cleanup yourself)
  2. If a test works in isolation but fails when run with the others, this is a potential warning that some of your tests broke the natural/expected order of things (go back to point 1)
tenant = TenantModel(schema_name="tenant1")
Expand All @@ -18,3 +19,4 @@ def test_tenant_delete_callback(self):
self.assertTrue(schema_exists("tenant1"))
TenantModel.objects.all().delete()
self.assertFalse(schema_exists("tenant1"))
TenantModel.auto_create_schema, TenantModel.auto_drop_schema = backup_create, backup_drop
17 changes: 6 additions & 11 deletions dpgs_sandbox/tests/test_tenants.py
Expand Up @@ -31,10 +31,8 @@ def test_new_creation_deletion(self):
"Tests automatic creation/deletion for new tenant's save/delete"
self.assertFalse(schema_exists("tenant1"))
tenant = TenantModel(schema_name="tenant1")
tenant.auto_create_schema = True
tenant.save(verbosity=0)
self.assertTrue(schema_exists("tenant1"))
tenant.auto_drop_schema = True
# Self-cleanup
tenant.delete(force_drop=True)
self.assertFalse(schema_exists("tenant1"))
Expand All @@ -61,7 +59,6 @@ def signal_receiver(*args, **kwargs):

self.assertFalse(schema_exists("tenant1"))
tenant = TenantModel(schema_name="tenant1")
tenant.auto_create_schema = True
schema_post_sync.connect(signal_receiver)
with self.assertRaises(Exception):
tenant.save(verbosity=0)
Expand Down Expand Up @@ -99,7 +96,6 @@ class TenantTestCase(TestCase):
@classmethod
def setUpClass(cls):
tenant = TenantModel(schema_name="tenant")
tenant.auto_create_schema = True
tenant.save(verbosity=0)
catalog = Catalog.objects.create()
catalog2 = Catalog.objects.create()
Expand Down Expand Up @@ -223,24 +219,23 @@ class DomainTestCase(TransactionTestCase):
Tests domain operations.
"""

@transaction.atomic
def test_primary_domain(self):
tenant1 = TenantModel.objects.create(schema_name="tenant1")
tenant2 = TenantModel.objects.create(schema_name="tenant2")
tenant1 = TenantModel(schema_name="tenant1")
tenant2 = TenantModel(schema_name="tenant2")
tenant1.save(verbosity=0)
tenant2.save(verbosity=0)
domain1 = DomainModel.objects.create(domain="tenant1.test.com", tenant=tenant1)
DomainModel.objects.create(domain="tenant1-other.test.com", tenant=tenant1, is_primary=False)
self.assertEqual(tenant1.get_primary_domain(), domain1)
self.assertEqual(tenant2.get_primary_domain(), None)
for tenant in TenantModel.objects.all():
tenant.auto_drop_schema = True
tenant.delete(force_drop=True)

@transaction.atomic
def test_domain_string(self):
tenant = TenantModel.objects.create(schema_name="tenant")
tenant = TenantModel(schema_name="tenant")
tenant.save(verbosity=0)
domain1 = DomainModel.objects.create(domain="tenant.test.com", tenant=tenant)
domain2 = DomainModel.objects.create(domain="everything.test.com", folder="tenant", tenant=tenant)
self.assertEqual(str(domain1), "tenant.test.com")
self.assertEqual(str(domain2), "everything.test.com/tenant")
tenant.auto_drop_schema = True
tenant.delete(force_drop=True)
3 changes: 2 additions & 1 deletion dpgs_sandbox/tests/test_test_client.py
Expand Up @@ -21,7 +21,8 @@ def setUpClass(cls):
@classmethod
def tearDownClass(cls):
TenantModel = get_tenant_model()
TenantModel.objects.all().delete()
for tenant in TenantModel.objects.all():
tenant.delete(force_drop=True)

def test_get(self):
request = self.request.get("/not/important/")
Expand Down
4 changes: 0 additions & 4 deletions dpgs_sandbox/tests/test_urlresolvers.py
Expand Up @@ -45,7 +45,6 @@ def fake_get_response(request):
for i in range(1, 4):
schema_name = "tenant{}".format(i)
tenant = TenantModel(schema_name=schema_name)
tenant.auto_create_schema = True
tenant.save(verbosity=0)
DomainModel.objects.create(tenant=tenant, domain="{}.test.com".format(schema_name))
DomainModel.objects.create(tenant=tenant, domain="everything.test.com", folder=schema_name) # primary
Expand All @@ -56,7 +55,6 @@ def fake_get_response(request):
def tearDownClass(cls):
super().tearDownClass()
for tenant in TenantModel.objects.all():
tenant.auto_drop_schema = True
tenant.delete(force_drop=True)

def test_tenant_prefix(self):
Expand Down Expand Up @@ -98,7 +96,6 @@ class URLConfFactoryTestCase(TestCase):
def setUpClass(cls):
schema_name = "tenant1"
tenant = TenantModel(schema_name=schema_name)
tenant.auto_create_schema = True
tenant.save(verbosity=0)
DomainModel.objects.create(tenant=tenant, domain="{}.test.com".format(schema_name))
DomainModel.objects.create(tenant=tenant, domain="everything.test.com", folder=schema_name) # primary
Expand All @@ -109,7 +106,6 @@ def setUpClass(cls):
def tearDownClass(cls):
super().tearDownClass()
for tenant in TenantModel.objects.all():
tenant.auto_drop_schema = True
tenant.delete(force_drop=True)

def test_public(self):
Expand Down
3 changes: 2 additions & 1 deletion dpgs_sandbox/tests/test_whowill_command.py
Expand Up @@ -23,7 +23,8 @@ def setUpClass(cls):
@classmethod
def tearDownClass(cls):
TenantModel = get_tenant_model()
TenantModel.objects.all().delete()
for tenant in TenantModel.objects.all():
tenant.delete(force_drop=True)

def split_output(self, buffer):
buffer.seek(0)
Expand Down

0 comments on commit 24b3210

Please sign in to comment.