• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

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>

変更サマリ

差分

--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -85,7 +85,7 @@ class Globals(MappedClass):
8585 @property
8686 def not_closed_mongo_query(self):
8787 return dict(
88- status={'$in': list(self.set_of_open_status_names)})
88+ status={'$nin': list(self.set_of_closed_status_names)})
8989
9090 @property
9191 def closed_query(self):
--- a/ForgeTracker/forgetracker/templates/tracker/index.html
+++ b/ForgeTracker/forgetracker/templates/tracker/index.html
@@ -16,7 +16,7 @@
1616 {{c.subscribe_form.display(value=subscribed, action='subscribe', style='icon')}}
1717 {% endif %}
1818 {% 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>
2020 {% endif %}
2121 {% endblock %}
2222
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -4,7 +4,7 @@ import Image, StringIO
44 import allura
55
66 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
88 from formencode.variabledecode import variable_encode
99
1010 from alluratest.controller import TestController
@@ -692,6 +692,25 @@ class TestFunctionalController(TrackerTestController):
692692 r = self.app.get('/bugs/1/', dict(page=1, limit=2))
693693 assert_true('Page 2 of 2' in r)
694694
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+
695714 class TestMilestoneAdmin(TrackerTestController):
696715 def _post(self, params, **kw):
697716 params['open_status_names'] = 'aa bb'
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -379,10 +379,26 @@ class RootController(BaseController):
379379 count=count, q=q, limit=limit, page=page, sort=sort,
380380 solr_error=solr_error, **kw)
381381
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+
382398 @with_trailing_slash
383399 @h.vardec
384400 @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):
386402 kw.pop('q', None) # it's just our original query mangled and sent back to us
387403 result = TM.Ticket.paged_query(c.app.globals.not_closed_mongo_query,
388404 sort=sort, limit=int(limit),
@@ -392,6 +408,11 @@ class RootController(BaseController):
392408 result['allow_edit'] = has_access(c.app, 'write')()
393409 result['help_msg'] = c.app.config.options.get('TicketHelpSearch')
394410 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])
395416 c.ticket_search_results = W.ticket_search_results
396417 return result
397418