##// END OF EJS Templates
Made quote button actually button so it is impossible to accidentally quote its text
Made quote button actually button so it is impossible to accidentally quote its text

File last commit:

r1895:19684540 default
r1909:004a4ff8 default
Show More
test_sync.py
253 lines | 9.1 KiB | text/x-python | PythonLexer
from django.test import TestCase
from boards.models import KeyPair, Post, Tag
from boards.models.post.sync import SyncManager
from boards.tests.mocks import MockRequest
from boards.views.sync import response_get, response_list
__author__ = 'neko259'
class SyncTest(TestCase):
def test_get(self):
"""
Forms a GET request of a post and checks the response.
"""
key = KeyPair.objects.generate_key(primary=True)
tag, created = Tag.objects.get_or_create_with_alias(name='tag1')
post = Post.objects.create_post(title='test_title',
text='test_text\rline two',
tags=[tag])
request = MockRequest()
request.body = (
'<request type="get" version="1.0">'
'<model name="post" version="1.0">'
'<id key="%s" local-id="%d" type="%s" />'
'</model>'
'</request>' % (post.global_id.key,
post.id,
post.global_id.key_type)
)
response = response_get(request).content.decode()
self.assertTrue(
'<status>success</status>'
'<models>'
'<model name="post">'
'<content>'
'<id key="%s" local-id="%d" type="%s" />'
'<title>%s</title>'
'<text>%s</text>'
'<tags><tag>%s</tag></tags>'
'<pub-time>%s</pub-time>'
'<version>%s</version>'
'</content>' % (
post.global_id.key,
post.global_id.local_id,
post.global_id.key_type,
post.title,
post.get_sync_text(),
post.get_thread().get_tags().first().get_name(),
post.get_pub_time_str(),
post.version,
) in response,
'Wrong response generated for the GET request.')
post.delete()
key.delete()
KeyPair.objects.generate_key(primary=True)
SyncManager.parse_response_get(response, None)
self.assertEqual(1, Post.objects.count(),
'Post was not created from XML response.')
parsed_post = Post.objects.first()
self.assertEqual('tag1',
parsed_post.get_thread().get_tags().first().get_name(),
'Invalid tag was parsed.')
SyncManager.parse_response_get(response, None)
self.assertEqual(1, Post.objects.count(),
'The same post was imported twice.')
self.assertEqual(1, parsed_post.global_id.signature_set.count(),
'Signature was not saved.')
post = parsed_post
# Trying to sync the same once more
response = response_get(request).content.decode()
self.assertTrue(
'<status>success</status>'
'<models>'
'<model name="post">'
'<content>'
'<id key="%s" local-id="%d" type="%s" />'
'<title>%s</title>'
'<text>%s</text>'
'<tags><tag>%s</tag></tags>'
'<pub-time>%s</pub-time>'
'<version>%s</version>'
'</content>' % (
post.global_id.key,
post.global_id.local_id,
post.global_id.key_type,
post.title,
post.get_sync_text(),
post.get_thread().get_tags().first().get_name(),
post.get_pub_time_str(),
post.version,
) in response,
'Wrong response generated for the GET request.')
def test_list_all(self):
key = KeyPair.objects.generate_key(primary=True)
tag, created = Tag.objects.get_or_create_with_alias(name='tag1')
post = Post.objects.create_post(title='test_title',
text='test_text\rline two',
tags=[tag])
post2 = Post.objects.create_post(title='test title 2',
text='test text 2',
tags=[tag])
request_all = MockRequest()
request_all.body = (
'<request type="list" version="1.0">'
'<model name="post" version="1.0">'
'</model>'
'</request>'
)
response_all = response_list(request_all).content.decode()
self.assertTrue(
'<status>success</status>'
'<models>'
'<model>'
'<id key="{}" local-id="{}" type="{}" />'
'<version>{}</version>'
'</model>'
'<model>'
'<id key="{}" local-id="{}" type="{}" />'
'<version>{}</version>'
'</model>'
'</models>'.format(
post.global_id.key,
post.global_id.local_id,
post.global_id.key_type,
post.version,
post2.global_id.key,
post2.global_id.local_id,
post2.global_id.key_type,
post2.version,
) in response_all,
'Wrong response generated for the LIST request for all posts.')
def test_list_existing_thread(self):
key = KeyPair.objects.generate_key(primary=True)
tag, created = Tag.objects.get_or_create_with_alias(name='tag1')
post = Post.objects.create_post(title='test_title',
text='test_text\rline two',
tags=[tag])
post2 = Post.objects.create_post(title='test title 2',
text='test text 2',
tags=[tag])
request_thread = MockRequest()
request_thread.body = (
'<request type="list" version="1.0">'
'<model name="post" version="1.0">'
'<thread>{}</thread>'
'</model>'
'</request>'.format(
post.id,
)
)
response_thread = response_list(request_thread).content.decode()
self.assertTrue(
'<status>success</status>'
'<models>'
'<model>'
'<id key="{}" local-id="{}" type="{}" />'
'<version>{}</version>'
'</model>'
'</models>'.format(
post.global_id.key,
post.global_id.local_id,
post.global_id.key_type,
post.version,
) in response_thread,
'Wrong response generated for the LIST request for posts of '
'existing thread.')
def test_list_non_existing_thread(self):
key = KeyPair.objects.generate_key(primary=True)
tag, created = Tag.objects.get_or_create_with_alias(name='tag1')
post = Post.objects.create_post(title='test_title',
text='test_text\rline two',
tags=[tag])
post2 = Post.objects.create_post(title='test title 2',
text='test text 2',
tags=[tag])
request_thread = MockRequest()
request_thread.body = (
'<request type="list" version="1.0">'
'<model name="post" version="1.0">'
'<thread>{}</thread>'
'</model>'
'</request>'.format(
0,
)
)
response_thread = response_list(request_thread).content.decode()
self.assertTrue(
'<status>success</status>'
'<models />'
in response_thread,
'Wrong response generated for the LIST request for posts of '
'non-existing thread.')
def test_list_pub_time(self):
key = KeyPair.objects.generate_key(primary=True)
tag, created = Tag.objects.get_or_create_with_alias(name='tag1')
post = Post.objects.create_post(title='test_title',
text='test_text\rline two',
tags=[tag])
post2 = Post.objects.create_post(title='test title 2',
text='test text 2',
tags=[tag])
request_thread = MockRequest()
request_thread.body = (
'<request type="list" version="1.0">'
'<model name="post" version="1.0">'
'<timestamp_from>{}</timestamp_from>'
'</model>'
'</request>'.format(
post.pub_time,
)
)
response_thread = response_list(request_thread).content.decode()
self.assertTrue(
'<status>success</status>'
'<models>'
'<model>'
'<id key="{}" local-id="{}" type="{}" />'
'<version>{}</version>'
'</model>'
'</models>'.format(
post2.global_id.key,
post2.global_id.local_id,
post2.global_id.key_type,
post2.version,
) in response_thread,
'Wrong response generated for the LIST request for posts of '
'existing thread.')