annotate test/functional/wiki_controller_test.rb @ 669:202986dd17e4 live bibliography_plugin_alpha

Merge from branch "cannam_integration"
author Chris Cannam
date Fri, 09 Sep 2011 16:56:21 +0100
parents 0c939c159af4
children cbb26bc654de
rev   line source
Chris@441 1 # Redmine - project management software
Chris@441 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@441 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@441 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19 require 'wiki_controller'
Chris@0 20
Chris@0 21 # Re-raise errors caught by the controller.
Chris@0 22 class WikiController; def rescue_action(e) raise e end; end
Chris@0 23
Chris@0 24 class WikiControllerTest < ActionController::TestCase
Chris@0 25 fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
Chris@441 26
Chris@0 27 def setup
Chris@0 28 @controller = WikiController.new
Chris@0 29 @request = ActionController::TestRequest.new
Chris@0 30 @response = ActionController::TestResponse.new
Chris@0 31 User.current = nil
Chris@0 32 end
Chris@441 33
Chris@0 34 def test_show_start_page
chris@37 35 get :show, :project_id => 'ecookbook'
Chris@0 36 assert_response :success
Chris@0 37 assert_template 'show'
Chris@0 38 assert_tag :tag => 'h1', :content => /CookBook documentation/
Chris@0 39
Chris@0 40 # child_pages macro
Chris@0 41 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
Chris@0 42 :child => { :tag => 'li',
Chris@0 43 :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
Chris@0 44 :content => 'Page with an inline image' } }
Chris@0 45 end
Chris@441 46
Chris@0 47 def test_show_page_with_name
chris@37 48 get :show, :project_id => 1, :id => 'Another_page'
Chris@0 49 assert_response :success
Chris@0 50 assert_template 'show'
Chris@0 51 assert_tag :tag => 'h1', :content => /Another page/
Chris@0 52 # Included page with an inline image
Chris@0 53 assert_tag :tag => 'p', :content => /This is an inline image/
Chris@0 54 assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
Chris@0 55 :alt => 'This is a logo' }
Chris@0 56 end
Chris@441 57
Chris@441 58 def test_show_redirected_page
Chris@441 59 WikiRedirect.create!(:wiki_id => 1, :title => 'Old_title', :redirects_to => 'Another_page')
Chris@441 60
Chris@441 61 get :show, :project_id => 'ecookbook', :id => 'Old_title'
Chris@441 62 assert_redirected_to '/projects/ecookbook/wiki/Another_page'
Chris@441 63 end
Chris@441 64
Chris@0 65 def test_show_with_sidebar
Chris@0 66 page = Project.find(1).wiki.pages.new(:title => 'Sidebar')
Chris@0 67 page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
Chris@0 68 page.save!
Chris@441 69
chris@37 70 get :show, :project_id => 1, :id => 'Another_page'
Chris@0 71 assert_response :success
Chris@0 72 assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
Chris@0 73 :content => /Side bar content for test_show_with_sidebar/
Chris@0 74 end
Chris@441 75
Chris@0 76 def test_show_unexistent_page_without_edit_right
chris@37 77 get :show, :project_id => 1, :id => 'Unexistent page'
Chris@0 78 assert_response 404
Chris@0 79 end
Chris@441 80
Chris@0 81 def test_show_unexistent_page_with_edit_right
Chris@0 82 @request.session[:user_id] = 2
chris@37 83 get :show, :project_id => 1, :id => 'Unexistent page'
Chris@0 84 assert_response :success
Chris@0 85 assert_template 'edit'
Chris@0 86 end
Chris@441 87
Chris@0 88 def test_create_page
Chris@0 89 @request.session[:user_id] = 2
chris@37 90 put :update, :project_id => 1,
chris@37 91 :id => 'New page',
Chris@0 92 :content => {:comments => 'Created the page',
Chris@0 93 :text => "h1. New page\n\nThis is a new page",
Chris@0 94 :version => 0}
chris@37 95 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'New_page'
Chris@0 96 page = Project.find(1).wiki.find_page('New page')
Chris@0 97 assert !page.new_record?
Chris@0 98 assert_not_nil page.content
Chris@0 99 assert_equal 'Created the page', page.content.comments
Chris@0 100 end
Chris@441 101
Chris@0 102 def test_create_page_with_attachments
Chris@0 103 @request.session[:user_id] = 2
Chris@0 104 assert_difference 'WikiPage.count' do
Chris@0 105 assert_difference 'Attachment.count' do
chris@37 106 put :update, :project_id => 1,
chris@37 107 :id => 'New page',
Chris@0 108 :content => {:comments => 'Created the page',
Chris@0 109 :text => "h1. New page\n\nThis is a new page",
Chris@0 110 :version => 0},
Chris@0 111 :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
Chris@0 112 end
Chris@0 113 end
Chris@0 114 page = Project.find(1).wiki.find_page('New page')
Chris@0 115 assert_equal 1, page.attachments.count
Chris@0 116 assert_equal 'testfile.txt', page.attachments.first.filename
Chris@0 117 end
Chris@119 118
Chris@119 119 def test_update_page
Chris@119 120 @request.session[:user_id] = 2
Chris@119 121 assert_no_difference 'WikiPage.count' do
Chris@119 122 assert_no_difference 'WikiContent.count' do
Chris@119 123 assert_difference 'WikiContent::Version.count' do
Chris@119 124 put :update, :project_id => 1,
Chris@119 125 :id => 'Another_page',
Chris@119 126 :content => {
Chris@119 127 :comments => "my comments",
Chris@119 128 :text => "edited",
Chris@119 129 :version => 1
Chris@119 130 }
Chris@119 131 end
Chris@119 132 end
Chris@119 133 end
Chris@119 134 assert_redirected_to '/projects/ecookbook/wiki/Another_page'
Chris@441 135
Chris@119 136 page = Wiki.find(1).pages.find_by_title('Another_page')
Chris@119 137 assert_equal "edited", page.content.text
Chris@119 138 assert_equal 2, page.content.version
Chris@119 139 assert_equal "my comments", page.content.comments
Chris@119 140 end
Chris@119 141
Chris@119 142 def test_update_page_with_failure
Chris@119 143 @request.session[:user_id] = 2
Chris@119 144 assert_no_difference 'WikiPage.count' do
Chris@119 145 assert_no_difference 'WikiContent.count' do
Chris@119 146 assert_no_difference 'WikiContent::Version.count' do
Chris@119 147 put :update, :project_id => 1,
Chris@119 148 :id => 'Another_page',
Chris@119 149 :content => {
Chris@119 150 :comments => 'a' * 300, # failure here, comment is too long
Chris@119 151 :text => 'edited',
Chris@119 152 :version => 1
Chris@119 153 }
Chris@119 154 end
Chris@119 155 end
Chris@119 156 end
Chris@119 157 assert_response :success
Chris@119 158 assert_template 'edit'
Chris@441 159
Chris@119 160 assert_error_tag :descendant => {:content => /Comment is too long/}
Chris@119 161 assert_tag :tag => 'textarea', :attributes => {:id => 'content_text'}, :content => 'edited'
Chris@119 162 assert_tag :tag => 'input', :attributes => {:id => 'content_version', :value => '1'}
Chris@119 163 end
Chris@441 164
Chris@441 165 def test_update_stale_page_should_not_raise_an_error
Chris@441 166 @request.session[:user_id] = 2
Chris@441 167 c = Wiki.find(1).find_page('Another_page').content
Chris@441 168 c.text = 'Previous text'
Chris@441 169 c.save!
Chris@441 170 assert_equal 2, c.version
Chris@441 171
Chris@441 172 assert_no_difference 'WikiPage.count' do
Chris@441 173 assert_no_difference 'WikiContent.count' do
Chris@441 174 assert_no_difference 'WikiContent::Version.count' do
Chris@441 175 put :update, :project_id => 1,
Chris@441 176 :id => 'Another_page',
Chris@441 177 :content => {
Chris@441 178 :comments => 'My comments',
Chris@441 179 :text => 'Text should not be lost',
Chris@441 180 :version => 1
Chris@441 181 }
Chris@441 182 end
Chris@441 183 end
Chris@441 184 end
Chris@441 185 assert_response :success
Chris@441 186 assert_template 'edit'
Chris@441 187 assert_tag :div,
Chris@441 188 :attributes => { :class => /error/ },
Chris@441 189 :content => /Data has been updated by another user/
Chris@441 190 assert_tag 'textarea',
Chris@441 191 :attributes => { :name => 'content[text]' },
Chris@441 192 :content => /Text should not be lost/
Chris@441 193 assert_tag 'input',
Chris@441 194 :attributes => { :name => 'content[comments]', :value => 'My comments' }
Chris@441 195
Chris@441 196 c.reload
Chris@441 197 assert_equal 'Previous text', c.text
Chris@441 198 assert_equal 2, c.version
Chris@441 199 end
Chris@441 200
Chris@0 201 def test_preview
Chris@0 202 @request.session[:user_id] = 2
chris@37 203 xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',
Chris@0 204 :content => { :comments => '',
Chris@0 205 :text => 'this is a *previewed text*',
Chris@0 206 :version => 3 }
Chris@0 207 assert_response :success
Chris@0 208 assert_template 'common/_preview'
Chris@0 209 assert_tag :tag => 'strong', :content => /previewed text/
Chris@0 210 end
Chris@441 211
Chris@0 212 def test_preview_new_page
Chris@0 213 @request.session[:user_id] = 2
chris@37 214 xhr :post, :preview, :project_id => 1, :id => 'New page',
Chris@0 215 :content => { :text => 'h1. New page',
Chris@0 216 :comments => '',
Chris@0 217 :version => 0 }
Chris@0 218 assert_response :success
Chris@0 219 assert_template 'common/_preview'
Chris@0 220 assert_tag :tag => 'h1', :content => /New page/
Chris@0 221 end
Chris@441 222
Chris@0 223 def test_history
chris@37 224 get :history, :project_id => 1, :id => 'CookBook_documentation'
Chris@0 225 assert_response :success
Chris@0 226 assert_template 'history'
Chris@0 227 assert_not_nil assigns(:versions)
Chris@0 228 assert_equal 3, assigns(:versions).size
Chris@0 229 assert_select "input[type=submit][name=commit]"
Chris@0 230 end
Chris@0 231
Chris@0 232 def test_history_with_one_version
chris@37 233 get :history, :project_id => 1, :id => 'Another_page'
Chris@0 234 assert_response :success
Chris@0 235 assert_template 'history'
Chris@0 236 assert_not_nil assigns(:versions)
Chris@0 237 assert_equal 1, assigns(:versions).size
Chris@0 238 assert_select "input[type=submit][name=commit]", false
Chris@0 239 end
Chris@441 240
Chris@0 241 def test_diff
chris@37 242 get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1
Chris@0 243 assert_response :success
Chris@0 244 assert_template 'diff'
Chris@0 245 assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
Chris@0 246 :content => /updated/
Chris@0 247 end
Chris@441 248
Chris@0 249 def test_annotate
chris@37 250 get :annotate, :project_id => 1, :id => 'CookBook_documentation', :version => 2
Chris@0 251 assert_response :success
Chris@0 252 assert_template 'annotate'
Chris@507 253
Chris@0 254 # Line 1
Chris@507 255 assert_tag :tag => 'tr', :child => {
Chris@507 256 :tag => 'th', :attributes => {:class => 'line-num'}, :content => '1', :sibling => {
Chris@507 257 :tag => 'td', :attributes => {:class => 'author'}, :content => /John Smith/, :sibling => {
Chris@507 258 :tag => 'td', :content => /h1\. CookBook documentation/
Chris@507 259 }
Chris@507 260 }
Chris@507 261 }
Chris@507 262
Chris@507 263 # Line 5
Chris@507 264 assert_tag :tag => 'tr', :child => {
Chris@507 265 :tag => 'th', :attributes => {:class => 'line-num'}, :content => '5', :sibling => {
Chris@507 266 :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/, :sibling => {
Chris@507 267 :tag => 'td', :content => /Some updated \[\[documentation\]\] here/
Chris@507 268 }
Chris@507 269 }
Chris@507 270 }
Chris@0 271 end
chris@37 272
chris@37 273 def test_get_rename
chris@37 274 @request.session[:user_id] = 2
chris@37 275 get :rename, :project_id => 1, :id => 'Another_page'
chris@37 276 assert_response :success
chris@37 277 assert_template 'rename'
chris@37 278 assert_tag 'option',
chris@37 279 :attributes => {:value => ''},
chris@37 280 :content => '',
chris@37 281 :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
chris@37 282 assert_no_tag 'option',
chris@37 283 :attributes => {:selected => 'selected'},
chris@37 284 :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
chris@37 285 end
Chris@441 286
chris@37 287 def test_get_rename_child_page
chris@37 288 @request.session[:user_id] = 2
chris@37 289 get :rename, :project_id => 1, :id => 'Child_1'
chris@37 290 assert_response :success
chris@37 291 assert_template 'rename'
chris@37 292 assert_tag 'option',
chris@37 293 :attributes => {:value => ''},
chris@37 294 :content => '',
chris@37 295 :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
chris@37 296 assert_tag 'option',
chris@37 297 :attributes => {:value => '2', :selected => 'selected'},
chris@37 298 :content => /Another page/,
chris@37 299 :parent => {
chris@37 300 :tag => 'select',
chris@37 301 :attributes => {:name => 'wiki_page[parent_id]'}
chris@37 302 }
chris@37 303 end
Chris@441 304
Chris@0 305 def test_rename_with_redirect
Chris@0 306 @request.session[:user_id] = 2
chris@37 307 post :rename, :project_id => 1, :id => 'Another_page',
Chris@0 308 :wiki_page => { :title => 'Another renamed page',
Chris@0 309 :redirect_existing_links => 1 }
chris@37 310 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page'
Chris@0 311 wiki = Project.find(1).wiki
Chris@0 312 # Check redirects
Chris@0 313 assert_not_nil wiki.find_page('Another page')
Chris@0 314 assert_nil wiki.find_page('Another page', :with_redirect => false)
Chris@0 315 end
Chris@0 316
Chris@0 317 def test_rename_without_redirect
Chris@0 318 @request.session[:user_id] = 2
chris@37 319 post :rename, :project_id => 1, :id => 'Another_page',
Chris@0 320 :wiki_page => { :title => 'Another renamed page',
Chris@0 321 :redirect_existing_links => "0" }
chris@37 322 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page'
Chris@0 323 wiki = Project.find(1).wiki
Chris@0 324 # Check that there's no redirects
Chris@0 325 assert_nil wiki.find_page('Another page')
Chris@0 326 end
Chris@441 327
chris@37 328 def test_rename_with_parent_assignment
chris@37 329 @request.session[:user_id] = 2
chris@37 330 post :rename, :project_id => 1, :id => 'Another_page',
chris@37 331 :wiki_page => { :title => 'Another page', :redirect_existing_links => "0", :parent_id => '4' }
chris@37 332 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
chris@37 333 assert_equal WikiPage.find(4), WikiPage.find_by_title('Another_page').parent
chris@37 334 end
chris@37 335
chris@37 336 def test_rename_with_parent_unassignment
chris@37 337 @request.session[:user_id] = 2
chris@37 338 post :rename, :project_id => 1, :id => 'Child_1',
chris@37 339 :wiki_page => { :title => 'Child 1', :redirect_existing_links => "0", :parent_id => '' }
chris@37 340 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1'
chris@37 341 assert_nil WikiPage.find_by_title('Child_1').parent
chris@37 342 end
Chris@441 343
Chris@0 344 def test_destroy_child
Chris@0 345 @request.session[:user_id] = 2
chris@37 346 delete :destroy, :project_id => 1, :id => 'Child_1'
chris@37 347 assert_redirected_to :action => 'index', :project_id => 'ecookbook'
Chris@0 348 end
Chris@441 349
Chris@0 350 def test_destroy_parent
Chris@0 351 @request.session[:user_id] = 2
Chris@0 352 assert_no_difference('WikiPage.count') do
chris@37 353 delete :destroy, :project_id => 1, :id => 'Another_page'
Chris@0 354 end
Chris@0 355 assert_response :success
Chris@0 356 assert_template 'destroy'
Chris@0 357 end
Chris@441 358
Chris@0 359 def test_destroy_parent_with_nullify
Chris@0 360 @request.session[:user_id] = 2
Chris@0 361 assert_difference('WikiPage.count', -1) do
chris@37 362 delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'nullify'
Chris@0 363 end
chris@37 364 assert_redirected_to :action => 'index', :project_id => 'ecookbook'
Chris@0 365 assert_nil WikiPage.find_by_id(2)
Chris@0 366 end
Chris@441 367
Chris@0 368 def test_destroy_parent_with_cascade
Chris@0 369 @request.session[:user_id] = 2
Chris@0 370 assert_difference('WikiPage.count', -3) do
chris@37 371 delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'destroy'
Chris@0 372 end
chris@37 373 assert_redirected_to :action => 'index', :project_id => 'ecookbook'
Chris@0 374 assert_nil WikiPage.find_by_id(2)
Chris@0 375 assert_nil WikiPage.find_by_id(5)
Chris@0 376 end
Chris@441 377
Chris@0 378 def test_destroy_parent_with_reassign
Chris@0 379 @request.session[:user_id] = 2
Chris@0 380 assert_difference('WikiPage.count', -1) do
chris@37 381 delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'reassign', :reassign_to_id => 1
Chris@0 382 end
chris@37 383 assert_redirected_to :action => 'index', :project_id => 'ecookbook'
Chris@0 384 assert_nil WikiPage.find_by_id(2)
Chris@0 385 assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
Chris@0 386 end
Chris@441 387
chris@37 388 def test_index
chris@37 389 get :index, :project_id => 'ecookbook'
Chris@0 390 assert_response :success
chris@37 391 assert_template 'index'
Chris@0 392 pages = assigns(:pages)
Chris@0 393 assert_not_nil pages
Chris@0 394 assert_equal Project.find(1).wiki.pages.size, pages.size
Chris@441 395 assert_equal pages.first.content.updated_on, pages.first.updated_on
Chris@441 396
Chris@0 397 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
Chris@0 398 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/CookBook_documentation' },
Chris@0 399 :content => 'CookBook documentation' },
Chris@0 400 :child => { :tag => 'ul',
Chris@0 401 :child => { :tag => 'li',
Chris@0 402 :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
Chris@0 403 :content => 'Page with an inline image' } } } },
Chris@0 404 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Another_page' },
Chris@0 405 :content => 'Another page' } }
Chris@0 406 end
chris@37 407
Chris@441 408 def test_index_should_include_atom_link
Chris@441 409 get :index, :project_id => 'ecookbook'
Chris@441 410 assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
Chris@441 411 end
Chris@441 412
chris@37 413 context "GET :export" do
chris@37 414 context "with an authorized user to export the wiki" do
chris@37 415 setup do
chris@37 416 @request.session[:user_id] = 2
chris@37 417 get :export, :project_id => 'ecookbook'
chris@37 418 end
Chris@441 419
chris@37 420 should_respond_with :success
chris@37 421 should_assign_to :pages
chris@37 422 should_respond_with_content_type "text/html"
chris@37 423 should "export all of the wiki pages to a single html file" do
chris@37 424 assert_select "a[name=?]", "CookBook_documentation"
chris@37 425 assert_select "a[name=?]", "Another_page"
chris@37 426 assert_select "a[name=?]", "Page_with_an_inline_image"
chris@37 427 end
Chris@441 428
chris@37 429 end
chris@37 430
chris@37 431 context "with an unauthorized user" do
chris@37 432 setup do
chris@37 433 get :export, :project_id => 'ecookbook'
chris@37 434
chris@37 435 should_respond_with :redirect
chris@37 436 should_redirect_to('wiki index') { {:action => 'show', :project_id => @project, :id => nil} }
chris@37 437 end
chris@37 438 end
chris@37 439 end
chris@37 440
chris@37 441 context "GET :date_index" do
chris@37 442 setup do
chris@37 443 get :date_index, :project_id => 'ecookbook'
chris@37 444 end
chris@37 445
chris@37 446 should_respond_with :success
chris@37 447 should_assign_to :pages
chris@37 448 should_assign_to :pages_by_date
chris@37 449 should_render_template 'wiki/date_index'
Chris@441 450
Chris@441 451 should "include atom link" do
Chris@441 452 assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
Chris@441 453 end
chris@37 454 end
Chris@441 455
Chris@0 456 def test_not_found
chris@37 457 get :show, :project_id => 999
Chris@0 458 assert_response 404
Chris@0 459 end
Chris@441 460
Chris@0 461 def test_protect_page
Chris@0 462 page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
Chris@0 463 assert !page.protected?
Chris@0 464 @request.session[:user_id] = 2
chris@37 465 post :protect, :project_id => 1, :id => page.title, :protected => '1'
chris@37 466 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
Chris@0 467 assert page.reload.protected?
Chris@0 468 end
Chris@441 469
Chris@0 470 def test_unprotect_page
Chris@0 471 page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
Chris@0 472 assert page.protected?
Chris@0 473 @request.session[:user_id] = 2
chris@37 474 post :protect, :project_id => 1, :id => page.title, :protected => '0'
chris@37 475 assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation'
Chris@0 476 assert !page.reload.protected?
Chris@0 477 end
Chris@441 478
Chris@0 479 def test_show_page_with_edit_link
Chris@0 480 @request.session[:user_id] = 2
chris@37 481 get :show, :project_id => 1
Chris@0 482 assert_response :success
Chris@0 483 assert_template 'show'
Chris@0 484 assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
Chris@0 485 end
Chris@441 486
Chris@0 487 def test_show_page_without_edit_link
Chris@0 488 @request.session[:user_id] = 4
chris@37 489 get :show, :project_id => 1
Chris@0 490 assert_response :success
Chris@0 491 assert_template 'show'
Chris@0 492 assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
Chris@441 493 end
Chris@441 494
Chris@0 495 def test_edit_unprotected_page
Chris@0 496 # Non members can edit unprotected wiki pages
Chris@0 497 @request.session[:user_id] = 4
chris@37 498 get :edit, :project_id => 1, :id => 'Another_page'
Chris@0 499 assert_response :success
Chris@0 500 assert_template 'edit'
Chris@0 501 end
Chris@441 502
Chris@0 503 def test_edit_protected_page_by_nonmember
Chris@0 504 # Non members can't edit protected wiki pages
Chris@0 505 @request.session[:user_id] = 4
chris@37 506 get :edit, :project_id => 1, :id => 'CookBook_documentation'
Chris@0 507 assert_response 403
Chris@0 508 end
Chris@441 509
Chris@0 510 def test_edit_protected_page_by_member
Chris@0 511 @request.session[:user_id] = 2
chris@37 512 get :edit, :project_id => 1, :id => 'CookBook_documentation'
Chris@0 513 assert_response :success
Chris@441 514 assert_template 'edit'
Chris@0 515 end
Chris@441 516
Chris@0 517 def test_history_of_non_existing_page_should_return_404
chris@37 518 get :history, :project_id => 1, :id => 'Unknown_page'
Chris@0 519 assert_response 404
Chris@0 520 end
Chris@0 521 end