allura
リビジョン | 64dc26efd6bd0f5dcd053ee5be4a2b6f06bbe245 (tree) |
---|---|
日時 | 2012-03-22 23:39:12 |
作者 | Jenny Steele <jsteele@geek...> |
コミッター | Tim Van Steenburgh |
[#3920] Results should now be consistent between tracker index page and its bulk edit page
Signed-off-by: Jenny Steele <jsteele@geek.net>
@@ -85,7 +85,7 @@ class Globals(MappedClass): | ||
85 | 85 | @property |
86 | 86 | def not_closed_mongo_query(self): |
87 | 87 | return dict( |
88 | - status={'$in': list(self.set_of_open_status_names)}) | |
88 | + status={'$nin': list(self.set_of_closed_status_names)}) | |
89 | 89 | |
90 | 90 | @property |
91 | 91 | def closed_query(self): |
@@ -16,7 +16,7 @@ | ||
16 | 16 | {{c.subscribe_form.display(value=subscribed, action='subscribe', style='icon')}} |
17 | 17 | {% endif %} |
18 | 18 | {% if allow_edit %} |
19 | - <a href="{{tg.url(c.app.url+'edit/', dict(q=url_q, limit=limit, sort=sort, page=page))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a> | |
19 | + <a href="{{tg.url(c.app.url+'edit/', dict(q=url_q, limit=limit, sort=url_sort, page=page))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a> | |
20 | 20 | {% endif %} |
21 | 21 | {% endblock %} |
22 | 22 |
@@ -4,7 +4,7 @@ import Image, StringIO | ||
4 | 4 | import allura |
5 | 5 | |
6 | 6 | from mock import patch |
7 | -from nose.tools import assert_true, assert_false, assert_equal | |
7 | +from nose.tools import assert_true, assert_false, assert_equal, assert_in | |
8 | 8 | from formencode.variabledecode import variable_encode |
9 | 9 | |
10 | 10 | from alluratest.controller import TestController |
@@ -692,6 +692,25 @@ class TestFunctionalController(TrackerTestController): | ||
692 | 692 | r = self.app.get('/bugs/1/', dict(page=1, limit=2)) |
693 | 693 | assert_true('Page 2 of 2' in r) |
694 | 694 | |
695 | + def test_bulk_edit_index(self): | |
696 | + self.new_ticket(summary='test first ticket', status='open') | |
697 | + self.new_ticket(summary='test second ticket', status='accepted') | |
698 | + self.new_ticket(summary='test third ticket', status='closed') | |
699 | + ThreadLocalORMSession.flush_all() | |
700 | + M.MonQTask.run_ready() | |
701 | + ThreadLocalORMSession.flush_all() | |
702 | + response = self.app.get('/p/test/bugs/?sort=summary+asc') | |
703 | + ticket_rows = response.html.find('table', {'class':'ticket-list'}).find('tbody').findAll('tr') | |
704 | + assert_in('test first ticket', str(ticket_rows[0].findAll('td')[1])) | |
705 | + assert_in('test second ticket', str(ticket_rows[1].findAll('td')[1])) | |
706 | + edit_link = response.html.find('a',{'title':'Bulk Edit'}) | |
707 | + expected_link = "/p/test/bugs/edit/?q=%21status%3Awont-fix+%26%26+%21status%3Aclosed&sort=snippet_s+asc&limit=25&page=0" | |
708 | + assert_equal(expected_link, edit_link['href']) | |
709 | + response = self.app.get(edit_link['href']) | |
710 | + ticket_rows = response.html.find('tbody', {'class':'ticket-list'}).findAll('tr') | |
711 | + assert_in('test first ticket', str(ticket_rows[1].findAll('td')[2])) | |
712 | + assert_in('test second ticket', str(ticket_rows[0].findAll('td')[2])) | |
713 | + | |
695 | 714 | class TestMilestoneAdmin(TrackerTestController): |
696 | 715 | def _post(self, params, **kw): |
697 | 716 | params['open_status_names'] = 'aa bb' |
@@ -379,10 +379,26 @@ class RootController(BaseController): | ||
379 | 379 | count=count, q=q, limit=limit, page=page, sort=sort, |
380 | 380 | solr_error=solr_error, **kw) |
381 | 381 | |
382 | + def _mongo_col_to_solr_col(self, name): | |
383 | + if name == 'ticket_num': | |
384 | + return 'ticket_num_i' | |
385 | + elif name == 'summary': | |
386 | + return 'snippet_s' | |
387 | + elif name == '_milestone': | |
388 | + return 'milestone_s' | |
389 | + elif name == 'status': | |
390 | + return 'status_s' | |
391 | + elif name == 'assigned_to': | |
392 | + return 'assigned_to_s' | |
393 | + else: | |
394 | + for field in c.app.globals.sortable_custom_fields_shown_in_search(): | |
395 | + if name == field['name']: | |
396 | + return field['sortable_name'] | |
397 | + | |
382 | 398 | @with_trailing_slash |
383 | 399 | @h.vardec |
384 | 400 | @expose('jinja:forgetracker:templates/tracker/index.html') |
385 | - def index(self, limit=25, columns=None, page=0, sort='ticket_num_i asc', **kw): | |
401 | + def index(self, limit=25, columns=None, page=0, sort='ticket_num desc', **kw): | |
386 | 402 | kw.pop('q', None) # it's just our original query mangled and sent back to us |
387 | 403 | result = TM.Ticket.paged_query(c.app.globals.not_closed_mongo_query, |
388 | 404 | sort=sort, limit=int(limit), |
@@ -392,6 +408,11 @@ class RootController(BaseController): | ||
392 | 408 | result['allow_edit'] = has_access(c.app, 'write')() |
393 | 409 | result['help_msg'] = c.app.config.options.get('TicketHelpSearch') |
394 | 410 | result['url_q'] = c.app.globals.not_closed_query |
411 | + result['url_sort'] = '' | |
412 | + if sort: | |
413 | + sort_split = sort.split(' ') | |
414 | + solr_col = self._mongo_col_to_solr_col(sort_split[0]) | |
415 | + result['url_sort'] = '%s %s' % (solr_col, sort_split[1]) | |
395 | 416 | c.ticket_search_results = W.ticket_search_results |
396 | 417 | return result |
397 | 418 |