Add update lastModuleCategory mutation
This commit is contained in:
parent
f60f0d68da
commit
23bf51db52
|
|
@ -28,7 +28,7 @@ from books.blocks import (
|
|||
SurveyBlock,
|
||||
VideoBlock,
|
||||
)
|
||||
from books.models import Book, Chapter, ContentBlock, Module, TextBlock, Topic
|
||||
from books.models import Book, Chapter, ContentBlock, Module, TextBlock, Topic, ModuleCategory, ModuleType
|
||||
from core.factories import (
|
||||
BasePageFactory,
|
||||
DummyImageFactory,
|
||||
|
|
@ -201,6 +201,17 @@ class VideoBlockFactory(wagtail_factories.StructBlockFactory):
|
|||
class Meta:
|
||||
model = VideoBlock
|
||||
|
||||
class ModuleCategoryFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = ModuleCategory
|
||||
name = '1. Lehrjahr'
|
||||
|
||||
|
||||
class ModuleTypeFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = ModuleType
|
||||
name = 'Lernfeld 1'
|
||||
|
||||
|
||||
block_types = [
|
||||
"text_block",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from books.schema.mutations.chapter import UpdateChapterVisibility
|
||||
from books.schema.mutations.contentblock import DuplicateContentBlock, MutateContentBlock, AddContentBlock, \
|
||||
DeleteContentBlock
|
||||
from books.schema.mutations.module import UpdateSolutionVisibility, UpdateLastModule, SyncModuleVisibility
|
||||
from books.schema.mutations.module import UpdateSolutionVisibility, UpdateLastModule, SyncModuleVisibility, UpdateLastModuleCategory
|
||||
from books.schema.mutations.snapshot import CreateSnapshot, ApplySnapshot, ShareSnapshot, UpdateSnapshot, DeleteSnapshot
|
||||
from books.schema.mutations.topic import UpdateLastTopic
|
||||
|
||||
|
|
@ -14,6 +14,7 @@ class BookMutations(object):
|
|||
update_solution_visibility = UpdateSolutionVisibility.Field()
|
||||
update_last_module = UpdateLastModule.Field()
|
||||
update_last_topic = UpdateLastTopic.Field()
|
||||
update_last_module_category = UpdateLastModuleCategory.Field()
|
||||
update_chapter_visibility = UpdateChapterVisibility.Field()
|
||||
sync_module_visibility = SyncModuleVisibility.Field()
|
||||
create_snapshot = CreateSnapshot.Field()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
from datetime import datetime
|
||||
|
||||
import graphene
|
||||
from django.utils import timezone
|
||||
from graphene import relay
|
||||
|
|
@ -7,7 +5,8 @@ from graphene import relay
|
|||
from api.utils import get_object
|
||||
from books.models import Module, RecentModule
|
||||
from books.schema.nodes import ModuleNode
|
||||
from users.models import SchoolClass
|
||||
from users.models import SchoolClass, User
|
||||
from users.schema import PrivateUserNode
|
||||
|
||||
|
||||
class UpdateSolutionVisibility(relay.ClientIDMutation):
|
||||
|
|
@ -104,3 +103,18 @@ class SyncModuleVisibility(relay.ClientIDMutation):
|
|||
module.sync_from_school_class(template, school_class)
|
||||
|
||||
return cls(success=True)
|
||||
|
||||
|
||||
class UpdateLastModuleCategory(relay.ClientIDMutation):
|
||||
class Input:
|
||||
id = graphene.ID()
|
||||
|
||||
user = graphene.Field(PrivateUserNode)
|
||||
|
||||
@classmethod
|
||||
def mutate_and_get_payload(cls, root, info, **args):
|
||||
user = info.context.user
|
||||
id = args.get('id')
|
||||
|
||||
User.objects.filter(pk=user.id).update(last_module_category_id=id)
|
||||
return cls(user=user)
|
||||
|
|
|
|||
|
|
@ -5,8 +5,9 @@ from graphql_relay import to_global_id
|
|||
from api.schema import schema
|
||||
from api.utils import get_object
|
||||
from books.models import ContentBlock, Chapter
|
||||
from books.factories import ModuleFactory
|
||||
from books.factories import ModuleFactory, ModuleCategoryFactory
|
||||
from core.factories import UserFactory
|
||||
from users.models import User
|
||||
|
||||
|
||||
class NewContentBlockMutationTest(TestCase):
|
||||
|
|
@ -14,12 +15,12 @@ class NewContentBlockMutationTest(TestCase):
|
|||
module = ModuleFactory()
|
||||
chapter = Chapter(title='Hello')
|
||||
module.add_child(instance=chapter)
|
||||
user = UserFactory(username='aschi')
|
||||
self.user = UserFactory(username='aschi')
|
||||
content_block = ContentBlock(title='bla', slug='bla')
|
||||
chapter.specific.add_child(instance=content_block)
|
||||
|
||||
request = RequestFactory().get('/')
|
||||
request.user = user
|
||||
request.user = self.user
|
||||
self.client = Client(schema=schema, context_value=request)
|
||||
|
||||
self.sibling_id = to_global_id('ContentBlockNode', content_block.pk)
|
||||
|
|
@ -120,3 +121,27 @@ class NewContentBlockMutationTest(TestCase):
|
|||
content = new_content_block['contents'][0]
|
||||
self.assertEqual(content.get('type'), 'image_url_block')
|
||||
self.assertEqual(content.get('value'), {'url': '/test.png'})
|
||||
|
||||
def test_updateLastModuleCategory(self):
|
||||
self.assertIsNone(self.user.last_module_category, None)
|
||||
|
||||
moduleCategory = ModuleCategoryFactory(name='1. Lehrjahr')
|
||||
moduleCategory1 = ModuleCategoryFactory(name='2. Lehrjahr')
|
||||
|
||||
mutation = """
|
||||
mutation ($input: UpdateLastModuleCategoryInput!){updateLastModuleCategory(input: $input) {
|
||||
clientMutationId
|
||||
user {
|
||||
username
|
||||
lastModuleCategory {
|
||||
name
|
||||
id
|
||||
}
|
||||
}
|
||||
}}
|
||||
"""
|
||||
result = self.client.execute(mutation, variables={"input": {"id": moduleCategory1.id}})
|
||||
self.assertIsNone(result.get('errors'))
|
||||
|
||||
updated_user = User.objects.get(id=self.user.id)
|
||||
self.assertEqual(updated_user.last_module_category.name, moduleCategory1.name)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ class User(AbstractUser):
|
|||
|
||||
last_module = models.ForeignKey('books.Module', related_name='+', on_delete=models.SET_NULL, null=True)
|
||||
recent_modules = models.ManyToManyField('books.Module', related_name='+', through='books.RecentModule')
|
||||
last_module_category = models.ForeignKey('books.ModuleCategory', related_name='+', on_delete=models.SET_NULL, null=True)
|
||||
last_topic = models.ForeignKey('books.Topic', related_name='+', on_delete=models.SET_NULL, null=True)
|
||||
avatar_url = models.CharField(max_length=254, blank=True, default='')
|
||||
email = models.EmailField(_('email address'), unique=True)
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ from graphql_relay import to_global_id
|
|||
from api.types import FailureNode
|
||||
|
||||
from books.models import Module
|
||||
from books.schema.nodes import ModuleCategoryNode
|
||||
from books.schema.queries import ModuleNode
|
||||
from users.models import SchoolClass, SchoolClassMember, Team, User
|
||||
|
||||
|
|
@ -113,6 +114,8 @@ class PrivateUserNode(DjangoObjectType):
|
|||
is_teacher = graphene.Boolean()
|
||||
old_classes = graphene.List(SchoolClassNode)
|
||||
school_classes = graphene.List(SchoolClassNode)
|
||||
last_module_category = graphene.Field(ModuleCategoryNode)
|
||||
|
||||
recent_modules = DjangoFilterConnectionField(
|
||||
ModuleNode, filterset_class=RecentModuleFilter
|
||||
)
|
||||
|
|
@ -160,6 +163,9 @@ class PrivateUserNode(DjangoObjectType):
|
|||
def resolve_team(self, info, **kwargs):
|
||||
return self.team
|
||||
|
||||
def resolve_last_module_category(self, info, **kwargs):
|
||||
return self.last_module_category
|
||||
|
||||
|
||||
class ClassMemberNode(ObjectType):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue