def _post_serializer(obj, request): """Serialize :class:`fanboi2.models.Post` into a :type:`dict`. :param obj: A :class:`fanboi2.models.Post` object. :param request: A :class:`pyramid.request.Request` object. :type obj: fanboi2.models.Post :type request: pyramid.request.Request :rtype: dict """ result = { 'type': 'post', 'id': obj.id, 'body': obj.body, 'body_formatted': format_post(None, request, obj), 'bumped': obj.bumped, 'created_at': obj.created_at, 'ident': obj.ident, 'name': obj.name, 'number': obj.number, 'topic_id': obj.topic_id, 'path': request.route_path( 'api_topic_posts_scoped', topic=obj.topic_id, query=obj.number, ), } if request.params.get('topic'): result['topic'] = obj.topic return result
def test_format_post_shorten(self): from fanboi2.helpers.formatters import format_post from markupsafe import Markup request = self._makeRequest() config = self._makeConfig(request) config.add_route('topic_scoped', '/{board}/{topic}/{query}') board = self._makeBoard(title="Foobar", slug="foobar") topic = self._makeTopic(board=board, title="Hogehogehogehogehoge") post = self._makePost(topic=topic, body="Hello\nworld") self.assertEqual(format_post(None, request, post, shorten=5), Markup("<p>Hello</p>\n<p class=\"shortened\">" "Post shortened. <a href=\"/foobar/1/1-\" " "class=\"anchor\">See full post</a>.</p>"))
def test_format_post(self): from fanboi2.helpers.formatters import format_post from markupsafe import Markup request = self._makeRequest() config = self._makeConfig(request) config.add_route('board', '/{board}') config.add_route('topic_scoped', '/{board}/{topic}/{query}') board = self._makeBoard(title="Foobar", slug="foobar") topic = self._makeTopic(board=board, title="Hogehogehogehogehoge") post1 = self._makePost(topic=topic, body="Hogehoge\nHogehoge") post2 = self._makePost(topic=topic, body=">>1") post3 = self._makePost(topic=topic, body=">>1-2\nHoge") post4 = self._makePost(topic=topic, body=">>>/demo") post5 = self._makePost(topic=topic, body=">>>/demo/123") post6 = self._makePost(topic=topic, body=">>>/demo/123/100-") post7 = self._makePost(topic=topic, body=">>>/demo/123/100-/") post8 = self._makePost(topic=topic, body=">>>/demo/123-/100-/") post9 = self._makePost(topic=topic, body=">>>/demo/\n>>>/demo/1/") post10 = self._makePost(topic=topic, body=">>>/demo//100-/") post11 = self._makePost(topic=topic, body=">>>//123-/100-/") tests = ( (post1, "<p>Hogehoge<br>Hogehoge</p>"), (post2, "<p><a data-anchor-topic=\"1\" " + "data-anchor=\"1\" " + "href=\"/foobar/1/1\" " + "class=\"anchor\">>>1</a></p>"), (post3, "<p><a data-anchor-topic=\"1\" " + "data-anchor=\"1-2\" " + "href=\"/foobar/1/1-2\" " + "class=\"anchor\">>>1-2</a><br>Hoge</p>"), (post4, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"\" " + "data-anchor=\"\" " + "href=\"/demo\" " + "class=\"anchor\">>>>/demo</a></p>"), (post5, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"123\" " + "data-anchor=\"\" " + "href=\"/demo/123/recent\" " + "class=\"anchor\">>>>/demo/123</a></p>"), (post6, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"123\" " + "data-anchor=\"100-\" " + "href=\"/demo/123/100-\" " + "class=\"anchor\">>>>/demo/123/100-</a></p>"), (post7, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"123\" " + "data-anchor=\"100-\" " + "href=\"/demo/123/100-\" " + "class=\"anchor\">>>>/demo/123/100-/</a></p>"), (post8, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"123\" " + "data-anchor=\"\" " + "href=\"/demo/123/recent\" " + "class=\"anchor\">>>>/demo/123</a>-/100-/</p>"), (post9, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"\" " + "data-anchor=\"\" " + "href=\"/demo\" " + "class=\"anchor\">>>>/demo/</a><br>" + "<a data-anchor-board=\"demo\" " + "data-anchor-topic=\"1\" " + "data-anchor=\"\" " + "href=\"/demo/1/recent\" " + "class=\"anchor\">>>>/demo/1/</a></p>"), (post10, "<p><a data-anchor-board=\"demo\" " + "data-anchor-topic=\"\" " + "data-anchor=\"\" " + "href=\"/demo\" " + "class=\"anchor\">>>>/demo/</a>/100-/</p>"), (post11, "<p>>>>//123-/100-/</p>") ) for source, target in tests: self.assertEqual(format_post(None, request, source), Markup(target))