Add comment node to room entry
This commit is contained in:
parent
30b123523a
commit
9f858ea46c
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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'))
|
||||
|
|
|
|||
Loading…
Reference in New Issue