15
15
from trac .ticket .model import Ticket
16
16
from trac .ticket .query import Query , QueryModule , TicketQueryMacro
17
17
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
19
19
from trac .web .chrome import web_context
20
20
from trac .web .href import Href
21
21
from trac .wiki .formatter import LinkFormatter
@@ -668,6 +668,16 @@ def setUp(self):
668
668
def tearDown (self ):
669
669
self .env .reset_db ()
670
670
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
+
671
681
def _format_link (self , query , label ):
672
682
return str (self .query_module ._format_link (self .formatter , 'query' ,
673
683
query , label ))
@@ -677,26 +687,38 @@ def test_empty_query(self):
677
687
'<em class="error">[Error: Query filter requires '
678
688
'field and constraints separated by a "="]</em>' )
679
689
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 )
682
692
self .req .args = arg_list_to_args (self .req .arg_list )
683
693
self .assertEqual (True , self .query_module .match_request (self .req ))
684
694
template , data , content_type = \
685
695
self .query_module .process_request (self .req )
686
696
return data
687
697
688
698
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' )
691
700
self .assertEqual ([], data ['tickets' ])
692
701
self .assertEqual ('priority' , data ['query' ].order )
693
702
694
703
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' )
697
705
self .assertEqual ([], data ['tickets' ])
698
706
self .assertEqual ('1' , data ['query' ].id )
699
707
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
+
700
722
701
723
class TicketQueryMacroTestCase (unittest .TestCase ):
702
724
0 commit comments