[PATCH 3 of 8 v2] notification: allow comments in comment templates

Jan Heylen heyleke at gmail.com
Sat May 16 08:02:28 EDT 2015


# HG changeset patch
# User Jan Heylen <heyleke at gmail.com>
# Date 1431012349 -7200
#      Thu May 07 17:25:49 2015 +0200
# Node ID a761b2b50afdf387951bef282954a86650b6ee70
# Parent  dc6bb39a25a624034be795d083a118009f903d31
notification: allow comments in comment templates

+ create testcase for notifications with comments

diff -r dc6bb39a25a6 -r a761b2b50afd kallithea/model/notification.py
--- a/kallithea/model/notification.py	Tue May 05 10:35:21 2015 +0200
+++ b/kallithea/model/notification.py	Thu May 07 17:25:49 2015 +0200
@@ -57,9 +57,9 @@
                 raise Exception('notification must be int, long or Instance'
                                 ' of Notification got %s' % type(notification))
 
-    def create(self, created_by, subject, body, recipients=None,
+    def create(self, created_by, subject, recipients=None,
                type_=Notification.TYPE_MESSAGE, with_email=True,
-               email_kwargs={}):
+               email_kwargs={}, **kwargs):
         """
 
         Creates notification of given type
@@ -103,10 +103,23 @@
         #else: silently skip notification mails?
 
         # TODO: inform user who are notified
-        notif = Notification.create(
-            created_by=created_by_obj, subject=subject,
-            body=body, recipients=recipients_objs, type_=type_
-        )
+        if 'body' not in kwargs:
+            body = ''
+        else:
+            body = kwargs['body']
+            notif = Notification.create(
+                created_by=created_by_obj, subject=subject,
+                body=body, recipients=recipients_objs, type_=type_)
+
+        comments = []
+        comments_html = []
+        if 'bodies' in kwargs:
+            comments = kwargs['bodies']
+            for comment in comments:
+                notif = Notification.create(
+                    created_by=created_by_obj, subject=subject,
+                    body=comment, recipients=recipients_objs, type_=type_)
+                comments_html.append(h.rst_w_mentions(comment))
 
         if not with_email:
             return notif
@@ -123,13 +136,15 @@
             ## this is passed into template
             html_kwargs = {
                       'subject': subject,
-                      'body': h.rst_w_mentions(body),
+                      'comments': comments_html,
+                      'body': body,
                       'when': h.fmt_date(notif.created_on),
                       'user': notif.created_by_user.username,
                       }
 
             txt_kwargs = {
                       'subject': subject,
+                      'comments': comments,
                       'body': body,
                       'when': h.fmt_date(notif.created_on),
                       'user': notif.created_by_user.username,
diff -r dc6bb39a25a6 -r a761b2b50afd kallithea/templates/email_templates/changeset_comment.html
--- a/kallithea/templates/email_templates/changeset_comment.html	Tue May 05 10:35:21 2015 +0200
+++ b/kallithea/templates/email_templates/changeset_comment.html	Thu May 07 17:25:49 2015 +0200
@@ -7,7 +7,9 @@
 <p>${_('Comment from %s on %s changeset %s') % (cs_comment_user, cs_target_repo, h.short_id(raw_id))}:</p>
 %endif
 <p>${body}</p>
-
+%for comment in comments:
+<p>${comment}</p>
+%endfor
 %if status_change:
     <p>${_('The changeset status was changed to')}: <b>${status_change}</b></p>
 %endif
diff -r dc6bb39a25a6 -r a761b2b50afd kallithea/templates/email_templates/changeset_comment.txt
--- a/kallithea/templates/email_templates/changeset_comment.txt	Tue May 05 10:35:21 2015 +0200
+++ b/kallithea/templates/email_templates/changeset_comment.txt	Thu May 07 17:25:49 2015 +0200
@@ -7,6 +7,9 @@
 ${_('Comment from %s on %s changeset %s') % (cs_comment_user, cs_target_repo, h.short_id(raw_id))|n,unicode}:
 %endif
 ${body|n,unicode}
+%for comment in comments:
+${comment|n,unicode}
+%endfor
 
 %if status_change:
 ${_('The changeset status was changed to')|n,unicode}: ${status_change|n,unicode}
diff -r dc6bb39a25a6 -r a761b2b50afd kallithea/templates/email_templates/pull_request_comment.html
--- a/kallithea/templates/email_templates/pull_request_comment.html	Tue May 05 10:35:21 2015 +0200
+++ b/kallithea/templates/email_templates/pull_request_comment.html	Thu May 07 17:25:49 2015 +0200
@@ -3,6 +3,9 @@
 
 <p>${_('Comment from %s on %s pull request "%s"') % (pr_comment_user, repo_name, pr_title)}:</p>
 <p>${body}</p>
+%for comment in comments:
+<p>${comment}</p>
+%endfor
 
 %if status_change:
     %if closing_pr:
diff -r dc6bb39a25a6 -r a761b2b50afd kallithea/templates/email_templates/pull_request_comment.txt
--- a/kallithea/templates/email_templates/pull_request_comment.txt	Tue May 05 10:35:21 2015 +0200
+++ b/kallithea/templates/email_templates/pull_request_comment.txt	Thu May 07 17:25:49 2015 +0200
@@ -3,6 +3,9 @@
 
 ${_('Comment from %s on %s pull request "%s"') % (pr_comment_user, repo_name, pr_title)|n,unicode}:
 ${body|n,unicode}
+%for comment in comments:
+${comment|n,unicode}
+%endfor
 
 %if status_change:
     %if closing_pr:
diff -r dc6bb39a25a6 -r a761b2b50afd kallithea/tests/models/test_notifications.py
--- a/kallithea/tests/models/test_notifications.py	Tue May 05 10:35:21 2015 +0200
+++ b/kallithea/tests/models/test_notifications.py	Thu May 07 17:25:49 2015 +0200
@@ -70,6 +70,32 @@
         self.assertEqual(set([x.user.user_id for x in unotification]),
                          set(usrs))
 
+    def test_create_notification_with_comments(self):
+        self.assertEqual([], Notification.query().all())
+        self.assertEqual([], UserNotification.query().all())
+
+        usrs = [self.u1, self.u2]
+        notification = NotificationModel().create(created_by=self.u1,
+                                           subject=u'subj', bodies=['1','2','3'],
+                                           recipients=usrs)
+        Session().commit()
+        u1 = User.get(self.u1)
+        u2 = User.get(self.u2)
+        u3 = User.get(self.u3)
+        notifications = Notification.query().all()
+        self.assertEqual(len(notifications), 3)
+
+        self.assertEqual(notifications[0].recipients, [u1, u2])
+        self.assertEqual(notification.notification_id,
+                         notifications[2].notification_id)
+
+        unotification = UserNotification.query()\
+            .filter(UserNotification.notification == notification).all()
+
+        self.assertEqual(len(unotification), len(usrs))
+        self.assertEqual(set([x.user.user_id for x in unotification]),
+                         set(usrs))
+
     def test_user_notifications(self):
         self.assertEqual([], Notification.query().all())
         self.assertEqual([], UserNotification.query().all())


More information about the kallithea-general mailing list