summaryrefslogtreecommitdiffstats
path: root/askbot
diff options
context:
space:
mode:
authorVasil Vangelovski <vvangelovski@gmail.com>2012-01-17 02:53:24 +0100
committerVasil Vangelovski <vvangelovski@gmail.com>2012-01-17 02:53:24 +0100
commite725455c9f6ce499f9cf9ab8d7c67b846ccccdd9 (patch)
treeb3070d75f180bb66b45a5c1e8bdca68d2b9decdd /askbot
parent430d42d193ecdde6ebcd642133e392dca60a3d41 (diff)
downloadaskbot-e725455c9f6ce499f9cf9ab8d7c67b846ccccdd9.tar.gz
askbot-e725455c9f6ce499f9cf9ab8d7c67b846ccccdd9.tar.bz2
askbot-e725455c9f6ce499f9cf9ab8d7c67b846ccccdd9.zip
Added basic handler for processing replies by email
Diffstat (limited to 'askbot')
-rw-r--r--askbot/models/reply_by_email.py15
-rw-r--r--askbot/tests/reply_by_email_tests.py55
2 files changed, 67 insertions, 3 deletions
diff --git a/askbot/models/reply_by_email.py b/askbot/models/reply_by_email.py
index 124fce4b..0d187b46 100644
--- a/askbot/models/reply_by_email.py
+++ b/askbot/models/reply_by_email.py
@@ -4,19 +4,25 @@ import string
from django.db import models
from django.contrib.auth.models import User
+from django.utils.translation import ugettext as _
from askbot.models.post import Post
from askbot.models.base import BaseQuerySetManager
from askbot.conf import settings as askbot_settings
+
+
class ReplyAddressManager(BaseQuerySetManager):
+
+ def get_unused(self, address):
+ return self.get(address = address, used_at__isnull = True)
def create_new(self, post, user):
reply_address = ReplyAddress(post = post, user = user, allowed_from_email = user.email)
while True:
reply_address.address = ''.join(random.choice(string.letters +
string.digits) for i in xrange(random.randint(12, 25)))
- if ReplyAddress.objects.filter(address = reply_address.address).count() == 0:
+ if self.filter(address = reply_address.address).count() == 0:
break
reply_address.save()
return reply_address
@@ -50,3 +56,10 @@ class ReplyAddress(models.Model):
self.save()
return result
+
+#TODO move this function to a more appropriate module
+def process_reply_email(message, address, host):
+ reply_address = ReplyAddress.objects.get_unused(address)
+ separator = _("======= Reply above this line. ====-=-=")
+ reply_part = message.body().split(separator)[0]
+ reply_address.create_reply(reply_part)
diff --git a/askbot/tests/reply_by_email_tests.py b/askbot/tests/reply_by_email_tests.py
index c4d70c0b..f391827b 100644
--- a/askbot/tests/reply_by_email_tests.py
+++ b/askbot/tests/reply_by_email_tests.py
@@ -1,8 +1,54 @@
+from django.utils.translation import ugettext as _
from askbot.models import ReplyAddress
+from askbot.models.reply_by_email import process_reply_email
+
from askbot.tests.utils import AskbotTestCase
from askbot.models import Post, PostRevision
+class MockMessage(object):
+
+ def __init__(self, body, from_email):
+ self._body = body
+ self.from_email = from_email
+
+ def body(self):
+ return self._body
+
+class EmailProcessingTests(AskbotTestCase):
+
+ def setUp(self):
+ self.u1 = self.create_user(username='user1')
+ self.u1.set_status('a')
+ self.u1.email = "user1@domain.com"
+ self.u1.save()
+
+ self.u1.moderate_user_reputation(self.u1, reputation_change = 100, comment= "no comment")
+ self.u2 = self.create_user(username='user2')
+ self.u1.moderate_user_reputation(self.u2, reputation_change = 100, comment= "no comment")
+ self.u3 = self.create_user(username='user3')
+ self.u1.moderate_user_reputation(self.u3, reputation_change = 100, comment= "no comment")
+
+ self.question = self.post_question(
+ user = self.u1,
+ follow = True,
+ )
+ self.answer = self.post_answer(
+ user = self.u2,
+ question = self.question
+ )
+
+ self.comment = self.post_comment(user = self.u2, parent_post = self.answer)
+
+ def test_process_correct_answer_comment(self):
+ addr = ReplyAddress.objects.create_new( self.answer, self.u1).address
+ separator = _("======= Reply above this line. ====-=-=")
+ msg = MockMessage("This is a test reply \n%s\nlorem ipsum"%(separator), "user1@domain.com")
+ process_reply_email(msg, addr, '')
+ self.assertEquals(self.answer.comments.count(), 2)
+ self.assertEquals(self.answer.comments.all().order_by('-timestamp')[0].text, "This is a test reply")
+
+
class ReplyAddressModelTests(AskbotTestCase):
@@ -32,12 +78,13 @@ class ReplyAddressModelTests(AskbotTestCase):
self.assertTrue(len(result.address) >= 12 and len(result.address) <= 25)
self.assertEquals(ReplyAddress.objects.all().count(), 1)
+
def test_create_answer_reply(self):
result = ReplyAddress.objects.create_new( self.answer, self.u1)
post = result.create_reply("A test post")
self.assertEquals(post.post_type, "comment")
self.assertEquals(post.text, "A test post")
-
+ self.assertEquals(self.answer.comments.count(), 2)
def test_create_comment_reply(self):
result = ReplyAddress.objects.create_new( self.comment, self.u1)
@@ -56,4 +103,8 @@ class ReplyAddressModelTests(AskbotTestCase):
result = ReplyAddress.objects.create_new( self.question, self.u3)
post = result.create_reply("A test post "* 10)
self.assertEquals(post.post_type, "answer")
- self.assertEquals(post.text, "A test post "* 10) \ No newline at end of file
+ self.assertEquals(post.text, "A test post "* 10)
+
+
+
+