add tests for mysql and postgress, some fixes for those backends
This commit is contained in:
@ -78,6 +78,11 @@ async def create_test_database():
|
||||
engine = sqlalchemy.create_engine(DATABASE_URL)
|
||||
metadata.drop_all(engine)
|
||||
metadata.create_all(engine)
|
||||
yield
|
||||
metadata.drop_all(engine)
|
||||
|
||||
|
||||
async def create_data():
|
||||
department = await Department.objects.create(id=1, name="Math Department")
|
||||
department2 = await Department.objects.create(id=2, name="Law Department")
|
||||
class1 = await SchoolClass.objects.create(name="Math", department=department)
|
||||
@ -88,52 +93,56 @@ async def create_test_database():
|
||||
await Student.objects.create(name="Judy", category=category2, schoolclass=class1)
|
||||
await Student.objects.create(name="Jack", category=category2, schoolclass=class2)
|
||||
await Teacher.objects.create(name="Joe", category=category2, schoolclass=class1)
|
||||
yield
|
||||
metadata.drop_all(engine)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_model_multiple_instances_of_same_table_in_schema():
|
||||
async with database:
|
||||
classes = await SchoolClass.objects.select_related(
|
||||
["teachers__category", "students"]
|
||||
).all()
|
||||
assert classes[0].name == "Math"
|
||||
assert classes[0].students[0].name == "Jane"
|
||||
async with database.transaction(force_rollback=True):
|
||||
await create_data()
|
||||
classes = await SchoolClass.objects.select_related(
|
||||
["teachers__category", "students"]
|
||||
).all()
|
||||
assert classes[0].name == "Math"
|
||||
assert classes[0].students[0].name == "Jane"
|
||||
|
||||
assert len(classes[0].dict().get("students")) == 2
|
||||
assert len(classes[0].dict().get("students")) == 2
|
||||
|
||||
# since it's going from schoolclass => teacher => schoolclass (same class) department is already populated
|
||||
assert classes[0].students[0].schoolclass.name == "Math"
|
||||
assert classes[0].students[0].schoolclass.department.name is None
|
||||
await classes[0].students[0].schoolclass.department.load()
|
||||
assert classes[0].students[0].schoolclass.department.name == "Math Department"
|
||||
# since it's going from schoolclass => teacher => schoolclass (same class) department is already populated
|
||||
assert classes[0].students[0].schoolclass.name == "Math"
|
||||
assert classes[0].students[0].schoolclass.department.name is None
|
||||
await classes[0].students[0].schoolclass.department.load()
|
||||
assert classes[0].students[0].schoolclass.department.name == "Math Department"
|
||||
|
||||
await classes[1].students[0].schoolclass.department.load()
|
||||
assert classes[1].students[0].schoolclass.department.name == "Law Department"
|
||||
await classes[1].students[0].schoolclass.department.load()
|
||||
assert classes[1].students[0].schoolclass.department.name == "Law Department"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_right_tables_join():
|
||||
async with database:
|
||||
classes = await SchoolClass.objects.select_related(
|
||||
["teachers__category", "students"]
|
||||
).all()
|
||||
assert classes[0].teachers[0].category.name == "Domestic"
|
||||
async with database.transaction(force_rollback=True):
|
||||
await create_data()
|
||||
classes = await SchoolClass.objects.select_related(
|
||||
["teachers__category", "students"]
|
||||
).all()
|
||||
assert classes[0].teachers[0].category.name == "Domestic"
|
||||
|
||||
assert classes[0].students[0].category.name is None
|
||||
await classes[0].students[0].category.load()
|
||||
assert classes[0].students[0].category.name == "Foreign"
|
||||
assert classes[0].students[0].category.name is None
|
||||
await classes[0].students[0].category.load()
|
||||
assert classes[0].students[0].category.name == "Foreign"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_multiple_reverse_related_objects():
|
||||
async with database:
|
||||
classes = await SchoolClass.objects.select_related(
|
||||
["teachers__category", "students__category"]
|
||||
).all()
|
||||
assert classes[0].name == "Math"
|
||||
assert classes[0].students[1].name == "Judy"
|
||||
assert classes[0].students[0].category.name == "Foreign"
|
||||
assert classes[0].students[1].category.name == "Domestic"
|
||||
assert classes[0].teachers[0].category.name == "Domestic"
|
||||
async with database.transaction(force_rollback=True):
|
||||
await create_data()
|
||||
classes = await SchoolClass.objects.select_related(
|
||||
["teachers__category", "students__category"]
|
||||
).all()
|
||||
assert classes[0].name == "Math"
|
||||
assert classes[0].students[1].name == "Judy"
|
||||
assert classes[0].students[0].category.name == "Foreign"
|
||||
assert classes[0].students[1].category.name == "Domestic"
|
||||
assert classes[0].teachers[0].category.name == "Domestic"
|
||||
|
||||
Reference in New Issue
Block a user