##// END OF EJS Templates
test: route: move previews test in test_issues_extra_actions to new file...
Toshi MARUYAMA -
r8232:3995ead92bc5
parent child
Show More
@@ -0,0 +1,31
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 require File.expand_path('../../../test_helper', __FILE__)
19
20 class RoutingPreviewsTest < ActionController::IntegrationTest
21 def test_previews
22 assert_routing(
23 { :method => 'get', :path => "/issues/preview/123" },
24 { :controller => 'previews', :action => 'issue', :id => '123' }
25 )
26 assert_routing(
27 { :method => 'post', :path => "/issues/preview/123" },
28 { :controller => 'previews', :action => 'issue', :id => '123' }
29 )
30 end
31 end
@@ -1,529 +1,521
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 20 class RoutingTest < ActionController::IntegrationTest
21 21 def test_issues_rest_actions
22 22 assert_routing(
23 23 { :method => 'get', :path => "/issues" },
24 24 { :controller => 'issues', :action => 'index' }
25 25 )
26 26 assert_routing(
27 27 { :method => 'get', :path => "/issues.pdf" },
28 28 { :controller => 'issues', :action => 'index', :format => 'pdf' }
29 29 )
30 30 assert_routing(
31 31 { :method => 'get', :path => "/issues.atom" },
32 32 { :controller => 'issues', :action => 'index', :format => 'atom' }
33 33 )
34 34 assert_routing(
35 35 { :method => 'get', :path => "/issues.xml" },
36 36 { :controller => 'issues', :action => 'index', :format => 'xml' }
37 37 )
38 38 assert_routing(
39 39 { :method => 'get', :path => "/projects/23/issues" },
40 40 { :controller => 'issues', :action => 'index', :project_id => '23' }
41 41 )
42 42 assert_routing(
43 43 { :method => 'get', :path => "/projects/23/issues.pdf" },
44 44 { :controller => 'issues', :action => 'index', :project_id => '23',
45 45 :format => 'pdf' }
46 46 )
47 47 assert_routing(
48 48 { :method => 'get', :path => "/projects/23/issues.atom" },
49 49 { :controller => 'issues', :action => 'index', :project_id => '23',
50 50 :format => 'atom' }
51 51 )
52 52 assert_routing(
53 53 { :method => 'get', :path => "/projects/23/issues.xml" },
54 54 { :controller => 'issues', :action => 'index', :project_id => '23',
55 55 :format => 'xml' }
56 56 )
57 57 assert_routing(
58 58 { :method => 'get', :path => "/issues/64" },
59 59 { :controller => 'issues', :action => 'show', :id => '64' }
60 60 )
61 61 assert_routing(
62 62 { :method => 'get', :path => "/issues/64.pdf" },
63 63 { :controller => 'issues', :action => 'show', :id => '64',
64 64 :format => 'pdf' }
65 65 )
66 66 assert_routing(
67 67 { :method => 'get', :path => "/issues/64.atom" },
68 68 { :controller => 'issues', :action => 'show', :id => '64',
69 69 :format => 'atom' }
70 70 )
71 71 assert_routing(
72 72 { :method => 'get', :path => "/issues/64.xml" },
73 73 { :controller => 'issues', :action => 'show', :id => '64',
74 74 :format => 'xml' }
75 75 )
76 76 assert_routing(
77 77 { :method => 'get', :path => "/projects/23/issues/new" },
78 78 { :controller => 'issues', :action => 'new', :project_id => '23' }
79 79 )
80 80 end
81 81
82 82 def test_issues_form_update
83 83 assert_routing(
84 84 { :method => 'post', :path => "/projects/23/issues/new" },
85 85 { :controller => 'issues', :action => 'new', :project_id => '23' }
86 86 )
87 87 assert_routing(
88 88 { :method => 'post', :path => "/projects/23/issues" },
89 89 { :controller => 'issues', :action => 'create', :project_id => '23' }
90 90 )
91 91 assert_routing(
92 92 { :method => 'post', :path => "/issues.xml" },
93 93 { :controller => 'issues', :action => 'create', :format => 'xml' }
94 94 )
95 95 assert_routing(
96 96 { :method => 'get', :path => "/issues/64/edit" },
97 97 { :controller => 'issues', :action => 'edit', :id => '64' }
98 98 )
99 99 assert_routing(
100 100 { :method => 'put', :path => "/issues/1.xml" },
101 101 { :controller => 'issues', :action => 'update', :id => '1',
102 102 :format => 'xml' }
103 103 )
104 104 assert_routing(
105 105 { :method => 'delete', :path => "/issues/1.xml" },
106 106 { :controller => 'issues', :action => 'destroy', :id => '1',
107 107 :format => 'xml' }
108 108 )
109 109 end
110 110
111 111 def test_issues_extra_actions
112 112 assert_routing(
113 113 { :method => 'get', :path => "/projects/23/issues/64/copy" },
114 114 { :controller => 'issues', :action => 'new', :project_id => '23',
115 115 :copy_from => '64' }
116 116 )
117 117 assert_routing(
118 { :method => 'get', :path => "/issues/preview/123" },
119 { :controller => 'previews', :action => 'issue', :id => '123' }
120 )
121 assert_routing(
122 { :method => 'post', :path => "/issues/preview/123" },
123 { :controller => 'previews', :action => 'issue', :id => '123' }
124 )
125 assert_routing(
126 118 { :method => 'get', :path => "/issues/context_menu" },
127 119 { :controller => 'context_menus', :action => 'issues' }
128 120 )
129 121 assert_routing(
130 122 { :method => 'post', :path => "/issues/context_menu" },
131 123 { :controller => 'context_menus', :action => 'issues' }
132 124 )
133 125 assert_routing(
134 126 { :method => 'get', :path => "/issues/bulk_edit" },
135 127 { :controller => 'issues', :action => 'bulk_edit' }
136 128 )
137 129 assert_routing(
138 130 { :method => 'post', :path => "/issues/bulk_update" },
139 131 { :controller => 'issues', :action => 'bulk_update' }
140 132 )
141 133 end
142 134
143 135 def test_issue_categories
144 136 assert_routing(
145 137 { :method => 'get', :path => "/projects/foo/issue_categories" },
146 138 { :controller => 'issue_categories', :action => 'index',
147 139 :project_id => 'foo' }
148 140 )
149 141 assert_routing(
150 142 { :method => 'get', :path => "/projects/foo/issue_categories.xml" },
151 143 { :controller => 'issue_categories', :action => 'index',
152 144 :project_id => 'foo', :format => 'xml' }
153 145 )
154 146 assert_routing(
155 147 { :method => 'get', :path => "/projects/foo/issue_categories.json" },
156 148 { :controller => 'issue_categories', :action => 'index',
157 149 :project_id => 'foo', :format => 'json' }
158 150 )
159 151 assert_routing(
160 152 { :method => 'get', :path => "/projects/foo/issue_categories/new" },
161 153 { :controller => 'issue_categories', :action => 'new',
162 154 :project_id => 'foo' }
163 155 )
164 156 assert_routing(
165 157 { :method => 'post', :path => "/projects/foo/issue_categories" },
166 158 { :controller => 'issue_categories', :action => 'create',
167 159 :project_id => 'foo' }
168 160 )
169 161 assert_routing(
170 162 { :method => 'post', :path => "/projects/foo/issue_categories.xml" },
171 163 { :controller => 'issue_categories', :action => 'create',
172 164 :project_id => 'foo', :format => 'xml' }
173 165 )
174 166 assert_routing(
175 167 { :method => 'post', :path => "/projects/foo/issue_categories.json" },
176 168 { :controller => 'issue_categories', :action => 'create',
177 169 :project_id => 'foo', :format => 'json' }
178 170 )
179 171 assert_routing(
180 172 { :method => 'get', :path => "/issue_categories/1" },
181 173 { :controller => 'issue_categories', :action => 'show', :id => '1' }
182 174 )
183 175 assert_routing(
184 176 { :method => 'get', :path => "/issue_categories/1.xml" },
185 177 { :controller => 'issue_categories', :action => 'show', :id => '1',
186 178 :format => 'xml' }
187 179 )
188 180 assert_routing(
189 181 { :method => 'get', :path => "/issue_categories/1.json" },
190 182 { :controller => 'issue_categories', :action => 'show', :id => '1',
191 183 :format => 'json' }
192 184 )
193 185 assert_routing(
194 186 { :method => 'get', :path => "/issue_categories/1/edit" },
195 187 { :controller => 'issue_categories', :action => 'edit', :id => '1' }
196 188 )
197 189 assert_routing(
198 190 { :method => 'put', :path => "/issue_categories/1" },
199 191 { :controller => 'issue_categories', :action => 'update', :id => '1' }
200 192 )
201 193 assert_routing(
202 194 { :method => 'put', :path => "/issue_categories/1.xml" },
203 195 { :controller => 'issue_categories', :action => 'update', :id => '1',
204 196 :format => 'xml' }
205 197 )
206 198 assert_routing(
207 199 { :method => 'put', :path => "/issue_categories/1.json" },
208 200 { :controller => 'issue_categories', :action => 'update', :id => '1',
209 201 :format => 'json' }
210 202 )
211 203 assert_routing(
212 204 { :method => 'delete', :path => "/issue_categories/1" },
213 205 { :controller => 'issue_categories', :action => 'destroy', :id => '1' }
214 206 )
215 207 assert_routing(
216 208 { :method => 'delete', :path => "/issue_categories/1.xml" },
217 209 { :controller => 'issue_categories', :action => 'destroy', :id => '1',
218 210 :format => 'xml' }
219 211 )
220 212 assert_routing(
221 213 { :method => 'delete', :path => "/issue_categories/1.json" },
222 214 { :controller => 'issue_categories', :action => 'destroy', :id => '1',
223 215 :format => 'json' }
224 216 )
225 217 end
226 218
227 219 def test_news
228 220 assert_routing(
229 221 { :method => 'get', :path => "/news" },
230 222 { :controller => 'news', :action => 'index' }
231 223 )
232 224 assert_routing(
233 225 { :method => 'get', :path => "/news.atom" },
234 226 { :controller => 'news', :action => 'index', :format => 'atom' }
235 227 )
236 228 assert_routing(
237 229 { :method => 'get', :path => "/news.xml" },
238 230 { :controller => 'news', :action => 'index', :format => 'xml' }
239 231 )
240 232 assert_routing(
241 233 { :method => 'get', :path => "/news.json" },
242 234 { :controller => 'news', :action => 'index', :format => 'json' }
243 235 )
244 236 assert_routing(
245 237 { :method => 'get', :path => "/projects/567/news" },
246 238 { :controller => 'news', :action => 'index', :project_id => '567' }
247 239 )
248 240 assert_routing(
249 241 { :method => 'get', :path => "/projects/567/news.atom" },
250 242 { :controller => 'news', :action => 'index', :format => 'atom',
251 243 :project_id => '567' }
252 244 )
253 245 assert_routing(
254 246 { :method => 'get', :path => "/projects/567/news.xml" },
255 247 { :controller => 'news', :action => 'index', :format => 'xml',
256 248 :project_id => '567' }
257 249 )
258 250 assert_routing(
259 251 { :method => 'get', :path => "/projects/567/news.json" },
260 252 { :controller => 'news', :action => 'index', :format => 'json',
261 253 :project_id => '567' }
262 254 )
263 255 assert_routing(
264 256 { :method => 'get', :path => "/news/2" },
265 257 { :controller => 'news', :action => 'show', :id => '2' }
266 258 )
267 259 assert_routing(
268 260 { :method => 'get', :path => "/projects/567/news/new" },
269 261 { :controller => 'news', :action => 'new', :project_id => '567' }
270 262 )
271 263 assert_routing(
272 264 { :method => 'get', :path => "/news/234" },
273 265 { :controller => 'news', :action => 'show', :id => '234' }
274 266 )
275 267 assert_routing(
276 268 { :method => 'get', :path => "/news/567/edit" },
277 269 { :controller => 'news', :action => 'edit', :id => '567' }
278 270 )
279 271 assert_routing(
280 272 { :method => 'get', :path => "/news/preview" },
281 273 { :controller => 'previews', :action => 'news' }
282 274 )
283 275 assert_routing(
284 276 { :method => 'post', :path => "/projects/567/news" },
285 277 { :controller => 'news', :action => 'create', :project_id => '567' }
286 278 )
287 279 assert_routing(
288 280 { :method => 'post', :path => "/news/567/comments" },
289 281 { :controller => 'comments', :action => 'create', :id => '567' }
290 282 )
291 283 assert_routing(
292 284 { :method => 'put', :path => "/news/567" },
293 285 { :controller => 'news', :action => 'update', :id => '567' }
294 286 )
295 287 assert_routing(
296 288 { :method => 'delete', :path => "/news/567" },
297 289 { :controller => 'news', :action => 'destroy', :id => '567' }
298 290 )
299 291 assert_routing(
300 292 { :method => 'delete', :path => "/news/567/comments/15" },
301 293 { :controller => 'comments', :action => 'destroy', :id => '567',
302 294 :comment_id => '15' }
303 295 )
304 296 end
305 297
306 298 def test_projects
307 299 assert_routing(
308 300 { :method => 'get', :path => "/projects" },
309 301 { :controller => 'projects', :action => 'index' }
310 302 )
311 303 assert_routing(
312 304 { :method => 'get', :path => "/projects.atom" },
313 305 { :controller => 'projects', :action => 'index', :format => 'atom' }
314 306 )
315 307 assert_routing(
316 308 { :method => 'get', :path => "/projects.xml" },
317 309 { :controller => 'projects', :action => 'index', :format => 'xml' }
318 310 )
319 311 assert_routing(
320 312 { :method => 'get', :path => "/projects/new" },
321 313 { :controller => 'projects', :action => 'new' }
322 314 )
323 315 assert_routing(
324 316 { :method => 'get', :path => "/projects/test" },
325 317 { :controller => 'projects', :action => 'show', :id => 'test' }
326 318 )
327 319 assert_routing(
328 320 { :method => 'get', :path => "/projects/1.xml" },
329 321 { :controller => 'projects', :action => 'show', :id => '1',
330 322 :format => 'xml' }
331 323 )
332 324 assert_routing(
333 325 { :method => 'get', :path => "/projects/4223/settings" },
334 326 { :controller => 'projects', :action => 'settings', :id => '4223' }
335 327 )
336 328 assert_routing(
337 329 { :method => 'get', :path => "/projects/4223/settings/members" },
338 330 { :controller => 'projects', :action => 'settings', :id => '4223',
339 331 :tab => 'members' }
340 332 )
341 333 assert_routing(
342 334 { :method => 'post', :path => "/projects" },
343 335 { :controller => 'projects', :action => 'create' }
344 336 )
345 337 assert_routing(
346 338 { :method => 'post', :path => "/projects.xml" },
347 339 { :controller => 'projects', :action => 'create', :format => 'xml' }
348 340 )
349 341 assert_routing(
350 342 { :method => 'post', :path => "/projects/64/archive" },
351 343 { :controller => 'projects', :action => 'archive', :id => '64' }
352 344 )
353 345 assert_routing(
354 346 { :method => 'post', :path => "/projects/64/unarchive" },
355 347 { :controller => 'projects', :action => 'unarchive', :id => '64' }
356 348 )
357 349 assert_routing(
358 350 { :method => 'put', :path => "/projects/64/enumerations" },
359 351 { :controller => 'project_enumerations', :action => 'update',
360 352 :project_id => '64' }
361 353 )
362 354 assert_routing(
363 355 { :method => 'put', :path => "/projects/4223" },
364 356 { :controller => 'projects', :action => 'update', :id => '4223' }
365 357 )
366 358 assert_routing(
367 359 { :method => 'put', :path => "/projects/1.xml" },
368 360 { :controller => 'projects', :action => 'update', :id => '1',
369 361 :format => 'xml' }
370 362 )
371 363 assert_routing(
372 364 { :method => 'delete', :path => "/projects/64" },
373 365 { :controller => 'projects', :action => 'destroy', :id => '64' }
374 366 )
375 367 assert_routing(
376 368 { :method => 'delete', :path => "/projects/1.xml" },
377 369 { :controller => 'projects', :action => 'destroy', :id => '1',
378 370 :format => 'xml' }
379 371 )
380 372 assert_routing(
381 373 { :method => 'delete', :path => "/projects/64/enumerations" },
382 374 { :controller => 'project_enumerations', :action => 'destroy',
383 375 :project_id => '64' }
384 376 )
385 377 end
386 378
387 379 def test_queries
388 380 assert_routing(
389 381 { :method => 'get', :path => "/queries.xml" },
390 382 { :controller => 'queries', :action => 'index', :format => 'xml' }
391 383 )
392 384 assert_routing(
393 385 { :method => 'get', :path => "/queries.json" },
394 386 { :controller => 'queries', :action => 'index', :format => 'json' }
395 387 )
396 388 assert_routing(
397 389 { :method => 'get', :path => "/queries/new" },
398 390 { :controller => 'queries', :action => 'new' }
399 391 )
400 392 assert_routing(
401 393 { :method => 'get', :path => "/projects/redmine/queries/new" },
402 394 { :controller => 'queries', :action => 'new', :project_id => 'redmine' }
403 395 )
404 396 assert_routing(
405 397 { :method => 'post', :path => "/queries" },
406 398 { :controller => 'queries', :action => 'create' }
407 399 )
408 400 assert_routing(
409 401 { :method => 'post', :path => "/projects/redmine/queries" },
410 402 { :controller => 'queries', :action => 'create', :project_id => 'redmine' }
411 403 )
412 404 assert_routing(
413 405 { :method => 'get', :path => "/queries/1/edit" },
414 406 { :controller => 'queries', :action => 'edit', :id => '1' }
415 407 )
416 408 assert_routing(
417 409 { :method => 'put', :path => "/queries/1" },
418 410 { :controller => 'queries', :action => 'update', :id => '1' }
419 411 )
420 412 assert_routing(
421 413 { :method => 'delete', :path => "/queries/1" },
422 414 { :controller => 'queries', :action => 'destroy', :id => '1' }
423 415 )
424 416 end
425 417
426 418 def test_wiki_singular_projects_pages
427 419 assert_routing(
428 420 { :method => 'get', :path => "/projects/567/wiki" },
429 421 { :controller => 'wiki', :action => 'show', :project_id => '567' }
430 422 )
431 423 assert_routing(
432 424 { :method => 'get', :path => "/projects/567/wiki/lalala" },
433 425 { :controller => 'wiki', :action => 'show', :project_id => '567',
434 426 :id => 'lalala' }
435 427 )
436 428 assert_routing(
437 429 { :method => 'get', :path => "/projects/567/wiki/my_page/edit" },
438 430 { :controller => 'wiki', :action => 'edit', :project_id => '567',
439 431 :id => 'my_page' }
440 432 )
441 433 assert_routing(
442 434 { :method => 'get', :path => "/projects/1/wiki/CookBook_documentation/history" },
443 435 { :controller => 'wiki', :action => 'history', :project_id => '1',
444 436 :id => 'CookBook_documentation' }
445 437 )
446 438 assert_routing(
447 439 { :method => 'get', :path => "/projects/1/wiki/CookBook_documentation/diff" },
448 440 { :controller => 'wiki', :action => 'diff', :project_id => '1',
449 441 :id => 'CookBook_documentation' }
450 442 )
451 443 assert_routing(
452 444 { :method => 'get', :path => "/projects/1/wiki/CookBook_documentation/diff/2" },
453 445 { :controller => 'wiki', :action => 'diff', :project_id => '1',
454 446 :id => 'CookBook_documentation', :version => '2' }
455 447 )
456 448 assert_routing(
457 449 { :method => 'get', :path => "/projects/1/wiki/CookBook_documentation/diff/2/vs/1" },
458 450 { :controller => 'wiki', :action => 'diff', :project_id => '1',
459 451 :id => 'CookBook_documentation', :version => '2', :version_from => '1' }
460 452 )
461 453 assert_routing(
462 454 { :method => 'get', :path => "/projects/1/wiki/CookBook_documentation/annotate/2" },
463 455 { :controller => 'wiki', :action => 'annotate', :project_id => '1',
464 456 :id => 'CookBook_documentation', :version => '2' }
465 457 )
466 458 assert_routing(
467 459 { :method => 'get', :path => "/projects/22/wiki/ladida/rename" },
468 460 { :controller => 'wiki', :action => 'rename', :project_id => '22',
469 461 :id => 'ladida' }
470 462 )
471 463 assert_routing(
472 464 { :method => 'get', :path => "/projects/567/wiki/index" },
473 465 { :controller => 'wiki', :action => 'index', :project_id => '567' }
474 466 )
475 467 assert_routing(
476 468 { :method => 'get', :path => "/projects/567/wiki/date_index" },
477 469 { :controller => 'wiki', :action => 'date_index', :project_id => '567' }
478 470 )
479 471 assert_routing(
480 472 { :method => 'get', :path => "/projects/567/wiki/export" },
481 473 { :controller => 'wiki', :action => 'export', :project_id => '567' }
482 474 )
483 475 assert_routing(
484 476 { :method => 'post', :path => "/projects/567/wiki/CookBook_documentation/preview" },
485 477 { :controller => 'wiki', :action => 'preview', :project_id => '567',
486 478 :id => 'CookBook_documentation' }
487 479 )
488 480 assert_routing(
489 481 { :method => 'post', :path => "/projects/22/wiki/ladida/rename" },
490 482 { :controller => 'wiki', :action => 'rename', :project_id => '22',
491 483 :id => 'ladida' }
492 484 )
493 485 assert_routing(
494 486 { :method => 'post', :path => "/projects/22/wiki/ladida/protect" },
495 487 { :controller => 'wiki', :action => 'protect', :project_id => '22',
496 488 :id => 'ladida' }
497 489 )
498 490 assert_routing(
499 491 { :method => 'post', :path => "/projects/22/wiki/ladida/add_attachment" },
500 492 { :controller => 'wiki', :action => 'add_attachment', :project_id => '22',
501 493 :id => 'ladida' }
502 494 )
503 495 assert_routing(
504 496 { :method => 'put', :path => "/projects/567/wiki/my_page" },
505 497 { :controller => 'wiki', :action => 'update', :project_id => '567',
506 498 :id => 'my_page' }
507 499 )
508 500 assert_routing(
509 501 { :method => 'delete', :path => "/projects/22/wiki/ladida" },
510 502 { :controller => 'wiki', :action => 'destroy', :project_id => '22',
511 503 :id => 'ladida' }
512 504 )
513 505 end
514 506
515 507 def test_wikis_plural_admin_setup
516 508 assert_routing(
517 509 { :method => 'get', :path => "/projects/ladida/wiki/destroy" },
518 510 { :controller => 'wikis', :action => 'destroy', :id => 'ladida' }
519 511 )
520 512 assert_routing(
521 513 { :method => 'post', :path => "/projects/ladida/wiki" },
522 514 { :controller => 'wikis', :action => 'edit', :id => 'ladida' }
523 515 )
524 516 assert_routing(
525 517 { :method => 'post', :path => "/projects/ladida/wiki/destroy" },
526 518 { :controller => 'wikis', :action => 'destroy', :id => 'ladida' }
527 519 )
528 520 end
529 521 end
General Comments 0
You need to be logged in to leave comments. Login now