[#5726] Rss feed now updates correctly for new topics.
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py
index cf1116e..9174fba 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -131,7 +131,8 @@ def save_new_topic(self, subject=None, text=None, forum=None, **kw):
require_access(discussion, 'post')
thd = discussion.get_discussion_thread(dict(
headers=dict(Subject=subject)))[0]
- thd.post(subject, text)
+ p = thd.post(subject, text)
+ thd.post_to_feed(p)
flash('Message posted')
redirect(thd.url())
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 34b71c9..3f45b46 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -27,6 +27,7 @@
import pkg_resources
from pylons import tmpl_context as c
from nose.tools import assert_equal, assert_in
+import feedparser
from allura import model as M
from allura.tasks import mail_tasks
@@ -632,6 +633,69 @@ def test_thread_announcement(self):
r = self.app.get('/discussion/testforum/childforum/')
self.check_announcement_table(r, 'AAAA')
+ def test_post_to_feed(self):
+ # Create a new topic
+ r = self.app.get('/discussion/create_topic/')
+ f = r.html.find(
+ 'form', {'action': '/p/test/discussion/save_new_topic'})
+ params = dict()
+ inputs = f.findAll('input')
+ for field in inputs:
+ if field.has_key('name'):
+ params[field['name']] = field.has_key(
+ 'value') and field['value'] or ''
+ params[f.find('textarea')['name']] = 'XYZ'
+ params[f.find('select')['name']] = 'testforum'
+ params[f.find('input', {'style': 'width: 90%'})['name']] = 'AAAA'
+ thread = self.app.post('/discussion/save_new_topic', params=params).follow()
+ url = thread.request.url
+
+ # Check that the newly created topic is the most recent in the rss feed
+ f = self.app.get('/discussion/feed.rss').body
+ f = feedparser.parse(f)
+ newest_entry = f['entries'][0]['summary_detail']['value'].split("</p>")[0].split("<p>")[-1]
+ assert newest_entry == 'XYZ'
+
+ # Reply to the newly created thread.
+ thread = self.app.get(url)
+ t = thread.html.find(
+ 'div', {'class': 'row reply_post_form'}).find('form')
+ rep_url = t.get('action')
+ params = dict()
+ inputs = t.findAll('input')
+ for field in inputs:
+ if field.has_key('name'):
+ params[field['name']] = field.has_key(
+ 'value') and field['value'] or ''
+ params[t.find('textarea')['name']] = 'bbb'
+ self.app.post(str(rep_url), params=params)
+
+ # Check that reply matches the newest in the rss feed
+ f = self.app.get('/discussion/feed.rss').body
+ f = feedparser.parse(f)
+ newest_reply = f['entries'][0]['summary_detail']['value'].split("</p>")[0].split("<p>")[-1]
+ assert newest_reply == 'bbb'
+
+ def test_post_to_feed(self):
+ r = self.app.get('/discussion/create_topic/')
+ f = r.html.find(
+ 'form', {'action': '/p/test/discussion/save_new_topic'})
+ params = dict()
+ inputs = f.findAll('input')
+ for field in inputs:
+ if field.has_key('name'):
+ params[field['name']] = field.has_key(
+ 'value') and field['value'] or ''
+ params[f.find('textarea')['name']] = 'XYZ'
+ params[f.find('select')['name']] = 'testforum'
+ params[f.find('input', {'style': 'width: 90%'})['name']] = 'AAAA'
+ self.app.post('/discussion/save_new_topic', params=params)
+
+ f = self.app.get('/discussion/feed.rss').body
+ f = feedparser.parse(f)
+ newest_entry = f['entries'][0]['summary_detail']['value'].split("</p>")[0].split("<p>")[-1]
+ assert newest_entry == 'XYZ'
+
def test_thread_sticky(self):
r = self.app.get('/discussion/create_topic/')
f = r.html.find(