[#6230] Don't escape html in text/html feed entries

Signed-off-by: Tim Van Steenburgh <tvansteenburgh@gmail.com>
diff --git a/ForgeBlog/forgeblog/command/rssfeeds.py b/ForgeBlog/forgeblog/command/rssfeeds.py
index 2b7f6e9..9f44fd4 100644
--- a/ForgeBlog/forgeblog/command/rssfeeds.py
+++ b/ForgeBlog/forgeblog/command/rssfeeds.py
@@ -145,9 +145,10 @@
     def process_entry(self, e, appid):
         title = e.title
         allura_base.log.info(" ...entry '%s'", title)
-        if 'content' in e:
+        parsed_content = filter(None, e.get('content') or [e.get('summary_detail')])
+        if parsed_content:
             content = u''
-            for ct in e.content:
+            for ct in parsed_content:
                 if ct.type != 'text/html':
                     content += plain2markdown(ct.value)
                 else:
diff --git a/ForgeBlog/forgeblog/tests/test_commands.py b/ForgeBlog/forgeblog/tests/test_commands.py
index 2b8363d..472efda 100644
--- a/ForgeBlog/forgeblog/tests/test_commands.py
+++ b/ForgeBlog/forgeblog/tests/test_commands.py
@@ -60,6 +60,8 @@
         entry['updated_parsed'] = entry['updated'].timetuple()
         if 'content' in entry:
             entry['content'] = [attrdict(type=entry['content_type'], value=entry['content'])]
+        if 'summary_detail' in entry:
+            entry['summary_detail'] = attrdict(entry['summary_detail'])
         feed.entries.append(entry)
 
     return feed
@@ -68,21 +70,33 @@
 @skipif(module_not_available('html2text'))
 @mock.patch.object(feedparser, 'parse')
 def test_pull_rss_feeds(parsefeed):
+    html_content = (
+        "<p>1. foo</p>\n"
+        "\n"
+        "<p>\n"
+        "#foo bar <a href='baz'>baz</a>\n"
+        "foo bar\n"
+        "</p>\n"
+        "\n"
+        "<p>#foo bar <a href='baz'>\n"
+        "baz\n"
+        "</a></p>\n"
+    )
+
+    rendered_html_content = "\n".join([
+       r"1\. foo",
+        "",
+       r"\#foo bar [baz](baz) foo bar ",
+        "",
+       r"\#foo bar [ baz ](baz)",
+        " [link](http://example.com/)",
+    ])
+
     parsefeed.return_value = _mock_feed(
         dict(title='Test', subtitle='test', summary='This is a test'),
         dict(content_type='text/plain', content='Test feed'),
-        dict(content_type='text/html', content=
-                "<p>1. foo</p>\n"
-                "\n"
-                "<p>\n"
-                "#foo bar <a href='baz'>baz</a>\n"
-                "foo bar\n"
-                "</p>\n"
-                "\n"
-                "<p>#foo bar <a href='baz'>\n"
-                "baz\n"
-                "</a></p>\n"
-            ),
+        dict(content_type='text/html', content=html_content),
+        dict(summary_detail=dict(type='text/html', value=html_content)),
     )
 
     base_app =  M.AppConfig.query.find().all()[0]
@@ -102,21 +116,16 @@
     cmd.command()
     parsefeed.assert_called_with('http://example.com/news/feed/')
     posts = BM.BlogPost.query.find({'app_config_id': tmp_app._id}).sort('timestamp', 1)
-    assert_equal(posts.count(), 3)
+    assert_equal(posts.count(), 4)
     posts = posts.all()
     assert_equal(posts[0].title, 'Test')
     assert_equal(posts[0].text, 'This is a test [link](http://example.com/)')
     assert_equal(posts[1].title, 'Default Title 2')
     assert_equal(posts[1].text, 'Test feed [link](http://example.com/)')
     assert_equal(posts[2].title, 'Default Title 3')
-    assert_equal(posts[2].text, "\n".join([
-       r"1\. foo",
-        "",
-       r"\#foo bar [baz](baz) foo bar ",
-        "",
-       r"\#foo bar [ baz ](baz)",
-        " [link](http://example.com/)",
-    ]))
+    assert_equal(posts[2].text, rendered_html_content)
+    assert_equal(posts[3].title, 'Default Title 4')
+    assert_equal(posts[3].text, rendered_html_content)
 
 @skipif(module_not_available('html2text'))
 def test_plaintext_preprocessor():