From fa98141f3cb764c9857780b50ff870bdcec67ecb Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Thu, 11 Apr 2019 10:12:15 +0200 Subject: [PATCH] add myActivity query --- server/api/schema.py | 4 +- server/assignments/factories.py | 12 +++- server/assignments/schema/queries.py | 9 +++ server/assignments/schema/types.py | 1 + .../assignments/tests/test_myassignments.py | 70 +++++++++++++++++++ 5 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 server/assignments/tests/test_myassignments.py diff --git a/server/api/schema.py b/server/api/schema.py index ecc7e9dd..961cdf35 100644 --- a/server/api/schema.py +++ b/server/api/schema.py @@ -6,7 +6,7 @@ from graphene_django.debug import DjangoDebug # noinspection PyUnresolvedReferences from api import graphene_wagtail # Keep this import exactly here, it's necessary for StreamField conversion from assignments.schema.mutations import AssignmentMutations -from assignments.schema.queries import AssignmentsQuery, StudentSubmissionQuery +from assignments.schema.queries import AssignmentsQuery, StudentSubmissionQuery, MyActivityQuery from basicknowledge.queries import BasicKnowledgeQuery from books.schema.mutations.main import BookMutations from books.schema.queries import BookQuery @@ -22,7 +22,7 @@ from users.mutations import ProfileMutations class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, AssignmentsQuery, StudentSubmissionQuery, - BasicKnowledgeQuery, PortfolioQuery, graphene.ObjectType): + BasicKnowledgeQuery, PortfolioQuery, MyActivityQuery, graphene.ObjectType): node = relay.Node.Field() if settings.DEBUG: diff --git a/server/assignments/factories.py b/server/assignments/factories.py index 2c0638e1..7711ff2f 100644 --- a/server/assignments/factories.py +++ b/server/assignments/factories.py @@ -3,10 +3,11 @@ import random import factory from books.factories import ModuleFactory -from .models import Assignment +from .models import Assignment, StudentSubmission from core.factories import fake + class AssignmentFactory(factory.django.DjangoModelFactory): class Meta: model = Assignment @@ -14,3 +15,12 @@ class AssignmentFactory(factory.django.DjangoModelFactory): title = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8))) assignment = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8))) module = factory.SubFactory(ModuleFactory) + + +class StudentSubmissionFactory(factory.django.DjangoModelFactory): + class Meta: + model = StudentSubmission + + text = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8))) + assignment = factory.SubFactory(AssignmentFactory) + final = False diff --git a/server/assignments/schema/queries.py b/server/assignments/schema/queries.py index 5bb67e28..6207b50b 100644 --- a/server/assignments/schema/queries.py +++ b/server/assignments/schema/queries.py @@ -1,6 +1,7 @@ from graphene import relay from graphene_django.filter import DjangoFilterConnectionField +from assignments.models import StudentSubmission from assignments.schema.types import AssignmentNode, StudentSubmissionNode @@ -12,3 +13,11 @@ class AssignmentsQuery(object): class StudentSubmissionQuery(object): student_submission = relay.Node.Field(StudentSubmissionNode) + +class MyActivityQuery(object): + # my_activity = relay.Node.Field(StudentSubmissionNode) + my_activity = DjangoFilterConnectionField(StudentSubmissionNode) + + def resolve_my_activity(self, info, **kwargs): + user = info.context.user + return StudentSubmission.objects.filter(student=user) diff --git a/server/assignments/schema/types.py b/server/assignments/schema/types.py index 88b57e43..92107b8a 100644 --- a/server/assignments/schema/types.py +++ b/server/assignments/schema/types.py @@ -9,6 +9,7 @@ from books.utils import are_solutions_enabled_for class StudentSubmissionNode(DjangoObjectType): class Meta: model = StudentSubmission + filter_fields = [] interfaces = (relay.Node,) diff --git a/server/assignments/tests/test_myassignments.py b/server/assignments/tests/test_myassignments.py new file mode 100644 index 00000000..1e00e1cd --- /dev/null +++ b/server/assignments/tests/test_myassignments.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# +# ITerativ GmbH +# http://www.iterativ.ch/ +# +# Copyright (c) 2019 ITerativ GmbH. All rights reserved. +# +# Created on 2019-04-11 +# @author: chrigu +from django.conf import settings +import json + +from django.test import TestCase, RequestFactory +from graphene.test import Client + +from api import schema +from api.schema import schema +from api.test_utils import DefaultUserTestCase, create_client +from assignments.factories import AssignmentFactory, StudentSubmissionFactory +from assignments.models import Assignment +from books.factories import ModuleFactory +from books.models import ContentBlock, Chapter +from core.factories import UserFactory +from users.models import User +from users.services import create_users + + +class MyAssignemntsText(DefaultUserTestCase): + def setUp(self): + super(MyAssignemntsText, self).setUp() + self.assignment = AssignmentFactory( + owner=self.teacher + ) + + self.submission1 = StudentSubmissionFactory(student=self.student1, assignment=self.assignment) + self.submission2 = StudentSubmissionFactory(student=self.student2, assignment=self.assignment) + + self.client = create_client(self.student1) + + def query_my_assignments(self): + query = ''' + query { + myActivity { + edges { + node { + text + assignment { + title + } + } + } + } + } + ''' + + result = self.client.execute(query) + + self.assertIsNone(result.get('errors')) + return result + + @staticmethod + def get_content(result): + return result.get('data').get('myActivity').get('edges') + + def test_my_assignment_query(self): + result = self.query_my_assignments() + contents = self.get_content(result) + self.assertEqual(len(contents), 1) + self.assertEquals(contents[0].get('node').get('text'), self.submission1.text) +