fix some complexity issues

This commit is contained in:
collerek
2020-08-09 10:58:36 +02:00
parent 22c4a0619c
commit fb5d03d64c
10 changed files with 244 additions and 134 deletions

View File

@ -69,7 +69,7 @@ def create_test_database():
@pytest.fixture()
async def init_relation():
department = await Department.objects.create(id=1, name='Math Department')
department = await Department.objects.create(id=1, name="Math Department")
class1 = await SchoolClass.objects.create(name="Math", department=department)
category = await Category.objects.create(name="Foreign")
category2 = await Category.objects.create(name="Domestic")
@ -85,35 +85,41 @@ async def init_relation():
@pytest.mark.asyncio
async def test_model_multiple_instances_of_same_table_in_schema(init_relation):
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'
classes = await SchoolClass.objects.select_related(
["teachers__category", "students"]
).all()
assert classes[0].name == "Math"
assert classes[0].students[0].name == "Jane"
# related fields of main model are only populated by pk
# unless there is a required foreign key somewhere along the way
# since department is required for schoolclass it was pre loaded (again)
# but you can load them anytime
assert classes[0].students[0].schoolclass.name == 'Math'
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'
assert classes[0].students[0].schoolclass.department.name == "Math Department"
@pytest.mark.asyncio
async def test_right_tables_join(init_relation):
async with database:
classes = await SchoolClass.objects.select_related(['teachers__category', 'students']).all()
assert classes[0].teachers[0].category.name == 'Domestic'
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 == "Foreign"
@pytest.mark.asyncio
async def test_multiple_reverse_related_objects(init_relation):
async with database:
classes = await SchoolClass.objects.select_related(['teachers__category', 'students']).all()
assert classes[0].name == 'Math'
assert classes[0].students[1].name == 'Jack'
assert classes[0].teachers[0].category.name == 'Domestic'
classes = await SchoolClass.objects.select_related(
["teachers__category", "students"]
).all()
assert classes[0].name == "Math"
assert classes[0].students[1].name == "Jack"
assert classes[0].teachers[0].category.name == "Domestic"