skillbox/server/books/tests/test_note_mutations.py

141 lines
5.1 KiB
Python

from django.test import TestCase, RequestFactory
from graphene.test import Client
from graphql_relay import to_global_id
from api.schema import schema
from api.utils import get_object, get_graphql_mutation
from books.models import ContentBlock, Chapter
from books.factories import ModuleFactory
from core.factories import UserFactory
from notes.factories import ChapterBookmarkFactory, ModuleBookmarkFactory
from notes.models import Note, ModuleBookmark, ChapterBookmark
class NoteMutationTestCase(TestCase):
def setUp(self):
self.module = ModuleFactory(slug='some-module-slug')
self.chapter = Chapter(title='Hello')
self.module.add_child(instance=self.chapter)
self.user = user = UserFactory(username='aschi')
content_block = ContentBlock(title='bla', slug='bla')
self.chapter.specific.add_child(instance=content_block)
ChapterBookmarkFactory.create(chapter=self.chapter, user=user)
ModuleBookmarkFactory.create(module=self.module, user=user)
request = RequestFactory().get('/')
request.user = user
self.client = Client(schema=schema, context_value=request)
self.add_mutation = get_graphql_mutation('addNote.gql')
self.update_mutation = get_graphql_mutation('updateNote.gql')
class NewNoteMutationTestCase(NoteMutationTestCase):
def test_add_chapter_note(self):
self.assertEqual(Note.objects.count(), 0)
text = 'Hello World'
result = self.client.execute(self.add_mutation, variables={
'input': {
'note': {
'parent': to_global_id('ChapterNode', self.chapter.pk),
'text': text
}
}
})
self.assertIsNone(result.get('errors'))
self.assertEqual(Note.objects.count(), 1)
self.assertEqual(Note.objects.first().text, text)
def test_add_module_note(self):
self.assertEqual(Note.objects.count(), 0)
text = 'Hello World'
result = self.client.execute(self.add_mutation, variables={
'input': {
'note': {
'parent': self.module.slug,
'text': text,
'type': 'module'
}
}
})
self.assertIsNone(result.get('errors'))
self.assertEqual(Note.objects.count(), 1)
self.assertEqual(Note.objects.first().text, text)
class UpdateNoteMutationTestCase(NoteMutationTestCase):
def setUp(self):
super(UpdateNoteMutationTestCase, self).setUp()
self.chapter_note = Note.objects.create(text='Hello World')
self.module_note = Note.objects.create(text='Hello World')
self.chapter_bookmark = ChapterBookmark.objects.get(user=self.user, chapter=self.chapter)
self.chapter_bookmark.note = self.chapter_note
self.chapter_bookmark.save()
self.module_bookmark = ModuleBookmark.objects.get(user=self.user, module=self.module)
self.module_bookmark.note = self.module_note
self.module_bookmark.save()
def test_change_module_note(self):
self.assertEqual(Note.objects.count(), 2)
self.assertEqual(self.module_bookmark.note.text, 'Hello World')
new_text = 'Salut monde'
result = self.client.execute(self.update_mutation, variables={
'input': {
'note': {
'id': to_global_id('NoteNode', self.module_bookmark.note.pk),
'text': new_text
}
}
})
self.assertIsNone(result.get('errors'))
bookmark = ModuleBookmark.objects.get(user=self.user, module=self.module)
self.assertEqual(bookmark.note.text, new_text)
self.assertEqual(Note.objects.count(), 2)
def test_change_chapter_note(self):
self.assertEqual(Note.objects.count(), 2)
self.assertEqual(self.chapter_bookmark.note.text, 'Hello World')
new_text = 'Salut monde'
result = self.client.execute(self.update_mutation, variables={
'input': {
'note': {
'id': to_global_id('NoteNode', self.chapter_bookmark.note.pk),
'text': new_text
}
}
})
self.assertIsNone(result.get('errors'))
bookmark = ChapterBookmark.objects.get(user=self.user, chapter=self.chapter)
self.assertEqual(bookmark.note.text, new_text)
self.assertEqual(Note.objects.count(), 2)
def test_update_wrong_user(self):
godis_note = Note.objects.create(text='Hello Godi')
godi = UserFactory(username='godi')
godis_bookmark = ModuleBookmarkFactory(module=self.module, user=godi)
godis_bookmark.note = godis_note
godis_bookmark.save()
result = self.client.execute(self.update_mutation, variables={
'input': {
'note': {
'id': to_global_id('NoteNode', godis_note.pk),
'text': 'Hello Aschi'
}
}
})
print(result.get('errors'))
self.assertIsNotNone(result.get('errors'))