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
|
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):
|
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 graphene.test import Client
|
||||||
|
|
||||||
from api.schema import schema
|
from api.schema import schema
|
||||||
from users.models import User
|
from users.models import SchoolClass, User
|
||||||
from users.services import create_users
|
from users.services import create_users
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -15,6 +15,8 @@ class SkillboxTestCase(TestCase):
|
||||||
self.student2 = User.objects.get(username='student2')
|
self.student2 = User.objects.get(username='student2')
|
||||||
self.student_second_class = User.objects.get(username='student_second_class')
|
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:
|
def get_client(self, user=None) -> Client:
|
||||||
request = RequestFactory().get('/')
|
request = RequestFactory().get('/')
|
||||||
if user is None:
|
if user is None:
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from wagtail.core.rich_text import RichText
|
||||||
|
|
||||||
from books.factories import TextBlockFactory, ImageUrlBlockFactory, LinkBlockFactory
|
from books.factories import TextBlockFactory, ImageUrlBlockFactory, LinkBlockFactory
|
||||||
from core.factories import fake, fake_paragraph
|
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
|
from users.models import SchoolClass
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -86,3 +86,9 @@ class ModuleRoomSlugFactory(factory.django.DjangoModelFactory):
|
||||||
slug = factory.Sequence(lambda n: u'slug-{:d}'.format(n))
|
slug = factory.Sequence(lambda n: u'slug-{:d}'.format(n))
|
||||||
title = factory.Sequence(lambda n: u'Title {: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__)
|
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):
|
class RoomEntryNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
author = graphene.Field('users.schema.PublicUserNode')
|
author = graphene.Field('users.schema.PublicUserNode')
|
||||||
|
comments = DjangoFilterConnectionField(CommentNode)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RoomEntry
|
model = RoomEntry
|
||||||
|
|
@ -42,14 +53,6 @@ class RoomNode(DjangoObjectType):
|
||||||
return self.room_entries.count()
|
return self.room_entries.count()
|
||||||
|
|
||||||
|
|
||||||
class CommentNode(DjangoObjectType):
|
|
||||||
owner = graphene.Field(PublicUserNode)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Comment
|
|
||||||
interfaces = (relay.Node,)
|
|
||||||
|
|
||||||
|
|
||||||
class RoomsQuery(object):
|
class RoomsQuery(object):
|
||||||
# room = relay.Node.Field(RoomNode)
|
# room = relay.Node.Field(RoomNode)
|
||||||
room_entry = graphene.Field(RoomEntryNode, id=graphene.ID(), slug=graphene.String())
|
room_entry = graphene.Field(RoomEntryNode, id=graphene.ID(), slug=graphene.String())
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,26 @@
|
||||||
from graphql_relay import to_global_id
|
from graphql_relay import to_global_id
|
||||||
|
|
||||||
from core.tests.base_test import SkillboxTestCase
|
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):
|
class CommentTestCase(SkillboxTestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
self.createDefault()
|
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):
|
def test_add_comment(self):
|
||||||
room_entry = RoomEntryFactory()
|
room_entry = self.room_entry
|
||||||
text = 'First!!!'
|
|
||||||
|
|
||||||
mutation = """
|
mutation = """
|
||||||
mutation AddComment($input: AddCommentInput!) {
|
mutation AddComment($input: AddCommentInput!) {
|
||||||
|
|
@ -21,16 +31,57 @@ mutation AddComment($input: AddCommentInput!) {
|
||||||
"""
|
"""
|
||||||
self.assertEqual(room_entry.comments.count(), 0)
|
self.assertEqual(room_entry.comments.count(), 0)
|
||||||
|
|
||||||
room_entry_id = to_global_id('RoomEntryNode', room_entry.id)
|
|
||||||
|
|
||||||
result = self.get_client().execute(mutation, variables={
|
result = self.get_client().execute(mutation, variables={
|
||||||
'input': {
|
'input': {
|
||||||
'roomEntry': room_entry_id,
|
'roomEntry': self.room_entry_id,
|
||||||
'comment': text
|
'comment': self.text
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
self.assertIsNone(result.get('errors'))
|
self.assertIsNone(result.get('errors'))
|
||||||
self.assertEqual(room_entry.comments.count(), 1)
|
self.assertEqual(room_entry.comments.count(), 1)
|
||||||
comment = room_entry.comments.first()
|
comment = room_entry.comments.first()
|
||||||
self.assertEqual(comment.text, text)
|
self.assertEqual(comment.text, self.text)
|
||||||
self.assertEqual(comment.owner.id, self.teacher.id)
|
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