You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/04/22 21:41:17 UTC
[01/12] git commit: [#2502] ticket:300 Group changes by user,
based on his subscriptions
Updated Branches:
refs/heads/master 4ac36f9fb -> 25d074616
[#2502] ticket:300 Group changes by user, based on his subscriptions
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/e802ccea
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/e802ccea
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/e802ccea
Branch: refs/heads/master
Commit: e802ccea1822cf597de8dfa487f7e7e29b53ff7a
Parents: bc4fc9f
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Apr 12 10:57:29 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:26 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 40 +++++++++++++++
ForgeTracker/forgetracker/tracker_main.py | 24 +++++++++
2 files changed, 64 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/e802ccea/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index b5d87a0..9ccc963 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -33,6 +33,7 @@ from alluratest.controller import TestController
from allura import model as M
from forgewiki import model as wm
from forgetracker import model as tm
+from forgetracker.tracker_main import filtered_by_subscription
from allura.lib.security import has_access
from allura.lib import helpers as h
@@ -1165,6 +1166,45 @@ class TestFunctionalController(TrackerTestController):
third_ticket_changes])
assert_equal(email, admin_email.kwargs.text)
+ def test_filtered_by_subscription(self):
+ self.new_ticket(summary='test first ticket', status='open')
+ self.new_ticket(summary='test second ticket', status='open')
+ self.new_ticket(summary='test third ticket', status='open')
+ tickets = []
+ users = []
+ tickets.append(tm.Ticket.query.get(summary='test first ticket'))
+ tickets.append(tm.Ticket.query.get(summary='test second ticket'))
+ tickets.append(tm.Ticket.query.get(summary='test third ticket'))
+ users.append(M.User.by_username('test-user-0'))
+ users.append(M.User.by_username('test-user-1'))
+ users.append(M.User.by_username('test-user-2'))
+ admin = M.User.by_username('test-admin')
+ tickets[0].subscribe(user=users[0])
+ tickets[1].subscribe(user=users[1])
+ tickets[2].subscribe(user=users[2])
+ ThreadLocalORMSession.flush_all()
+ M.MonQTask.run_ready()
+ ThreadLocalORMSession.flush_all()
+
+ # Pretend we're changing first and second ticket.
+ # Then we should notify test-user-0, test-user-1 and admin.
+ # test-user-2 shoudn't be notified
+ # (he has subscription to third ticket, but it didn't change).
+ # test-user-0 should see changes only for first ticket.
+ # test-user-1 - only for second.
+ # admin - for both (since he has tool subscription).
+ changes = {
+ tickets[0]._id: {'ticket': tickets[0], 'changes': 'Ticket 1 changes'},
+ tickets[1]._id: {'ticket': tickets[1], 'changes': 'Ticket 2 changes'},
+ }
+ filtered_changes = filtered_by_subscription(changes)
+ filtered_users = [uid for uid, data in filtered_changes.iteritems()]
+ assert_equal(sorted(filtered_users), sorted([u._id for u in users[:-1] + [admin]]))
+ ticket_ids = [t._id for t in tickets]
+ assert_equal(filtered_changes[users[0]._id], ticket_ids[0:1])
+ assert_equal(filtered_changes[users[1]._id], ticket_ids[1:2])
+ assert_equal(sorted(filtered_changes[admin._id]), sorted(ticket_ids[:-1]))
+
def test_vote(self):
r = self.new_ticket(summary='test vote').follow()
assert_false(r.html.find('div', {'id': 'vote'}))
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/e802ccea/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 102a544..bb0fe7b 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1150,6 +1150,30 @@ class changelog(object):
return t
+def filtered_by_subscription(tickets, project_id=None, app_config_id=None):
+ p_id = project_id if project_id else c.project._id
+ ac_id = app_config_id if app_config_id else c.app.config._id
+ ticket_ids = tickets.keys()
+ users = M.Mailbox.query.find(dict(project_id=p_id, app_config_id=ac_id))
+ users = [u.user_id for u in users]
+ filtered = {}
+ for uid in users:
+ params = dict(
+ user_id=uid,
+ project_id=p_id,
+ app_config_id=ac_id)
+ if M.Mailbox.subscribed(**params):
+ filtered[uid] = ticket_ids # subscribed to entire tool, will see all changes
+ continue
+ for t_id, data in tickets.iteritems():
+ params.update({'artifact': data['ticket']})
+ if M.Mailbox.subscribed(**params):
+ if filtered.get('uid') is None:
+ filtered[uid] = []
+ filtered[uid].append(t_id)
+ return filtered
+
+
class TicketController(BaseController):
def __init__(self, ticket_num=None):
[09/12] git commit: [#2502] ticket:300 Simplify
filtered_by_subscription()
Posted by jo...@apache.org.
[#2502] ticket:300 Simplify filtered_by_subscription()
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/e843f9fb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/e843f9fb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/e843f9fb
Branch: refs/heads/master
Commit: e843f9fbc1c98e2a88191d974cc872d32be29691
Parents: 201cc53
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Apr 12 11:43:50 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 4 ++--
ForgeTracker/forgetracker/tracker_main.py | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/e843f9fb/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 9ccc963..566f534 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1194,8 +1194,8 @@ class TestFunctionalController(TrackerTestController):
# test-user-1 - only for second.
# admin - for both (since he has tool subscription).
changes = {
- tickets[0]._id: {'ticket': tickets[0], 'changes': 'Ticket 1 changes'},
- tickets[1]._id: {'ticket': tickets[1], 'changes': 'Ticket 2 changes'},
+ tickets[0]._id: tickets[0],
+ tickets[1]._id: tickets[1],
}
filtered_changes = filtered_by_subscription(changes)
filtered_users = [uid for uid, data in filtered_changes.iteritems()]
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/e843f9fb/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 28c73ac..7ea8693 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1165,8 +1165,8 @@ def filtered_by_subscription(tickets, project_id=None, app_config_id=None):
if M.Mailbox.subscribed(**params):
filtered[uid] = ticket_ids # subscribed to entire tool, will see all changes
continue
- for t_id, data in tickets.iteritems():
- params.update({'artifact': data['ticket']})
+ for t_id, ticket in tickets.iteritems():
+ params.update({'artifact': ticket})
if M.Mailbox.subscribed(**params):
if filtered.get('uid') is None:
filtered[uid] = []
[12/12] git commit: [#2502] ticket:300 Add userfield to test
Posted by jo...@apache.org.
[#2502] ticket:300 Add userfield to test
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/ff0d78a8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/ff0d78a8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/ff0d78a8
Branch: refs/heads/master
Commit: ff0d78a81770e9f7d6db51e3a4dee8798c37e110
Parents: 1f298f1
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 16 13:28:23 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 7 ++++-
ForgeTracker/forgetracker/tracker_main.py | 23 +++++++++++----
2 files changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ff0d78a8/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 1321e6f..ca51a10 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1113,7 +1113,8 @@ class TestFunctionalController(TrackerTestController):
second_ticket._id,
third_ticket._id),
'status': 'accepted',
- '_milestone': '2.0'})
+ '_milestone': '2.0',
+ 'assigned_to': 'test-admin'})
M.MonQTask.run_ready()
emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
@@ -1142,20 +1143,24 @@ class TestFunctionalController(TrackerTestController):
# Expected data
email_header = '''Mass edit changing:
+- **Owner**: Test Admin
- **Status**: accepted
- **Milestone**: 2.0
'''
first_ticket_changes = '''ticket: [bugs:#1]
+- **Owner**: Anonymous --> Test Admin
- **Status**: open --> accepted
'''
second_ticket_changes = '''ticket: [bugs:#2]
+- **Owner**: Anonymous --> Test Admin
- **Milestone**: 1.0 --> 2.0
'''
third_ticket_changes = '''ticket: [bugs:#3]
+- **Owner**: Anonymous --> Test Admin
- **Status**: unread --> accepted
- **Milestone**: 1.0 --> 2.0
'''
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ff0d78a8/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 01b9f45..6a5a1f3 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -814,22 +814,22 @@ class RootController(BaseController):
changed_tickets = {}
for ticket in tickets:
message = ''
- for k, v in values.iteritems():
+ for k, v in sorted(values.iteritems()):
if k == 'assigned_to_id':
new_user = M.User.query.get(_id=v)
old_user = M.User.query.get(_id=getattr(ticket, k))
if new_user:
message += get_change_text(
get_label(k),
- new_user.username,
- old_user.username)
+ new_user.display_name,
+ old_user.display_name)
else:
message += get_change_text(
get_label(k),
v,
getattr(ticket, k))
setattr(ticket, k, v)
- for k, v in custom_values.iteritems():
+ for k, v in sorted(custom_values.iteritems()):
def cf_val(cf):
return ticket.get_custom_user(cf.name) \
if cf.type == 'user' \
@@ -847,6 +847,7 @@ class RootController(BaseController):
changed_tickets[ticket._id] = ticket
ticket.discussion_thread.post(message, notify=False)
ticket.commit()
+
filtered_changes = filtered_by_subscription(changed_tickets)
users = M.User.query.find({'_id': {'$in': filtered_changes.keys()}}).all()
def changes_iter(user):
@@ -863,8 +864,18 @@ class RootController(BaseController):
loader=jinja2.PackageLoader('forgetracker', 'data'),
auto_reload=asbool(config.get('auto_reload_templates', True)),
).get_template('mass_report')
- head = ['- **%s**: %s' % (get_label(f), v) for f, v in values.iteritems()]
- head += ['- **%s**: %s' % (get_label(f), v) for f, v in custom_values.iteritems()]
+ head = []
+ for f, v in sorted(values.iteritems()):
+ if f == 'assigned_to_id':
+ user = M.User.query.get(_id=v)
+ v = user.display_name if user else v
+ head.append('- **%s**: %s' % (get_label(f), v))
+ for f, v in sorted(custom_values.iteritems()):
+ cf = custom_fields[k]
+ if cf.type == 'user':
+ user = M.User.by_username(v)
+ v = user.display_name if user else v
+ head.append('- **%s**: %s' % (cf.label, v))
tmpl_context = {'context': c, 'data': {'header': '\n'.join(['Mass edit changing:', ''] + head)}}
for user in users:
tmpl_context['data'].update({'changes': changes_iter(user)})
[06/12] git commit: [#2502] ticket:300 Fixed bug in
filtered_by_subscription
Posted by jo...@apache.org.
[#2502] ticket:300 Fixed bug in filtered_by_subscription
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/b01ecfb6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/b01ecfb6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/b01ecfb6
Branch: refs/heads/master
Commit: b01ecfb6a6a482e3337c6d6a17d2041bbb781f89
Parents: 24e8e46
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Apr 17 09:52:57 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 11 ++++++-----
ForgeTracker/forgetracker/tracker_main.py | 8 ++++----
2 files changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b01ecfb6/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 91b718c..c21744c 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1222,6 +1222,7 @@ class TestFunctionalController(TrackerTestController):
users.append(M.User.by_username('test-user-2'))
admin = M.User.by_username('test-admin')
tickets[0].subscribe(user=users[0])
+ tickets[0].subscribe(user=users[1])
tickets[1].subscribe(user=users[1])
tickets[2].subscribe(user=users[2])
ThreadLocalORMSession.flush_all()
@@ -1233,8 +1234,8 @@ class TestFunctionalController(TrackerTestController):
# test-user-2 shoudn't be notified
# (he has subscription to third ticket, but it didn't change).
# test-user-0 should see changes only for first ticket.
- # test-user-1 - only for second.
- # admin - for both (since he has tool subscription).
+ # test-user-1 - for both (separate subscription for both tickets).
+ # admin - for both (tool subscription).
changes = {
tickets[0]._id: tickets[0],
tickets[1]._id: tickets[1],
@@ -1243,9 +1244,9 @@ class TestFunctionalController(TrackerTestController):
filtered_users = [uid for uid, data in filtered_changes.iteritems()]
assert_equal(sorted(filtered_users), sorted([u._id for u in users[:-1] + [admin]]))
ticket_ids = [t._id for t in tickets]
- assert_equal(filtered_changes[users[0]._id], ticket_ids[0:1])
- assert_equal(filtered_changes[users[1]._id], ticket_ids[1:2])
- assert_equal(sorted(filtered_changes[admin._id]), sorted(ticket_ids[:-1]))
+ assert_equal(filtered_changes[users[0]._id], set(ticket_ids[0:1]))
+ assert_equal(filtered_changes[users[1]._id], set(ticket_ids[:-1]))
+ assert_equal(filtered_changes[admin._id], set(ticket_ids[:-1]))
def test_vote(self):
r = self.new_ticket(summary='test vote').follow()
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b01ecfb6/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 34ee011..396d300 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1220,14 +1220,14 @@ def filtered_by_subscription(tickets, project_id=None, app_config_id=None):
project_id=p_id,
app_config_id=ac_id)
if M.Mailbox.subscribed(**params):
- filtered[uid] = ticket_ids # subscribed to entire tool, will see all changes
+ filtered[uid] = set(ticket_ids) # subscribed to entire tool, will see all changes
continue
for t_id, ticket in tickets.iteritems():
params.update({'artifact': ticket})
if M.Mailbox.subscribed(**params):
- if filtered.get('uid') is None:
- filtered[uid] = []
- filtered[uid].append(t_id)
+ if filtered.get(uid) is None:
+ filtered[uid] = set()
+ filtered[uid].add(t_id)
return filtered
[03/12] git commit: [#2502] ticket:300 Expand test with checks for
email content
Posted by jo...@apache.org.
[#2502] ticket:300 Expand test with checks for email content
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/bc4fc9f3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/bc4fc9f3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/bc4fc9f3
Branch: refs/heads/master
Commit: bc4fc9f3aa861d34ed607907175da007a88cb386
Parents: 02b97b5
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Apr 12 09:24:43 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:26 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 40 ++++++++++++---
1 files changed, 32 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/bc4fc9f3/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 3d1f14c..b5d87a0 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1090,9 +1090,9 @@ class TestFunctionalController(TrackerTestController):
assert_false('test third ticket' in str(ticket_rows))
def test_bulk_edit_notifications(self):
- self.new_ticket(summary='test first ticket', status='open')
- self.new_ticket(summary='test second ticket', status='open')
- self.new_ticket(summary='test third ticket', status='open')
+ self.new_ticket(summary='test first ticket', status='open', _milestone='2.0')
+ self.new_ticket(summary='test second ticket', status='accepted', _milestone='1.0')
+ self.new_ticket(summary='test third ticket', status='unread')
ThreadLocalORMSession.flush_all()
M.MonQTask.run_ready()
ThreadLocalORMSession.flush_all()
@@ -1111,14 +1111,14 @@ class TestFunctionalController(TrackerTestController):
first_ticket._id,
second_ticket._id,
third_ticket._id),
- 'status': 'accepted'})
+ 'status': 'accepted',
+ '_milestone': '2.0'})
M.MonQTask.run_ready()
emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
assert_equal(len(emails), 3)
for email in emails:
- assert_equal(email.kwargs.subject, '[test:bugs] Bulk edit report')
- assert_in('- **Status**: open --> accepted\n', email.kwargs.text)
+ assert_equal(email.kwargs.subject, '[test:bugs] Mass edit changes')
first_user_email = M.MonQTask.query.find({
'task_name': 'allura.tasks.mail_tasks.sendmail',
'kwargs.destinations': first_user._id
@@ -1138,8 +1138,32 @@ class TestFunctionalController(TrackerTestController):
assert_equal(len(admin_email), 1)
admin_email = admin_email[0]
- # TODO: check email text for first, second and admin users
- #assert_in('### Affected tickets\n\n- [bugs:#1] test first ticket', first_user_email.kwargs.text)
+ # Expected data
+ email_header = '''Mass edit changing:
+- **status**: accepted
+- **Milestone: 2.0
+'''
+ first_ticket_changes = '''ticket: [bugs:#1]
+- **status**: open --> accepted
+- **Milestone: 2.0 --> 2.0
+'''
+ second_ticket_changes = '''ticket: [bugs:#2]
+- **status**: accepted --> accepted
+- **Milestone: 1.0 --> 2.0
+'''
+ third_ticket_changes = '''ticket: [bugs:#3]
+- **status**: unread --> accepted
+- **Milestone: --> 2.0
+'''
+ email = '\n'.join([email_header, first_ticket_changes])
+ assert_equal(email, first_user_email.kwargs.text)
+ email = '\n'.join([email_header, second_ticket_changes])
+ assert_equal(email, second_user_email.kwargs.text)
+ email = '\n'.join([email_header,
+ first_ticket_changes,
+ second_ticket_changes,
+ third_ticket_changes])
+ assert_equal(email, admin_email.kwargs.text)
def test_vote(self):
r = self.new_ticket(summary='test vote').follow()
[08/12] git commit: [#2502] ticket:300 Send report to monitoring
email, if set
Posted by jo...@apache.org.
[#2502] ticket:300 Send report to monitoring email, if set
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/24e8e46a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/24e8e46a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/24e8e46a
Branch: refs/heads/master
Commit: 24e8e46aaf860e1650afe00ff2e2ee373befc4e7
Parents: ff0d78a
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 16 13:52:05 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 35 +++++++++++++++
ForgeTracker/forgetracker/tracker_main.py | 16 ++++++-
2 files changed, 49 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/24e8e46a/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index ca51a10..91b718c 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1173,6 +1173,41 @@ class TestFunctionalController(TrackerTestController):
assert_in(second_ticket_changes, admin_email.kwargs.text)
assert_in(third_ticket_changes, admin_email.kwargs.text)
+ def test_bulk_edit_notifications_monitoring_email(self):
+ self.app.post('/admin/bugs/set_options', params={
+ 'TicketMonitoringEmail': 'monitoring@email.com',
+ 'TicketMonitoringType': 'AllTicketChanges',
+ })
+ self.new_ticket(summary='test first ticket', status='open', _milestone='2.0')
+ ThreadLocalORMSession.flush_all()
+ M.MonQTask.run_ready()
+ ThreadLocalORMSession.flush_all()
+ ticket = tm.Ticket.query.get(summary='test first ticket')
+ M.MonQTask.query.remove()
+ self.app.post('/p/test/bugs/update_tickets', {
+ '__search': '',
+ '__ticket_ids': [ticket._id],
+ 'status': 'accepted'})
+ M.MonQTask.run_ready()
+ emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
+ assert_equal(len(emails), 2) # one for admin and one for monitoring email
+ for email in emails:
+ assert_equal(email.kwargs.subject, '[test:bugs] Mass edit changes by Test Admin')
+ admin = M.User.by_username('test-admin')
+ admin_email = M.MonQTask.query.find({
+ 'task_name': 'allura.tasks.mail_tasks.sendmail',
+ 'kwargs.destinations': str(admin._id)
+ }).all()
+ monitoring_email = M.MonQTask.query.find({
+ 'task_name': 'allura.tasks.mail_tasks.sendmail',
+ 'kwargs.destinations': 'monitoring@email.com'
+ }).all()
+ assert_equal(len(admin_email), 1)
+ assert_equal(len(monitoring_email), 1)
+ admin_email_text = admin_email[0].kwargs.text
+ monitoring_email_text = monitoring_email[0].kwargs.text
+ assert_equal(admin_email_text, monitoring_email_text)
+
def test_filtered_by_subscription(self):
self.new_ticket(summary='test first ticket', status='open')
self.new_ticket(summary='test second ticket', status='open')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/24e8e46a/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 6a5a1f3..34ee011 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -871,7 +871,7 @@ class RootController(BaseController):
v = user.display_name if user else v
head.append('- **%s**: %s' % (get_label(f), v))
for f, v in sorted(custom_values.iteritems()):
- cf = custom_fields[k]
+ cf = custom_fields[f]
if cf.type == 'user':
user = M.User.by_username(v)
v = user.display_name if user else v
@@ -884,7 +884,19 @@ class RootController(BaseController):
text = tmpl.render(tmpl_context),
destinations = [str(user._id)]))
mail_tasks.sendmail.post(**mail)
- # TODO: send summary on ticket's monitoring email
+
+ if c.app.config.options.get('TicketMonitoringType') == 'AllTicketChanges':
+ monitoring_email = c.app.config.options.get('TicketMonitoringEmail')
+ def all_changes():
+ for t_id in changed_tickets.keys():
+ yield (changed_tickets[t_id].ticket_num, changes[t_id])
+ tmpl_context['data'].update({'changes': all_changes()})
+ mail.update(dict(
+ message_id = h.gen_message_id(),
+ text = tmpl.render(tmpl_context),
+ destinations = [monitoring_email]))
+ mail_tasks.sendmail.post(**mail)
+
c.app.globals.invalidate_bin_counts()
ThreadLocalORMSession.flush_all()
count = len(tickets)
[10/12] git commit: [#2502] ticket:300 Add \n before lists,
thus markdown will render them properly
Posted by jo...@apache.org.
[#2502] ticket:300 Add \n before lists, thus markdown will render them properly
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/1f298f19
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/1f298f19
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/1f298f19
Branch: refs/heads/master
Commit: 1f298f19d78a08706136747b6ccff8d1e3e0691e
Parents: 92f0595
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 16 12:38:47 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/data/mass_report | 1 +
.../forgetracker/tests/functional/test_root.py | 4 ++++
ForgeTracker/forgetracker/tracker_main.py | 2 +-
3 files changed, 6 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/1f298f19/ForgeTracker/forgetracker/data/mass_report
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/data/mass_report b/ForgeTracker/forgetracker/data/mass_report
index 629a1e2..72ae642 100644
--- a/ForgeTracker/forgetracker/data/mass_report
+++ b/ForgeTracker/forgetracker/data/mass_report
@@ -2,5 +2,6 @@
{% for t_num, change_text in data.changes %}
ticket: [{{ context.app.config.options.mount_point }}:#{{ t_num }}]
+
{{ change_text }}
{% endfor %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/1f298f19/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 760f740..1321e6f 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1141,17 +1141,21 @@ class TestFunctionalController(TrackerTestController):
# Expected data
email_header = '''Mass edit changing:
+
- **Status**: accepted
- **Milestone**: 2.0
'''
first_ticket_changes = '''ticket: [bugs:#1]
+
- **Status**: open --> accepted
'''
second_ticket_changes = '''ticket: [bugs:#2]
+
- **Milestone**: 1.0 --> 2.0
'''
third_ticket_changes = '''ticket: [bugs:#3]
+
- **Status**: unread --> accepted
- **Milestone**: 1.0 --> 2.0
'''
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/1f298f19/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 132f9ec..01b9f45 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -865,7 +865,7 @@ class RootController(BaseController):
).get_template('mass_report')
head = ['- **%s**: %s' % (get_label(f), v) for f, v in values.iteritems()]
head += ['- **%s**: %s' % (get_label(f), v) for f, v in custom_values.iteritems()]
- tmpl_context = {'context': c, 'data': {'header': '\n'.join(['Mass edit changing:'] + head)}}
+ tmpl_context = {'context': c, 'data': {'header': '\n'.join(['Mass edit changing:', ''] + head)}}
for user in users:
tmpl_context['data'].update({'changes': changes_iter(user)})
mail.update(dict(
[11/12] git commit: [#2502] ticket:300 Add ticket's summary for each
ticket in the email
Posted by jo...@apache.org.
[#2502] ticket:300 Add ticket's summary for each ticket in the email
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/25d07461
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/25d07461
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/25d07461
Branch: refs/heads/master
Commit: 25d074616b8b93fe5907835f730bc8dd68c149fa
Parents: b01ecfb
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Apr 17 10:00:14 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/data/mass_report | 4 ++--
.../forgetracker/tests/functional/test_root.py | 6 +++---
ForgeTracker/forgetracker/tracker_main.py | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/25d07461/ForgeTracker/forgetracker/data/mass_report
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/data/mass_report b/ForgeTracker/forgetracker/data/mass_report
index 72ae642..faddde2 100644
--- a/ForgeTracker/forgetracker/data/mass_report
+++ b/ForgeTracker/forgetracker/data/mass_report
@@ -1,7 +1,7 @@
{{ data.header }}
-{% for t_num, change_text in data.changes %}
-ticket: [{{ context.app.config.options.mount_point }}:#{{ t_num }}]
+{% for ticket, change_text in data.changes %}
+ticket: [{{ context.app.config.options.mount_point }}:#{{ ticket.ticket_num }}] {{ ticket.summary }}
{{ change_text }}
{% endfor %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/25d07461/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index c21744c..23c0890 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1148,17 +1148,17 @@ class TestFunctionalController(TrackerTestController):
- **Milestone**: 2.0
'''
- first_ticket_changes = '''ticket: [bugs:#1]
+ first_ticket_changes = '''ticket: [bugs:#1] test first ticket
- **Owner**: Anonymous --> Test Admin
- **Status**: open --> accepted
'''
- second_ticket_changes = '''ticket: [bugs:#2]
+ second_ticket_changes = '''ticket: [bugs:#2] test second ticket
- **Owner**: Anonymous --> Test Admin
- **Milestone**: 1.0 --> 2.0
'''
- third_ticket_changes = '''ticket: [bugs:#3]
+ third_ticket_changes = '''ticket: [bugs:#3] test third ticket
- **Owner**: Anonymous --> Test Admin
- **Status**: unread --> accepted
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/25d07461/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 396d300..8d786d9 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -852,7 +852,7 @@ class RootController(BaseController):
users = M.User.query.find({'_id': {'$in': filtered_changes.keys()}}).all()
def changes_iter(user):
for t_id in filtered_changes.get(user._id, []):
- yield (changed_tickets[t_id].ticket_num, changes[t_id])
+ yield (changed_tickets[t_id], changes[t_id])
mail = dict(
fromaddr = str(c.user._id),
reply_to = str(c.user._id),
@@ -889,7 +889,7 @@ class RootController(BaseController):
monitoring_email = c.app.config.options.get('TicketMonitoringEmail')
def all_changes():
for t_id in changed_tickets.keys():
- yield (changed_tickets[t_id].ticket_num, changes[t_id])
+ yield (changed_tickets[t_id], changes[t_id])
tmpl_context['data'].update({'changes': all_changes()})
mail.update(dict(
message_id = h.gen_message_id(),
[07/12] git commit: [#2502] ticket:300 Suppress comment notifications
during mass edit
Posted by jo...@apache.org.
[#2502] ticket:300 Suppress comment notifications during mass edit
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/201cc53b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/201cc53b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/201cc53b
Branch: refs/heads/master
Commit: 201cc53bd6c075f85f3494af11fc9259e169f05b
Parents: e802cce
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Apr 12 11:39:08 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/discuss.py | 7 ++++---
ForgeTracker/forgetracker/tracker_main.py | 2 +-
2 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/201cc53b/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index a59437b..76a9aa1 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -257,7 +257,7 @@ class Thread(Artifact, ActivityObject):
if ignore_security or has_access(self, 'unmoderated_post')():
log.info('Auto-approving message from %s', c.user.username)
file_info = kw.get('file_info', None)
- post.approve(file_info)
+ post.approve(file_info, notify=kw.get('notify', True))
else:
self.notify_moderators(post)
return post
@@ -582,7 +582,7 @@ class Post(Message, VersionedArtifact, ActivityObject):
super(Post, self).delete()
self.thread.num_replies = max(0, self.thread.num_replies - 1)
- def approve(self, file_info=None):
+ def approve(self, file_info=None, notify=True):
if self.status == 'ok':
return
self.status = 'ok'
@@ -594,7 +594,8 @@ class Post(Message, VersionedArtifact, ActivityObject):
and author._id != None):
security.simple_grant(
self.acl, author.project_role()._id, 'unmoderated_post')
- self.notify(file_info=file_info)
+ if notify:
+ self.notify(file_info=file_info)
artifact = self.thread.artifact or self.thread
session(self).flush()
self.thread.last_post_date = max(
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/201cc53b/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index bb0fe7b..28c73ac 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -838,7 +838,7 @@ class RootController(BaseController):
new_value,
old_value)
if message != '':
- ticket.discussion_thread.post(message)
+ ticket.discussion_thread.post(message, notify=False)
ticket.commit()
c.app.globals.invalidate_bin_counts()
ThreadLocalORMSession.flush_all()
[05/12] git commit: [#2502] ticket:300 Use template for mass report
Posted by jo...@apache.org.
[#2502] ticket:300 Use template for mass report
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/92f0595f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/92f0595f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/92f0595f
Branch: refs/heads/master
Commit: 92f0595ff4261856773cf4b4e6390bdcfd3ad998
Parents: be38319
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 16 10:55:03 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/data/mass_report | 6 +++
.../forgetracker/tests/functional/test_root.py | 28 +++++++--------
ForgeTracker/forgetracker/tracker_main.py | 26 ++++++++------
3 files changed, 34 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/92f0595f/ForgeTracker/forgetracker/data/mass_report
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/data/mass_report b/ForgeTracker/forgetracker/data/mass_report
new file mode 100644
index 0000000..629a1e2
--- /dev/null
+++ b/ForgeTracker/forgetracker/data/mass_report
@@ -0,0 +1,6 @@
+{{ data.header }}
+
+{% for t_num, change_text in data.changes %}
+ticket: [{{ context.app.config.options.mount_point }}:#{{ t_num }}]
+{{ change_text }}
+{% endfor %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/92f0595f/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index fe58a00..760f740 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1141,30 +1141,28 @@ class TestFunctionalController(TrackerTestController):
# Expected data
email_header = '''Mass edit changing:
-- **status**: accepted
-- **Milestone: 2.0
+- **Status**: accepted
+- **Milestone**: 2.0
+
'''
first_ticket_changes = '''ticket: [bugs:#1]
-- **status**: open --> accepted
-- **Milestone: 2.0 --> 2.0
+- **Status**: open --> accepted
'''
second_ticket_changes = '''ticket: [bugs:#2]
-- **status**: accepted --> accepted
-- **Milestone: 1.0 --> 2.0
+- **Milestone**: 1.0 --> 2.0
'''
third_ticket_changes = '''ticket: [bugs:#3]
-- **status**: unread --> accepted
-- **Milestone: --> 2.0
+- **Status**: unread --> accepted
+- **Milestone**: 1.0 --> 2.0
'''
- email = '\n'.join([email_header, first_ticket_changes])
+ email = u'\n'.join([email_header, first_ticket_changes, ''])
assert_equal(email, first_user_email.kwargs.text)
- email = '\n'.join([email_header, second_ticket_changes])
+ email = u'\n'.join([email_header, second_ticket_changes, ''])
assert_equal(email, second_user_email.kwargs.text)
- email = '\n'.join([email_header,
- first_ticket_changes,
- second_ticket_changes,
- third_ticket_changes])
- assert_equal(email, admin_email.kwargs.text)
+ assert_in(email_header, admin_email.kwargs.text)
+ assert_in(first_ticket_changes, admin_email.kwargs.text)
+ assert_in(second_ticket_changes, admin_email.kwargs.text)
+ assert_in(third_ticket_changes, admin_email.kwargs.text)
def test_filtered_by_subscription(self):
self.new_ticket(summary='test first ticket', status='open')
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/92f0595f/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index dc2df43..132f9ec 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -24,6 +24,7 @@ from urllib2 import urlopen
from webob import exc
import json
from itertools import ifilter, imap
+import jinja2
# Non-stdlib imports
import pkg_resources
@@ -37,6 +38,7 @@ from bson import ObjectId
from bson.son import SON
from bson.errors import InvalidId
from webhelpers import feedgenerator as FG
+from paste.deploy.converters import asbool
from ming import schema
from ming.orm.ormsession import ThreadLocalORMSession
@@ -847,26 +849,28 @@ class RootController(BaseController):
ticket.commit()
filtered_changes = filtered_by_subscription(changed_tickets)
users = M.User.query.find({'_id': {'$in': filtered_changes.keys()}}).all()
+ def changes_iter(user):
+ for t_id in filtered_changes.get(user._id, []):
+ yield (changed_tickets[t_id].ticket_num, changes[t_id])
mail = dict(
fromaddr = str(c.user._id),
reply_to = str(c.user._id),
- message_id = h.gen_message_id(),
subject = '[%s:%s] Mass edit changes by %s' % (c.project.shortname,
c.app.config.options.mount_point,
c.user.display_name),
)
- head = ['Mass edit changing:']
- # TODO: add list with new values here
- head = '\n'.join(head)
+ tmpl = jinja2.Environment(
+ loader=jinja2.PackageLoader('forgetracker', 'data'),
+ auto_reload=asbool(config.get('auto_reload_templates', True)),
+ ).get_template('mass_report')
+ head = ['- **%s**: %s' % (get_label(f), v) for f, v in values.iteritems()]
+ head += ['- **%s**: %s' % (get_label(f), v) for f, v in custom_values.iteritems()]
+ tmpl_context = {'context': c, 'data': {'header': '\n'.join(['Mass edit changing:'] + head)}}
for user in users:
- text = []
- for t_id in filtered_changes.get(user._id, []):
- text.append('ticket: [%s:#%d]' % (c.app.config.options.mount_point,
- changed_tickets[t_id].ticket_num))
- text.append(changes[t_id])
- text.append('')
+ tmpl_context['data'].update({'changes': changes_iter(user)})
mail.update(dict(
- text = head + '\n\n' + '\n'.join(text),
+ message_id = h.gen_message_id(),
+ text = tmpl.render(tmpl_context),
destinations = [str(user._id)]))
mail_tasks.sendmail.post(**mail)
# TODO: send summary on ticket's monitoring email
[04/12] git commit: [#2502] ticket:300 Send mass edit reports
Posted by jo...@apache.org.
[#2502] ticket:300 Send mass edit reports
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/be383197
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/be383197
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/be383197
Branch: refs/heads/master
Commit: be383197f85a2bfa4e5e2560d91d33733c993a7f
Parents: e843f9f
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Apr 12 13:59:12 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:27 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 8 ++--
ForgeTracker/forgetracker/tracker_main.py | 30 +++++++++++++++
2 files changed, 34 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/be383197/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 566f534..fe58a00 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1119,22 +1119,22 @@ class TestFunctionalController(TrackerTestController):
emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
assert_equal(len(emails), 3)
for email in emails:
- assert_equal(email.kwargs.subject, '[test:bugs] Mass edit changes')
+ assert_equal(email.kwargs.subject, '[test:bugs] Mass edit changes by Test Admin')
first_user_email = M.MonQTask.query.find({
'task_name': 'allura.tasks.mail_tasks.sendmail',
- 'kwargs.destinations': first_user._id
+ 'kwargs.destinations': str(first_user._id)
}).all()
assert_equal(len(first_user_email), 1)
first_user_email = first_user_email[0]
second_user_email = M.MonQTask.query.find({
'task_name': 'allura.tasks.mail_tasks.sendmail',
- 'kwargs.destinations': second_user._id
+ 'kwargs.destinations': str(second_user._id)
}).all()
assert_equal(len(second_user_email), 1)
second_user_email = second_user_email[0]
admin_email = M.MonQTask.query.find({
'task_name': 'allura.tasks.mail_tasks.sendmail',
- 'kwargs.destinations': admin._id
+ 'kwargs.destinations': str(admin._id)
}).all()
assert_equal(len(admin_email), 1)
admin_email = admin_email[0]
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/be383197/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 7ea8693..dc2df43 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -59,6 +59,7 @@ from allura.lib.zarkov_helpers import zero_fill_zarkov_result
from allura.controllers import AppDiscussionController, AppDiscussionRestController
from allura.controllers import attachments as ac
from allura.controllers import BaseController
+from allura.tasks import mail_tasks
# Local imports
from forgetracker import model as TM
@@ -807,6 +808,8 @@ class RootController(BaseController):
custom_values[cf.name] = v
custom_fields[cf.name] = cf
+ changes = {}
+ changed_tickets = {}
for ticket in tickets:
message = ''
for k, v in values.iteritems():
@@ -838,8 +841,35 @@ class RootController(BaseController):
new_value,
old_value)
if message != '':
+ changes[ticket._id] = message
+ changed_tickets[ticket._id] = ticket
ticket.discussion_thread.post(message, notify=False)
ticket.commit()
+ filtered_changes = filtered_by_subscription(changed_tickets)
+ users = M.User.query.find({'_id': {'$in': filtered_changes.keys()}}).all()
+ mail = dict(
+ fromaddr = str(c.user._id),
+ reply_to = str(c.user._id),
+ message_id = h.gen_message_id(),
+ subject = '[%s:%s] Mass edit changes by %s' % (c.project.shortname,
+ c.app.config.options.mount_point,
+ c.user.display_name),
+ )
+ head = ['Mass edit changing:']
+ # TODO: add list with new values here
+ head = '\n'.join(head)
+ for user in users:
+ text = []
+ for t_id in filtered_changes.get(user._id, []):
+ text.append('ticket: [%s:#%d]' % (c.app.config.options.mount_point,
+ changed_tickets[t_id].ticket_num))
+ text.append(changes[t_id])
+ text.append('')
+ mail.update(dict(
+ text = head + '\n\n' + '\n'.join(text),
+ destinations = [str(user._id)]))
+ mail_tasks.sendmail.post(**mail)
+ # TODO: send summary on ticket's monitoring email
c.app.globals.invalidate_bin_counts()
ThreadLocalORMSession.flush_all()
count = len(tickets)
[02/12] git commit: [#2502] ticket:300 Test summary emails for bulk
edit
Posted by jo...@apache.org.
[#2502] ticket:300 Test summary emails for bulk edit
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/02b97b55
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/02b97b55
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/02b97b55
Branch: refs/heads/master
Commit: 02b97b552eddb1fee3ea5900fd85468bccb37f94
Parents: 4ac36f9
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Apr 11 10:07:51 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Apr 22 19:40:26 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 52 +++++++++++++++
1 files changed, 52 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/02b97b55/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index bd6744c..3d1f14c 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1089,6 +1089,58 @@ class TestFunctionalController(TrackerTestController):
assert_in('test second ticket', str(ticket_rows))
assert_false('test third ticket' in str(ticket_rows))
+ def test_bulk_edit_notifications(self):
+ self.new_ticket(summary='test first ticket', status='open')
+ self.new_ticket(summary='test second ticket', status='open')
+ self.new_ticket(summary='test third ticket', status='open')
+ ThreadLocalORMSession.flush_all()
+ M.MonQTask.run_ready()
+ ThreadLocalORMSession.flush_all()
+ first_ticket = tm.Ticket.query.get(summary='test first ticket')
+ second_ticket = tm.Ticket.query.get(summary='test second ticket')
+ third_ticket = tm.Ticket.query.get(summary='test third ticket')
+ first_user = M.User.by_username('test-user-0')
+ second_user = M.User.by_username('test-user-1')
+ admin = M.User.by_username('test-admin')
+ first_ticket.subscribe(user=first_user)
+ second_ticket.subscribe(user=second_user)
+ M.MonQTask.query.remove()
+ self.app.post('/p/test/bugs/update_tickets', {
+ '__search': '',
+ '__ticket_ids': (
+ first_ticket._id,
+ second_ticket._id,
+ third_ticket._id),
+ 'status': 'accepted'})
+ M.MonQTask.run_ready()
+
+ emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
+ assert_equal(len(emails), 3)
+ for email in emails:
+ assert_equal(email.kwargs.subject, '[test:bugs] Bulk edit report')
+ assert_in('- **Status**: open --> accepted\n', email.kwargs.text)
+ first_user_email = M.MonQTask.query.find({
+ 'task_name': 'allura.tasks.mail_tasks.sendmail',
+ 'kwargs.destinations': first_user._id
+ }).all()
+ assert_equal(len(first_user_email), 1)
+ first_user_email = first_user_email[0]
+ second_user_email = M.MonQTask.query.find({
+ 'task_name': 'allura.tasks.mail_tasks.sendmail',
+ 'kwargs.destinations': second_user._id
+ }).all()
+ assert_equal(len(second_user_email), 1)
+ second_user_email = second_user_email[0]
+ admin_email = M.MonQTask.query.find({
+ 'task_name': 'allura.tasks.mail_tasks.sendmail',
+ 'kwargs.destinations': admin._id
+ }).all()
+ assert_equal(len(admin_email), 1)
+ admin_email = admin_email[0]
+
+ # TODO: check email text for first, second and admin users
+ #assert_in('### Affected tickets\n\n- [bugs:#1] test first ticket', first_user_email.kwargs.text)
+
def test_vote(self):
r = self.new_ticket(summary='test vote').follow()
assert_false(r.html.find('div', {'id': 'vote'}))