MCPcopy
hub / github.com/tortoise/tortoise-orm / test_aggregation

Function test_aggregation

tests/test_aggregation.py:22–61  ·  view source on GitHub ↗
(db)

Source from the content-addressed store, hash-verified

20
21@pytest.mark.asyncio
22async def test_aggregation(db):
23 tournament = Tournament(name="New Tournament")
24 await tournament.save()
25 await Tournament.create(name="Second tournament")
26 await Event(name="Without participants", tournament_id=tournament.id).save()
27 event = Event(name="Test", tournament_id=tournament.id)
28 await event.save()
29 participants = []
30 for i in range(2):
31 team = Team(name=f"Team {(i + 1)}")
32 await team.save()
33 participants.append(team)
34 await event.participants.add(participants[0], participants[1])
35 await event.participants.add(participants[0], participants[1])
36
37 tournaments_with_count = (
38 await Tournament.all().annotate(events_count=Count("events")).filter(events_count__gte=1)
39 )
40 assert len(tournaments_with_count) == 1
41 assert tournaments_with_count[0].events_count == 2
42
43 event_with_lowest_team_id = (
44 await Event.filter(event_id=event.event_id)
45 .first()
46 .annotate(lowest_team_id=Min("participants__id"))
47 )
48 assert event_with_lowest_team_id.lowest_team_id == participants[0].id
49
50 ordered_tournaments = (
51 await Tournament.all().annotate(events_count=Count("events")).order_by("events_count")
52 )
53 assert len(ordered_tournaments) == 2
54 assert ordered_tournaments[1].id == tournament.id
55 event_with_annotation = (
56 await Event.all().annotate(tournament_test_id=Sum("tournament__id")).first()
57 )
58 assert event_with_annotation.tournament_test_id == event_with_annotation.tournament_id
59
60 with pytest.raises(FieldError, match="name__id not resolvable"):
61 await Event.all().annotate(tournament_test_id=Sum("name__id")).first()
62
63
64@pytest.mark.asyncio

Callers

nothing calls this directly

Calls 14

TournamentClass · 0.90
EventClass · 0.90
TeamClass · 0.90
CountClass · 0.90
MinClass · 0.90
SumClass · 0.90
saveMethod · 0.80
addMethod · 0.80
createMethod · 0.45
filterMethod · 0.45
annotateMethod · 0.45
allMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…