summaryrefslogtreecommitdiffstats
path: root/group_messaging
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-10-04 04:24:06 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-10-04 04:24:06 -0400
commita375496f39029ae77f2040e9f6adcabcb3b7bef6 (patch)
tree9749eca48a0b8e0e2898ea182665f941b5a033c7 /group_messaging
parent2b692ca9927e41382fa2a384b901a317a64618d2 (diff)
downloadaskbot-a375496f39029ae77f2040e9f6adcabcb3b7bef6.tar.gz
askbot-a375496f39029ae77f2040e9f6adcabcb3b7bef6.tar.bz2
askbot-a375496f39029ae77f2040e9f6adcabcb3b7bef6.zip
responses to archived messages kick them back to the inbox
Diffstat (limited to 'group_messaging')
-rw-r--r--group_messaging/models.py27
-rw-r--r--group_messaging/tests.py32
2 files changed, 48 insertions, 11 deletions
diff --git a/group_messaging/models.py b/group_messaging/models.py
index f78f2b87..87f3005e 100644
--- a/group_messaging/models.py
+++ b/group_messaging/models.py
@@ -169,9 +169,11 @@ class MessageManager(models.Manager):
#add author of the parent as a recipient to parent
parent.add_recipients([senders_group])
#mark last active timestamp for the root message
- #so that we know that this thread was most recently
- #updated
- message.update_root_info()
+ message.root.last_active_at = datetime.datetime.now()
+ #update senders info - stuff that is shown in the thread heading
+ message.root.update_senders_info()
+ #unarchive the thread for all recipients
+ message.root.unarchive()
return message
@@ -241,17 +243,20 @@ class Message(models.Model):
sender_list, created = SenderList.objects.get_or_create(recipient=recipient)
sender_list.senders.add(self.sender)
- def update_root_info(self):
- """Update the last active at timestamp and
- the contributors info, if relevant.
- Root object will be saved to the database.
+ def update_senders_info(self):
+ """update the contributors info,
+ meant to be used on a root message only
"""
- self.root.last_active_at = datetime.datetime.now()
- senders_names = self.root.senders_info.split(',')
+ senders_names = self.senders_info.split(',')
if self.sender.username in senders_names:
senders_names.remove(self.sender.username)
senders_names.insert(0, self.sender.username)
- self.root.senders_info = (','.join(senders_names))[:64]
- self.root.save()
+ self.senders_info = (','.join(senders_names))[:64]
+ self.save()
+
+ def unarchive(self):
+ """unarchive message for all recipients"""
+ memos = self.memos.filter(status=MessageMemo.ARCHIVED)
+ memos.update(status=MessageMemo.SEEN)
diff --git a/group_messaging/tests.py b/group_messaging/tests.py
index c8401dc1..93b6b22f 100644
--- a/group_messaging/tests.py
+++ b/group_messaging/tests.py
@@ -5,6 +5,8 @@ from group_messaging.models import MessageMemo
from group_messaging.models import SenderList
from group_messaging.models import get_personal_group
from group_messaging.models import create_personal_group
+from group_messaging.views import ThreadsList
+from mock import Mock
MESSAGE_TEXT = 'test message text'
@@ -116,3 +118,33 @@ class ModelTests(TestCase):
self.assertEqual(threads, set([root_message]))
threads = set(Message.objects.get_threads_for_user(self.recipient))
self.assertEqual(threads, set([root_message]))
+
+ def test_answer_to_deleted_thread_undeletes_thread(self):
+ #setup: message, reply, responder deletes thread
+ root_message = self.create_thread_for_user(self.recipient)
+ response = Message.objects.create_response(
+ sender=self.recipient,
+ text='some response',
+ parent=root_message
+ )
+ memo1, created = MessageMemo.objects.get_or_create(
+ message=root_message,
+ user=self.recipient,
+ status=MessageMemo.ARCHIVED
+ )
+ #OP sends reply to reply
+ response2 = Message.objects.create_response(
+ sender=self.sender,
+ text='some response2',
+ parent=response
+ )
+
+ view = ThreadsList()
+ request = Mock(spec=('REQUEST', 'user'))
+ request.REQUEST = {'sender_id': '-1'}
+ request.user = self.recipient
+ context = view.get_context(request)
+ self.assertEqual(len(context['threads']), 1)
+ thread_id = context['threads'][0].id
+ thread_data = context['threads_data'][thread_id]
+ self.assertEqual(thread_data['status'], 'new')