Package trac :: Package search :: Package tests :: Module web_ui

Source Code for Module trac.search.tests.web_ui

  1  # -*- coding: utf-8 -*- 
  2  # 
  3  # Copyright (C) 2015-2023 Edgewall Software 
  4  # All rights reserved. 
  5  # 
  6  # This software is licensed as described in the file COPYING, which 
  7  # you should have received as part of this distribution. The terms 
  8  # are also available at https://trac.edgewall.org/wiki/TracLicense. 
  9  # 
 10  # This software consists of voluntary contributions made by many 
 11  # individuals. For the exact contribution history, see the revision 
 12  # history and logs, available at https://trac.edgewall.org/log/. 
 13   
 14  import os 
 15  import pkg_resources 
 16  import unittest 
 17   
 18  from trac.search.web_ui import SearchModule 
 19  from trac.test import EnvironmentStub, MockRequest 
 20  from trac.ticket.model import Ticket 
 21  from trac.ticket.test import insert_ticket 
 22  from trac.ticket.web_ui import TicketModule 
 23  from trac.wiki.admin import WikiAdmin 
 24  from trac.wiki.web_ui import WikiModule 
 25  from trac.web.api import RequestDone 
 26  from trac.web.chrome import Chrome 
 27   
 28   
29 -class SearchModuleTestCase(unittest.TestCase):
30
31 - def setUp(self):
32 self.env = EnvironmentStub() 33 self.search_module = SearchModule(self.env) 34 self.chrome = Chrome(self.env) 35 pages_dir = pkg_resources.resource_filename('trac.wiki', 36 'default-pages') 37 for page_name in ('WikiStart', 'TracModWSGI'): 38 page = os.path.join(pages_dir, page_name) 39 WikiAdmin(self.env).import_page(page, page_name)
40
41 - def tearDown(self):
42 self.env.reset_db()
43
44 - def _insert_ticket(self, **kw):
45 """Helper for inserting a ticket into the database""" 46 return insert_ticket(self.env, **kw)
47
48 - def _process_request(self, req):
49 self.assertEqual(True, self.search_module.match_request(req)) 50 return self.search_module.process_request(req)
51
52 - def _render_template(self, req, template, data):
53 rendered = self.chrome.render_template(req, template, data, 54 {'iterable': False, 55 'fragment': False}) 56 return rendered.decode('utf-8')
57
59 for _ in xrange(21): 60 self._insert_ticket(summary="Trac") 61 req = MockRequest(self.env, path_info='/search', 62 args={'page': '3', 'q': 'Trac', 'ticket': 'on'}) 63 64 data = self._process_request(req)[1] 65 66 self.assertEqual([], req.chrome['warnings']) 67 self.assertEqual(2, data['results'].page)
68
70 """Out of range value for page defaults to page 1.""" 71 for _ in xrange(20): 72 self._insert_ticket(summary="Trac") 73 req = MockRequest(self.env, path_info='/search', 74 args={'page': '3', 'q': 'Trac', 'ticket': 'on'}) 75 76 data = self._process_request(req)[1] 77 78 self.assertIn("Page 3 is out of range.", req.chrome['warnings']) 79 self.assertEqual(0, data['results'].page)
80
81 - def test_camelcase_quickjump(self):
82 """CamelCase word does quick-jump.""" 83 req = MockRequest(self.env, path_info='/search', 84 args={'q': 'WikiStart'}) 85 86 self.assertRaises(RequestDone, 87 self._process_request, req) 88 89 self.assertEqual('http://example.org/trac.cgi/wiki/WikiStart', 90 req.headers_sent['Location']) 91 self.assertIn("You arrived here through", req.chrome['notices'][0]) 92 self.assertIn('<a href="/trac.cgi/search?' 93 'q=WikiStart&amp;noquickjump=1">here</a>', 94 req.chrome['notices'][0])
95
97 """Non-CamelCase word does not quick-jump.""" 98 req = MockRequest(self.env, path_info='/search', 99 args={'q': 'TracModWSGI'}) 100 101 data = self._process_request(req)[1] 102 103 results = list(data['results']) 104 self.assertIsNone(data['quickjump']) 105 self.assertEqual('TracModWSGI', data['query']) 106 self.assertEqual(1, len(results)) 107 self.assertEqual('/trac.cgi/wiki/TracModWSGI', results[0]['href']) 108 self.assertEqual([], req.chrome['notices'])
109
111 """Test for regression of https://trac.edgewall.org/ticket/13212 112 """ 113 def do_render(query): 114 req = MockRequest(self.env, path_info='/search', 115 args={'q': query, 'noquickjump': '1'}) 116 template, data = self._process_request(req) 117 return self._render_template(req, template, data)
118 119 self.assertIn(u'<a href="/trac.cgi/query?id=1-2">Quickjump to <em>' 120 u'ticket:1,\u200b2</em></a>', do_render('ticket:1,2')) 121 self.assertIn(u'<a href="mailto:[email protected]">Quickjump to <em>' 122 u'<span class="icon">\u200b</span>[email protected]' 123 u'</em></a>', do_render('[email protected]'))
124 125
126 -def test_suite():
127 suite = unittest.TestSuite() 128 suite.addTest(unittest.makeSuite(SearchModuleTestCase)) 129 return suite
130 131 132 if __name__ == '__main__': 133 unittest.main(defaultTest='test_suite') 134