diff test/functional/wiki_controller_test.rb @ 441:cbce1fd3b1b7 redmine-1.2

Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author Chris Cannam
date Mon, 06 Jun 2011 14:24:13 +0100
parents 8661b858af72
children 0c939c159af4
line wrap: on
line diff
--- a/test/functional/wiki_controller_test.rb	Thu Mar 03 11:42:28 2011 +0000
+++ b/test/functional/wiki_controller_test.rb	Mon Jun 06 14:24:13 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -23,14 +23,14 @@
 
 class WikiControllerTest < ActionController::TestCase
   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
-  
+
   def setup
     @controller = WikiController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
   end
-  
+
   def test_show_start_page
     get :show, :project_id => 'ecookbook'
     assert_response :success
@@ -43,7 +43,7 @@
                            :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
                                                     :content => 'Page with an inline image' } }
   end
-  
+
   def test_show_page_with_name
     get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
@@ -54,30 +54,37 @@
     assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
                                                :alt => 'This is a logo' }
   end
-  
+
+  def test_show_redirected_page
+    WikiRedirect.create!(:wiki_id => 1, :title => 'Old_title', :redirects_to => 'Another_page')
+
+    get :show, :project_id => 'ecookbook', :id => 'Old_title'
+    assert_redirected_to '/projects/ecookbook/wiki/Another_page'
+  end
+
   def test_show_with_sidebar
     page = Project.find(1).wiki.pages.new(:title => 'Sidebar')
     page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
     page.save!
-    
+
     get :show, :project_id => 1, :id => 'Another_page'
     assert_response :success
     assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
                               :content => /Side bar content for test_show_with_sidebar/
   end
-  
+
   def test_show_unexistent_page_without_edit_right
     get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response 404
   end
-  
+
   def test_show_unexistent_page_with_edit_right
     @request.session[:user_id] = 2
     get :show, :project_id => 1, :id => 'Unexistent page'
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_create_page
     @request.session[:user_id] = 2
     put :update, :project_id => 1,
@@ -91,7 +98,7 @@
     assert_not_nil page.content
     assert_equal 'Created the page', page.content.comments
   end
-  
+
   def test_create_page_with_attachments
     @request.session[:user_id] = 2
     assert_difference 'WikiPage.count' do
@@ -125,7 +132,7 @@
       end
     end
     assert_redirected_to '/projects/ecookbook/wiki/Another_page'
-    
+
     page = Wiki.find(1).pages.find_by_title('Another_page')
     assert_equal "edited", page.content.text
     assert_equal 2, page.content.version
@@ -149,12 +156,48 @@
       end
     assert_response :success
     assert_template 'edit'
-    
+
     assert_error_tag :descendant => {:content => /Comment is too long/}
     assert_tag :tag => 'textarea', :attributes => {:id => 'content_text'}, :content => 'edited'
     assert_tag :tag => 'input', :attributes => {:id => 'content_version', :value => '1'}
   end
-  
+
+  def test_update_stale_page_should_not_raise_an_error
+    @request.session[:user_id] = 2
+    c = Wiki.find(1).find_page('Another_page').content
+    c.text = 'Previous text'
+    c.save!
+    assert_equal 2, c.version
+
+    assert_no_difference 'WikiPage.count' do
+      assert_no_difference 'WikiContent.count' do
+        assert_no_difference 'WikiContent::Version.count' do
+          put :update, :project_id => 1,
+            :id => 'Another_page',
+            :content => {
+              :comments => 'My comments',
+              :text => 'Text should not be lost',
+              :version => 1
+            }
+        end
+      end
+    end
+    assert_response :success
+    assert_template 'edit'
+    assert_tag :div,
+      :attributes => { :class => /error/ },
+      :content => /Data has been updated by another user/
+    assert_tag 'textarea',
+      :attributes => { :name => 'content[text]' },
+      :content => /Text should not be lost/
+    assert_tag 'input',
+      :attributes => { :name => 'content[comments]', :value => 'My comments' }
+
+    c.reload
+    assert_equal 'Previous text', c.text
+    assert_equal 2, c.version
+  end
+
   def test_preview
     @request.session[:user_id] = 2
     xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',
@@ -165,7 +208,7 @@
     assert_template 'common/_preview'
     assert_tag :tag => 'strong', :content => /previewed text/
   end
-  
+
   def test_preview_new_page
     @request.session[:user_id] = 2
     xhr :post, :preview, :project_id => 1, :id => 'New page',
@@ -176,7 +219,7 @@
     assert_template 'common/_preview'
     assert_tag :tag => 'h1', :content => /New page/
   end
-  
+
   def test_history
     get :history, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
@@ -194,7 +237,7 @@
     assert_equal 1, assigns(:versions).size
     assert_select "input[type=submit][name=commit]", false
   end
-  
+
   def test_diff
     get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1
     assert_response :success
@@ -202,7 +245,7 @@
     assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
                                :content => /updated/
   end
-  
+
   def test_annotate
     get :annotate, :project_id => 1, :id =>  'CookBook_documentation', :version => 2
     assert_response :success
@@ -230,7 +273,7 @@
       :attributes => {:selected => 'selected'},
       :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}}
   end
-  
+
   def test_get_rename_child_page
     @request.session[:user_id] = 2
     get :rename, :project_id => 1, :id => 'Child_1'
@@ -248,7 +291,7 @@
         :attributes => {:name => 'wiki_page[parent_id]'}
       }
   end
-  
+
   def test_rename_with_redirect
     @request.session[:user_id] = 2
     post :rename, :project_id => 1, :id => 'Another_page',
@@ -271,7 +314,7 @@
     # Check that there's no redirects
     assert_nil wiki.find_page('Another page')
   end
-  
+
   def test_rename_with_parent_assignment
     @request.session[:user_id] = 2
     post :rename, :project_id => 1, :id => 'Another_page',
@@ -287,13 +330,13 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1'
     assert_nil WikiPage.find_by_title('Child_1').parent
   end
-  
+
   def test_destroy_child
     @request.session[:user_id] = 2
     delete :destroy, :project_id => 1, :id => 'Child_1'
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
   end
-  
+
   def test_destroy_parent
     @request.session[:user_id] = 2
     assert_no_difference('WikiPage.count') do
@@ -302,7 +345,7 @@
     assert_response :success
     assert_template 'destroy'
   end
-  
+
   def test_destroy_parent_with_nullify
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
@@ -311,7 +354,7 @@
     assert_redirected_to :action => 'index', :project_id => 'ecookbook'
     assert_nil WikiPage.find_by_id(2)
   end
-  
+
   def test_destroy_parent_with_cascade
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -3) do
@@ -321,7 +364,7 @@
     assert_nil WikiPage.find_by_id(2)
     assert_nil WikiPage.find_by_id(5)
   end
-  
+
   def test_destroy_parent_with_reassign
     @request.session[:user_id] = 2
     assert_difference('WikiPage.count', -1) do
@@ -331,7 +374,7 @@
     assert_nil WikiPage.find_by_id(2)
     assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
   end
-  
+
   def test_index
     get :index, :project_id => 'ecookbook'
     assert_response :success
@@ -339,7 +382,8 @@
     pages = assigns(:pages)
     assert_not_nil pages
     assert_equal Project.find(1).wiki.pages.size, pages.size
-    
+    assert_equal pages.first.content.updated_on, pages.first.updated_on
+
     assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
                     :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/CookBook_documentation' },
                                               :content => 'CookBook documentation' },
@@ -351,13 +395,18 @@
                                                                        :content => 'Another page' } }
   end
 
+  def test_index_should_include_atom_link
+    get :index, :project_id => 'ecookbook'
+    assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
+  end
+
   context "GET :export" do
     context "with an authorized user to export the wiki" do
       setup do
         @request.session[:user_id] = 2
         get :export, :project_id => 'ecookbook'
       end
-      
+
       should_respond_with :success
       should_assign_to :pages
       should_respond_with_content_type "text/html"
@@ -366,7 +415,7 @@
         assert_select "a[name=?]", "Another_page"
         assert_select "a[name=?]", "Page_with_an_inline_image"
       end
-      
+
     end
 
     context "with an unauthorized user" do
@@ -388,14 +437,17 @@
     should_assign_to :pages
     should_assign_to :pages_by_date
     should_render_template 'wiki/date_index'
-    
+
+    should "include atom link" do
+      assert_tag 'a', :attributes => { :href => '/projects/ecookbook/activity.atom?show_wiki_edits=1'}
+    end
   end
-  
+
   def test_not_found
     get :show, :project_id => 999
     assert_response 404
   end
-  
+
   def test_protect_page
     page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
     assert !page.protected?
@@ -404,7 +456,7 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page'
     assert page.reload.protected?
   end
-  
+
   def test_unprotect_page
     page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
     assert page.protected?
@@ -413,7 +465,7 @@
     assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation'
     assert !page.reload.protected?
   end
-  
+
   def test_show_page_with_edit_link
     @request.session[:user_id] = 2
     get :show, :project_id => 1
@@ -421,15 +473,15 @@
     assert_template 'show'
     assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
   end
-  
+
   def test_show_page_without_edit_link
     @request.session[:user_id] = 4
     get :show, :project_id => 1
     assert_response :success
     assert_template 'show'
     assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
-  end  
-  
+  end
+
   def test_edit_unprotected_page
     # Non members can edit unprotected wiki pages
     @request.session[:user_id] = 4
@@ -437,21 +489,21 @@
     assert_response :success
     assert_template 'edit'
   end
-  
+
   def test_edit_protected_page_by_nonmember
     # Non members can't edit protected wiki pages
     @request.session[:user_id] = 4
     get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response 403
   end
-  
+
   def test_edit_protected_page_by_member
     @request.session[:user_id] = 2
     get :edit, :project_id => 1, :id => 'CookBook_documentation'
     assert_response :success
-    assert_template 'edit'    
+    assert_template 'edit'
   end
-  
+
   def test_history_of_non_existing_page_should_return_404
     get :history, :project_id => 1, :id => 'Unknown_page'
     assert_response 404