Add comment node to room entry

This commit is contained in:
Ramon Wenger 2021-08-23 15:57:08 +02:00
parent 30b123523a
commit 9f858ea46c
5 changed files with 81 additions and 19 deletions

View File

@ -12,7 +12,7 @@ from wagtail.images import get_image_model
from users.models import Role, UserRole
fake = Faker('de_CH')
fake = Faker(['de_CH', 'en-US'])
def fake_title(x=None, min_words=2, max_words=4):

View File

@ -2,7 +2,7 @@ from django.test import TestCase, RequestFactory
from graphene.test import Client
from api.schema import schema
from users.models import User
from users.models import SchoolClass, User
from users.services import create_users
@ -15,6 +15,8 @@ class SkillboxTestCase(TestCase):
self.student2 = User.objects.get(username='student2')
self.student_second_class = User.objects.get(username='student_second_class')
self.school_class = SchoolClass.objects.get(name='skillbox')
def get_client(self, user=None) -> Client:
request = RequestFactory().get('/')
if user is None:

View File

@ -8,7 +8,7 @@ from wagtail.core.rich_text import RichText
from books.factories import TextBlockFactory, ImageUrlBlockFactory, LinkBlockFactory
from core.factories import fake, fake_paragraph
from rooms.models import Room, RoomEntry, ModuleRoomSlug
from rooms.models import Comment, Room, RoomEntry, ModuleRoomSlug
from users.models import SchoolClass
@ -86,3 +86,9 @@ class ModuleRoomSlugFactory(factory.django.DjangoModelFactory):
slug = factory.Sequence(lambda n: u'slug-{:d}'.format(n))
title = factory.Sequence(lambda n: u'Title {:d}'.format(n))
class CommentFactory(factory.django.DjangoModelFactory):
class Meta:
model = Comment
text = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(10, 30)))

View File

@ -13,9 +13,20 @@ from users.schema import PublicUserNode
logger = logging.getLogger(__name__)
class CommentNode(DjangoObjectType):
owner = graphene.Field(PublicUserNode)
class Meta:
model = Comment
interfaces = (relay.Node,)
filter_fields = ['owner', ]
only_fields = ('owner', 'text', 'created')
class RoomEntryNode(DjangoObjectType):
pk = graphene.Int()
author = graphene.Field('users.schema.PublicUserNode')
comments = DjangoFilterConnectionField(CommentNode)
class Meta:
model = RoomEntry
@ -42,14 +53,6 @@ class RoomNode(DjangoObjectType):
return self.room_entries.count()
class CommentNode(DjangoObjectType):
owner = graphene.Field(PublicUserNode)
class Meta:
model = Comment
interfaces = (relay.Node,)
class RoomsQuery(object):
# room = relay.Node.Field(RoomNode)
room_entry = graphene.Field(RoomEntryNode, id=graphene.ID(), slug=graphene.String())

View File

@ -1,16 +1,26 @@
from graphql_relay import to_global_id
from core.tests.base_test import SkillboxTestCase
from rooms.factories import RoomEntryFactory
from rooms.factories import CommentFactory, RoomEntryFactory, RoomFactory
class GQLResult:
def __init__(self, result):
self.data = result.get('data')
self.errors = result.get('errors')
class CommentTestCase(SkillboxTestCase):
def setUp(self) -> None:
self.createDefault()
room = RoomFactory(school_class=self.school_class)
self.room_entry = RoomEntryFactory(room=room, author=self.teacher)
self.room_entry_id = to_global_id('RoomEntryNode', self.room_entry.id)
self.text = 'First!!!'
def test_add_comment(self):
room_entry = RoomEntryFactory()
text = 'First!!!'
room_entry = self.room_entry
mutation = """
mutation AddComment($input: AddCommentInput!) {
@ -21,16 +31,57 @@ mutation AddComment($input: AddCommentInput!) {
"""
self.assertEqual(room_entry.comments.count(), 0)
room_entry_id = to_global_id('RoomEntryNode', room_entry.id)
result = self.get_client().execute(mutation, variables={
'input': {
'roomEntry': room_entry_id,
'comment': text
'roomEntry': self.room_entry_id,
'comment': self.text
}
})
self.assertIsNone(result.get('errors'))
self.assertEqual(room_entry.comments.count(), 1)
comment = room_entry.comments.first()
self.assertEqual(comment.text, text)
self.assertEqual(comment.text, self.text)
self.assertEqual(comment.owner.id, self.teacher.id)
def test_get_comment(self):
CommentFactory(room_entry=self.room_entry, text=self.text, owner=self.teacher)
query = """
query CommentsQuery($id: ID!) {
roomEntry(id: $id) {
comments {
edges {
node {
text
}
}
}
}
}
"""
result = self.get_client().execute(query, variables={"id": self.room_entry_id})
self.assertIsNone(result.get('errors'))
comment_node = result.get('data').get('roomEntry').get('comments').get('edges')[0].get('node')
self.assertEqual(comment_node['text'], self.text)
def test_get_comment_for_other_user(self):
CommentFactory(room_entry=self.room_entry, text=self.text, owner=self.teacher)
query = """
query CommentsQuery($id: ID!) {
roomEntry(id: $id) {
comments {
edges {
node {
text
}
}
}
}
}
"""
result = self.get_client(self.student_second_class).execute(query, variables={"id": self.room_entry_id})
gql_result = GQLResult(result)
self.assertIsNone(gql_result.errors)
self.assertIsNone(gql_result.data.get('roomEntry'))