1. from django.db import connection
    
  2. from django.test import TestCase
    
  3. 
    
  4. from .models import A01, A02, B01, B02, C01, C02, Managed1, Unmanaged2
    
  5. 
    
  6. 
    
  7. class SimpleTests(TestCase):
    
  8.     def test_simple(self):
    
  9.         """
    
  10.         The main test here is that the all the models can be created without
    
  11.         any database errors. We can also do some more simple insertion and
    
  12.         lookup tests while we're here to show that the second of models do
    
  13.         refer to the tables from the first set.
    
  14.         """
    
  15.         # Insert some data into one set of models.
    
  16.         a = A01.objects.create(f_a="foo", f_b=42)
    
  17.         B01.objects.create(fk_a=a, f_a="fred", f_b=1729)
    
  18.         c = C01.objects.create(f_a="barney", f_b=1)
    
  19.         c.mm_a.set([a])
    
  20. 
    
  21.         # ... and pull it out via the other set.
    
  22.         a2 = A02.objects.all()[0]
    
  23.         self.assertIsInstance(a2, A02)
    
  24.         self.assertEqual(a2.f_a, "foo")
    
  25. 
    
  26.         b2 = B02.objects.all()[0]
    
  27.         self.assertIsInstance(b2, B02)
    
  28.         self.assertEqual(b2.f_a, "fred")
    
  29. 
    
  30.         self.assertIsInstance(b2.fk_a, A02)
    
  31.         self.assertEqual(b2.fk_a.f_a, "foo")
    
  32. 
    
  33.         self.assertEqual(list(C02.objects.filter(f_a=None)), [])
    
  34. 
    
  35.         resp = list(C02.objects.filter(mm_a=a.id))
    
  36.         self.assertEqual(len(resp), 1)
    
  37. 
    
  38.         self.assertIsInstance(resp[0], C02)
    
  39.         self.assertEqual(resp[0].f_a, "barney")
    
  40. 
    
  41. 
    
  42. class ManyToManyUnmanagedTests(TestCase):
    
  43.     def test_many_to_many_between_unmanaged(self):
    
  44.         """
    
  45.         The intermediary table between two unmanaged models should not be created.
    
  46.         """
    
  47.         table = Unmanaged2._meta.get_field("mm").m2m_db_table()
    
  48.         tables = connection.introspection.table_names()
    
  49.         self.assertNotIn(
    
  50.             table, tables, "Table '%s' should not exist, but it does." % table
    
  51.         )
    
  52. 
    
  53.     def test_many_to_many_between_unmanaged_and_managed(self):
    
  54.         """
    
  55.         An intermediary table between a managed and an unmanaged model should
    
  56.         be created.
    
  57.         """
    
  58.         table = Managed1._meta.get_field("mm").m2m_db_table()
    
  59.         tables = connection.introspection.table_names()
    
  60.         self.assertIn(table, tables, "Table '%s' does not exist." % table)