From a45cdad65207d4d1bbc13e2b138353eb7e3a42c6 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Mon, 3 Oct 2022 13:46:20 +0200 Subject: [PATCH] Restore correct order of objectives --- server/objectives/schema.py | 11 ++++++++--- server/objectives/tests/test_objective_order.py | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/server/objectives/schema.py b/server/objectives/schema.py index e9e35046..03020c0a 100644 --- a/server/objectives/schema.py +++ b/server/objectives/schema.py @@ -1,5 +1,5 @@ import graphene -from django.db.models import Q +from django.db.models import F, Q from graphene import relay from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField @@ -55,11 +55,16 @@ class ObjectiveGroupNode(DjangoObjectType, HiddenForMixin): # todo # raise NotImplemented('not in correct order') + # order_by = + owner_last = F('owner').asc(nulls_first=True) + order_first = F('order').asc(nulls_last=True) if user.has_perm('users.can_manage_school_class_content'): # teacher - return base_qs.filter(objectives_from_publisher | objectives_from_user) + qs = base_qs.filter(objectives_from_publisher | objectives_from_user) else: # student - return base_qs.filter(objectives_from_publisher | objectives_from_teacher) + qs = base_qs.filter(objectives_from_publisher | objectives_from_teacher) + + return qs.order_by(owner_last, order_first) class ObjectivesQuery(object): diff --git a/server/objectives/tests/test_objective_order.py b/server/objectives/tests/test_objective_order.py index 08396988..112c7d76 100644 --- a/server/objectives/tests/test_objective_order.py +++ b/server/objectives/tests/test_objective_order.py @@ -29,8 +29,9 @@ class ObjectiveOrderTestCase(TestCase): self.client = Client(schema=schema, context_value=request) - Objective.objects.create(text='first', group=self.objective_group, order=0) + Objective.objects.create(text='fifth', group=self.objective_group, owner=user) Objective.objects.create(text='second', group=self.objective_group, order=1) + Objective.objects.create(text='first', group=self.objective_group, order=0) Objective.objects.create(text='third', group=self.objective_group) Objective.objects.create(text='fourth', group=self.objective_group) @@ -53,10 +54,11 @@ class ObjectiveOrderTestCase(TestCase): self.assertIsNone(result.get('errors')) objective_nodes = result.get('data').get('objectiveGroup').get('objectives') - objective1, objective2, objective3, objective4 = [node for node in objective_nodes] + objective1, objective2, objective3, objective4, objective5 = [node for node in objective_nodes] self.assertEqual(objective1.get('text'), 'first') self.assertEqual(objective2.get('text'), 'second') self.assertEqual(objective3.get('text'), 'third') self.assertEqual(objective4.get('text'), 'fourth') + self.assertEqual(objective5.get('text'), 'fifth')