Skip to content

Commit adce4bf

Browse files
author
jomae
committed
1.1.4dev: merged [13755] from 1.0-stable (fix for #11920)
git-svn-id: http://trac.edgewall.org/intertrac/log:/trunk@13756 af82e41b-90c4-0310-8c96-b1721e28e2e2
1 parent cfd40df commit adce4bf

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

trac/ticket/query.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -945,9 +945,11 @@ def process_request(self, req):
945945
order = args.get('order')
946946
if isinstance(order, (list, tuple)):
947947
order = order[0] if order else None
948+
group = args.get('group')
949+
if isinstance(group, (list, tuple)):
950+
group = group[0] if group else None
948951
query = Query(self.env, report_id,
949-
constraints, cols, order,
950-
'desc' in args, args.get('group'),
952+
constraints, cols, order, 'desc' in args, group,
951953
'groupdesc' in args, 'verbose' in args,
952954
rows,
953955
args.get('page'),

trac/ticket/tests/query.py

+29-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from trac.ticket.model import Ticket
1616
from trac.ticket.query import Query, QueryModule, TicketQueryMacro
1717
from trac.util.datefmt import utc
18-
from trac.web.api import arg_list_to_args
18+
from trac.web.api import arg_list_to_args, parse_arg_list
1919
from trac.web.chrome import web_context
2020
from trac.web.href import Href
2121
from trac.wiki.formatter import LinkFormatter
@@ -668,6 +668,16 @@ def setUp(self):
668668
def tearDown(self):
669669
self.env.reset_db()
670670

671+
def _insert_ticket(self, **attrs):
672+
attrs.setdefault('reporter', 'joe')
673+
attrs.setdefault('summary', 'Summary')
674+
attrs.setdefault('status', 'new')
675+
ticket = Ticket(self.env)
676+
for name, value in attrs.iteritems():
677+
ticket[name] = value
678+
ticket.insert()
679+
return ticket
680+
671681
def _format_link(self, query, label):
672682
return str(self.query_module._format_link(self.formatter, 'query',
673683
query, label))
@@ -677,26 +687,38 @@ def test_empty_query(self):
677687
'<em class="error">[Error: Query filter requires '
678688
'field and constraints separated by a "="]</em>')
679689

680-
def _query_with_duplicated_args(self, name, values):
681-
self.req.arg_list = [(name, value) for value in values]
690+
def _process_request(self, query_string):
691+
self.req.arg_list = parse_arg_list(query_string)
682692
self.req.args = arg_list_to_args(self.req.arg_list)
683693
self.assertEqual(True, self.query_module.match_request(self.req))
684694
template, data, content_type = \
685695
self.query_module.process_request(self.req)
686696
return data
687697

688698
def test_duplicated_order_arguments(self):
689-
# query:?order=priority&order=id
690-
data = self._query_with_duplicated_args('order', ['priority', 'id'])
699+
data = self._process_request('order=priority&order=id')
691700
self.assertEqual([], data['tickets'])
692701
self.assertEqual('priority', data['query'].order)
693702

694703
def test_duplicated_report_arguments(self):
695-
# query:?report=1&report=2
696-
data = self._query_with_duplicated_args('report', ['1', '2'])
704+
data = self._process_request('report=1&report=2')
697705
self.assertEqual([], data['tickets'])
698706
self.assertEqual('1', data['query'].id)
699707

708+
def test_duplicated_group_arguments(self):
709+
self._insert_ticket(status='new')
710+
self._insert_ticket(status='assigned')
711+
data = self._process_request(
712+
'group=status&group=status&order=priority')
713+
self.assertNotEqual([], data['tickets'])
714+
self.assertEqual(set(('new', 'assigned')),
715+
set(t['status'] for t in data['tickets']))
716+
self.assertEqual(2, len(data['tickets']))
717+
self.assertNotEqual([], data['groups'])
718+
self.assertEqual(set(('new', 'assigned')),
719+
set(value for value, tickets in data['groups']))
720+
self.assertEqual(2, len(data['groups']))
721+
700722

701723
class TicketQueryMacroTestCase(unittest.TestCase):
702724

0 commit comments

Comments
 (0)