|
12 | 12 | ReStructuredTextRenderer, # noqa: needed for RSTWikiTestCase to work
|
13 | 13 | )
|
14 | 14 | from trac.test import EnvironmentStub, MockRequest
|
| 15 | +from trac.ticket.web_ui import TicketModule # Imported for side effects |
| 16 | +from trac.ticket.query import QueryModule # Imported for side effects |
15 | 17 | from trac.web.api import RequestDone
|
| 18 | +from trac.web.main import RequestDispatcher |
16 | 19 |
|
17 | 20 | from tracdjangoplugin.middlewares import DjangoDBManagementMiddleware
|
18 | 21 | from tracdjangoplugin.plugins import PlainLoginComponent, ReservedUsernamesComponent
|
@@ -258,3 +261,56 @@ def test_wiki_can_render_rst(self):
|
258 | 261 | str(output),
|
259 | 262 | '<div class="document" id="test"><h1 class="title">TEST</h1></div>',
|
260 | 263 | )
|
| 264 | + |
| 265 | + |
| 266 | +class _TracRequestWrapper: |
| 267 | + """ |
| 268 | + Wrap a Trac request object to make it look like a Django response (so it |
| 269 | + can be used with assertContains) |
| 270 | + """ |
| 271 | + streaming = False |
| 272 | + charset = "utf8" |
| 273 | + |
| 274 | + def __init__(self, request): |
| 275 | + self._request = request |
| 276 | + |
| 277 | + @property |
| 278 | + def status_code(self): |
| 279 | + status_str, _ = self._request._status.split(" ", 1) |
| 280 | + return int(status_str) |
| 281 | + |
| 282 | + @property |
| 283 | + def content(self): |
| 284 | + return self._request.response_sent.getvalue() |
| 285 | + |
| 286 | + |
| 287 | +class RenameQueryTitleComponentTestCase(TestCase): |
| 288 | + def setUp(self): |
| 289 | + self.env = EnvironmentStub( |
| 290 | + enable=[ |
| 291 | + "trac.ticket.*", |
| 292 | + "trac.ticket.query.*", |
| 293 | + "trac.web.*", |
| 294 | + "tracdjangoplugin.plugins.renamequerytitlecomponent", |
| 295 | + ], |
| 296 | + disable=[ |
| 297 | + "trac.ticket.query.querymodule", |
| 298 | + ], |
| 299 | + ) |
| 300 | + self.request_factory = partial(MockRequest, self.env) |
| 301 | + self.dispatcher = RequestDispatcher(self.env) |
| 302 | + |
| 303 | + def get_response(self, **kwargs): |
| 304 | + """ |
| 305 | + Build a request using the given kwargs and return a Django-like |
| 306 | + response object. |
| 307 | + """ |
| 308 | + request = self.request_factory(**kwargs) |
| 309 | + self.assertRaises(RequestDone, self.dispatcher.dispatch, request) |
| 310 | + return _TracRequestWrapper(request) |
| 311 | + |
| 312 | + def test_new_title(self): |
| 313 | + response = self.get_response(path_info="/query") |
| 314 | + |
| 315 | + self.assertContains(response, '<h1>View Tickets <span class="numrows">(0 matches)</span></h1>', html=True) |
| 316 | + self.assertNotContains(response, '<h1>Custom Query <span class="numrows">(0 matches)</span></h1>', html=True) |
0 commit comments