You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/04/24 06:54:29 UTC
[24/50] [abbrv] git commit: [#2502] ticket:300 Group changes by user,
based on his subscriptions
[#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/tv/docs
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):