the main test here is that the all the models can be created without any database errors we can also do some more simple insertion and lookup tests while we re here to show that the second of models do refer to the tables from the first set insert some data into one set of models and pull it out via the other set the intermediary table between two unmanaged models should not be created an intermediary table between a managed and an unmanaged model should be created the main test here is that the all the models can be created without any database errors we can also do some more simple insertion and lookup tests while we re here to show that the second of models do refer to the tables from the first set insert some data into one set of models and pull it out via the other set the intermediary table between two unmanaged models should not be created an intermediary table between a managed and an unmanaged model should be created
from django.db import connection
from django.test import TestCase

from .models import A01, A02, B01, B02, C01, C02, Managed1, Unmanaged2


class SimpleTests(TestCase):
    def test_simple(self):
        
        
        a = A01.objects.create(f_a="foo", f_b=42)
        B01.objects.create(fk_a=a, f_a="fred", f_b=1729)
        c = C01.objects.create(f_a="barney", f_b=1)
        c.mm_a.set([a])

        
        a2 = A02.objects.all()[0]
        self.assertIsInstance(a2, A02)
        self.assertEqual(a2.f_a, "foo")

        b2 = B02.objects.all()[0]
        self.assertIsInstance(b2, B02)
        self.assertEqual(b2.f_a, "fred")

        self.assertIsInstance(b2.fk_a, A02)
        self.assertEqual(b2.fk_a.f_a, "foo")

        self.assertEqual(list(C02.objects.filter(f_a=None)), [])

        resp = list(C02.objects.filter(mm_a=a.id))
        self.assertEqual(len(resp), 1)

        self.assertIsInstance(resp[0], C02)
        self.assertEqual(resp[0].f_a, "barney")


class ManyToManyUnmanagedTests(TestCase):
    def test_many_to_many_between_unmanaged(self):
        
        table = Unmanaged2._meta.get_field("mm").m2m_db_table()
        tables = connection.introspection.table_names()
        self.assertNotIn(
            table, tables, "Table '%s' should not exist, but it does." % table
        )

    def test_many_to_many_between_unmanaged_and_managed(self):
        
        table = Managed1._meta.get_field("mm").m2m_db_table()
        tables = connection.introspection.table_names()
        self.assertIn(table, tables, "Table '%s' does not exist." % table)