from django.test import TestCase, RequestFactory from graphene.test import Client from graphql_relay import to_global_id from api.schema import schema from api.utils import get_object, get_graphql_mutation from books.models import ContentBlock, Chapter from books.factories import ModuleFactory from core.factories import UserFactory from core.management.commands import create_teacher from notes.factories import ChapterBookmarkFactory, ModuleBookmarkFactory from objectives.factories import ObjectiveGroupFactory from objectives.models import Objective from users.models import User from users.services import create_users class ObjectiveOrderTestCase(TestCase): def setUp(self): create_users() self.user = user = User.objects.get(username='teacher') self.objective_group = ObjectiveGroupFactory(owner=None) request = RequestFactory().get('/') request.user = user self.client = Client(schema=schema, context_value=request) Objective.objects.create(owner=None, text='first', group=self.objective_group, order=0) Objective.objects.create(owner=None, text='second', group=self.objective_group, order=1) Objective.objects.create(owner=None, text='third', group=self.objective_group) Objective.objects.create(owner=user, text='fourth', group=self.objective_group) def test_objective_order(self): query = """ query ObjectiveGroupQuery($id: ID!) { objectiveGroup(id: $id) { objectives { edges { node { id text } } } } } """ result = self.client.execute(query, variables={ 'id': to_global_id('ObjectiveGroupNode', self.objective_group.pk) }) self.assertIsNone(result.get('errors')) objective_nodes = result.get('data').get('objectiveGroup').get('objectives').get('edges') objective1, objective2, objective3, objective4 = [node['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')