summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askbot/views/users.py2
-rw-r--r--group_messaging/models.py15
-rw-r--r--group_messaging/tests.py35
3 files changed, 40 insertions, 12 deletions
diff --git a/askbot/views/users.py b/askbot/views/users.py
index 23fa8ade..0dbe70b6 100644
--- a/askbot/views/users.py
+++ b/askbot/views/users.py
@@ -763,8 +763,6 @@ def user_responses(request, user, context):
'page_title' : _('profile - messages')
}
context.update(data)
- import pdb
- pdb.set_trace()
if 'thread_id' in request.GET:
from group_messaging.models import Message
from group_messaging.views import ThreadDetails
diff --git a/group_messaging/models.py b/group_messaging/models.py
index 91e4a52e..9cc12786 100644
--- a/group_messaging/models.py
+++ b/group_messaging/models.py
@@ -218,6 +218,8 @@ class MessageManager(models.Manager):
senders_info=sender.username,
text=text,
)
+ now = datetime.datetime.now()
+ LastVisitTime.objects.create(message=message, user=sender, at=now)
names = get_recipient_names(recipients)
message.add_recipient_names_to_senders_info(recipients)
message.save()
@@ -327,7 +329,7 @@ class Message(models.Model):
sender_list, created = SenderList.objects.get_or_create(recipient=recipient)
sender_list.senders.add(self.sender)
- def get_absolute_url(self, user=None, include_domain_name=False):
+ def get_absolute_url(self, user=None):
"""returns absolute url to the thread"""
assert(user != None)
settings = django_settings.GROUP_MESSAGING
@@ -340,9 +342,9 @@ class Message(models.Model):
params = copy.copy(settings['base_url_params'])
params['thread_id'] = self.id
url = url_getter(user) + '?' + urllib.urlencode(params)
- if include_domain_name:
- site = Site.objects.get_current()
- url = 'http://' + site.domain + url
+ #if include_domain_name: #don't need this b/c
+ # site = Site.objects.get_current()
+ # url = 'http://' + site.domain + url
return url
def get_email_subject_line(self):
@@ -388,9 +390,8 @@ class Message(models.Model):
#todo change url scheme so that all users have the same
#urls within their personal areas of the user profile
#so that we don't need to have loops like this one
- thread_url = root_message.get_absolute_url(
- user, include_domain_name=True
- ).replace('&', '&')
+ thread_url = root_message.get_absolute_url(user)
+ thread_url = thread_url.replace('&', '&')
#in the template we have a placeholder to be replaced like this:
body_text = body_text.replace('THREAD_URL_HOLE', thread_url)
send_mail(
diff --git a/group_messaging/tests.py b/group_messaging/tests.py
index 61b2dbbf..c77f29d7 100644
--- a/group_messaging/tests.py
+++ b/group_messaging/tests.py
@@ -1,3 +1,4 @@
+import datetime
import time
import urlparse
from bs4 import BeautifulSoup
@@ -28,6 +29,10 @@ def create_user(name):
user.groups.add(group)
return user
+def get_html_message(mail_message):
+ """mail message is an item from the django.core.mail.outbox"""
+ return mail_message.alternatives[0][0]
+
class GroupMessagingTests(TestCase):
"""base class for the test cases in this app"""
@@ -90,11 +95,13 @@ class ViewsTests(GroupMessagingTests):
user=self.sender
)
self.assertEqual(context['threads_data'][root.id]['status'], 'new')
- #"visit" the thread
- last_visit_time = LastVisitTime.objects.create(
+ #"visit" the thread: todo - make a method
+ last_visit_time, created = LastVisitTime.objects.get_or_create(
user=self.sender,
message=root
)
+ last_visit_time.at = datetime.datetime.now()
+ last_visit_time.save()
time.sleep(1.5)
#response must show as "seen"
@@ -149,6 +156,21 @@ class ViewsTests(GroupMessagingTests):
thread_data = context['threads_data'][thread_id]
self.assertEqual(thread_data['status'], 'new')
+ def test_emailed_message_url_works_for_post_recipient(self):
+ root = self.create_thread_for_user(self.sender, self.recipient)
+ from django.core.mail import outbox
+ html_message = get_html_message(outbox[0])
+ link = BeautifulSoup(html_message).find('a', attrs={'class': 'thread-link'})
+ url = link['href'].replace('&', '&')
+ parsed_url = urlparse.urlparse(url)
+ url_data = urlparse.parse_qsl(parsed_url.query)
+ self.client.login(user_id=self.recipient.id, method='force')
+ response = self.client.get(parsed_url.path, url_data)
+ dom = BeautifulSoup(response.content)
+ threads = dom.find_all('ul', attrs={'class': 'thread'})
+ self.assertEquals(len(threads), 1)
+ thread_lists = dom.find_all('table', attrs={'class': 'threads-list'})
+ self.assertEquals(len(thread_lists), 0)
class ModelsTests(GroupMessagingTests):
"""test cases for the `private_messaging` models"""
@@ -284,7 +306,7 @@ class ModelsTests(GroupMessagingTests):
self.assertEqual(len(outbox), 1)
self.assertEqual(len(outbox[0].recipients()), 1)
self.assertEqual(outbox[0].recipients()[0], self.recipient.email)
- html_message = outbox[0].alternatives[0][0]
+ html_message = get_html_message(outbox[0])
self.assertTrue(root.text in html_message)
soup = BeautifulSoup(html_message)
links = soup.find_all('a', attrs={'class': 'thread-link'})
@@ -322,3 +344,10 @@ class ModelsTests(GroupMessagingTests):
)
threads = Message.objects.get_threads(recipient=self.sender)
self.assertEqual(threads.count(), 0)
+
+ def test_sent_message_is_seen_by_the_sender(self):
+ root = self.create_thread_for_user(self.sender, self.recipient)
+ time.sleep(1.5)
+ last_visits = LastVisitTime.objects.filter(message=root, user=self.sender)
+ self.assertEqual(last_visits.count(), 1)
+