|
|
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
|
|
|
|
|
|
__author__ = 'neko259'
|
|
|
|
|
|
|
|
|
from django.test import TestCase
|
|
|
|
|
|
|
|
|
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 = Tag.objects.create(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>'
|
|
|
'</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().name,
|
|
|
post.get_pub_time_str(),
|
|
|
) 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().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>'
|
|
|
'</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().name,
|
|
|
post.get_pub_time_str(),
|
|
|
) in response,
|
|
|
'Wrong response generated for the GET request.')
|
|
|
|