versions_controller_test.rb
226 lines
| 7.9 KiB
| text/x-ruby
|
RubyLexer
|
r5059 | # Redmine - project management software | ||
|
r9453 | # Copyright (C) 2006-2012 Jean-Philippe Lang | ||
|
r942 | # | ||
# 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. | ||||
|
r6507 | # | ||
|
r942 | # 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. | ||||
|
r6507 | # | ||
|
r942 | # 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. | ||||
|
r4395 | require File.expand_path('../../test_helper', __FILE__) | ||
|
r942 | require 'versions_controller' | ||
# Re-raise errors caught by the controller. | ||||
class VersionsController; def rescue_action(e) raise e end; end | ||||
|
r2773 | class VersionsControllerTest < ActionController::TestCase | ||
|
r5059 | fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules, :issue_statuses | ||
|
r6507 | |||
|
r942 | def setup | ||
@controller = VersionsController.new | ||||
@request = ActionController::TestRequest.new | ||||
@response = ActionController::TestResponse.new | ||||
User.current = nil | ||||
end | ||||
|
r6507 | |||
|
r3936 | def test_index | ||
get :index, :project_id => 1 | ||||
assert_response :success | ||||
assert_template 'index' | ||||
assert_not_nil assigns(:versions) | ||||
# Version with no date set appears | ||||
assert assigns(:versions).include?(Version.find(3)) | ||||
# Completed version doesn't appear | ||||
assert !assigns(:versions).include?(Version.find(1)) | ||||
|
r3968 | # Context menu on issues | ||
|
r9885 | assert_select "script", :text => Regexp.new(Regexp.escape("contextMenuInit('/issues/context_menu')")) | ||
|
r8580 | # Links to versions anchors | ||
assert_tag 'a', :attributes => {:href => '#2.0'}, | ||||
:ancestor => {:tag => 'div', :attributes => {:id => 'sidebar'}} | ||||
|
r8579 | # Links to completed versions in the sidebar | ||
assert_tag 'a', :attributes => {:href => '/versions/1'}, | ||||
:ancestor => {:tag => 'div', :attributes => {:id => 'sidebar'}} | ||||
|
r3936 | end | ||
|
r6507 | |||
|
r3936 | def test_index_with_completed_versions | ||
get :index, :project_id => 1, :completed => 1 | ||||
assert_response :success | ||||
assert_template 'index' | ||||
assert_not_nil assigns(:versions) | ||||
# Version with no date set appears | ||||
assert assigns(:versions).include?(Version.find(3)) | ||||
# Completed version appears | ||||
assert assigns(:versions).include?(Version.find(1)) | ||||
end | ||||
|
r7918 | def test_index_with_tracker_ids | ||
get :index, :project_id => 1, :tracker_ids => [1, 3] | ||||
assert_response :success | ||||
assert_template 'index' | ||||
assert_not_nil assigns(:issues_by_version) | ||||
assert_nil assigns(:issues_by_version).values.flatten.detect {|issue| issue.tracker_id == 2} | ||||
end | ||||
|
r3936 | def test_index_showing_subprojects_versions | ||
|
r8959 | @subproject_version = Version.create!(:project => Project.find(3), :name => "Subproject version") | ||
|
r3936 | get :index, :project_id => 1, :with_subprojects => 1 | ||
assert_response :success | ||||
assert_template 'index' | ||||
assert_not_nil assigns(:versions) | ||||
assert assigns(:versions).include?(Version.find(4)), "Shared version not found" | ||||
assert assigns(:versions).include?(@subproject_version), "Subproject version not found" | ||||
end | ||||
|
r10017 | def test_index_should_prepend_shared_versions | ||
get :index, :project_id => 1 | ||||
assert_response :success | ||||
assert_select '#sidebar' do | ||||
assert_select 'a[href=?]', '#2.0', :text => '2.0' | ||||
assert_select 'a[href=?]', '#subproject1-2.0', :text => 'eCookbook Subproject 1 - 2.0' | ||||
end | ||||
assert_select '#content' do | ||||
assert_select 'a[name=?]', '2.0', :text => '2.0' | ||||
assert_select 'a[name=?]', 'subproject1-2.0', :text => 'eCookbook Subproject 1 - 2.0' | ||||
end | ||||
end | ||||
|
r942 | def test_show | ||
get :show, :id => 2 | ||||
assert_response :success | ||||
assert_template 'show' | ||||
assert_not_nil assigns(:version) | ||||
|
r6507 | |||
|
r942 | assert_tag :tag => 'h2', :content => /1.0/ | ||
end | ||||
|
r6507 | |||
|
r7918 | def test_new | ||
@request.session[:user_id] = 2 | ||||
get :new, :project_id => '1' | ||||
assert_response :success | ||||
assert_template 'new' | ||||
end | ||||
|
r8725 | def test_new_from_issue_form | ||
@request.session[:user_id] = 2 | ||||
xhr :get, :new, :project_id => '1' | ||||
assert_response :success | ||||
|
r9860 | assert_template 'new' | ||
assert_equal 'text/javascript', response.content_type | ||||
|
r8725 | end | ||
|
r3976 | def test_create | ||
|
r3434 | @request.session[:user_id] = 2 # manager | ||
assert_difference 'Version.count' do | ||||
|
r3976 | post :create, :project_id => '1', :version => {:name => 'test_add_version'} | ||
|
r3434 | end | ||
assert_redirected_to '/projects/ecookbook/settings/versions' | ||||
version = Version.find_by_name('test_add_version') | ||||
assert_not_nil version | ||||
assert_equal 1, version.project_id | ||||
end | ||||
|
r6507 | |||
|
r3976 | def test_create_from_issue_form | ||
|
r8725 | @request.session[:user_id] = 2 | ||
|
r3434 | assert_difference 'Version.count' do | ||
|
r3976 | xhr :post, :create, :project_id => '1', :version => {:name => 'test_add_version_from_issue_form'} | ||
|
r3434 | end | ||
version = Version.find_by_name('test_add_version_from_issue_form') | ||||
assert_not_nil version | ||||
assert_equal 1, version.project_id | ||||
|
r8725 | |||
assert_response :success | ||||
|
r9860 | assert_template 'create' | ||
assert_equal 'text/javascript', response.content_type | ||||
|
r9904 | assert_include 'test_add_version_from_issue_form', response.body | ||
|
r8725 | end | ||
def test_create_from_issue_form_with_failure | ||||
@request.session[:user_id] = 2 | ||||
assert_no_difference 'Version.count' do | ||||
xhr :post, :create, :project_id => '1', :version => {:name => ''} | ||||
end | ||||
assert_response :success | ||||
|
r9860 | assert_template 'new' | ||
assert_equal 'text/javascript', response.content_type | ||||
|
r3434 | end | ||
|
r6507 | |||
|
r974 | def test_get_edit | ||
@request.session[:user_id] = 2 | ||||
get :edit, :id => 2 | ||||
assert_response :success | ||||
assert_template 'edit' | ||||
end | ||||
|
r6507 | |||
|
r2909 | def test_close_completed | ||
Version.update_all("status = 'open'") | ||||
@request.session[:user_id] = 2 | ||||
|
r3983 | put :close_completed, :project_id => 'ecookbook' | ||
|
r2909 | assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook' | ||
assert_not_nil Version.find_by_status('closed') | ||||
end | ||||
|
r6507 | |||
|
r3974 | def test_post_update | ||
|
r974 | @request.session[:user_id] = 2 | ||
|
r6507 | put :update, :id => 2, | ||
:version => { :name => 'New version name', | ||||
|
r974 | :effective_date => Date.today.strftime("%Y-%m-%d")} | ||
|
r2315 | assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook' | ||
|
r974 | version = Version.find(2) | ||
assert_equal 'New version name', version.name | ||||
assert_equal Date.today, version.effective_date | ||||
end | ||||
|
r6507 | |||
|
r4240 | def test_post_update_with_validation_failure | ||
@request.session[:user_id] = 2 | ||||
|
r6507 | put :update, :id => 2, | ||
:version => { :name => '', | ||||
|
r4240 | :effective_date => Date.today.strftime("%Y-%m-%d")} | ||
assert_response :success | ||||
assert_template 'edit' | ||||
end | ||||
|
r974 | |||
def test_destroy | ||||
@request.session[:user_id] = 2 | ||||
|
r7918 | assert_difference 'Version.count', -1 do | ||
delete :destroy, :id => 3 | ||||
end | ||||
|
r2315 | assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook' | ||
|
r1441 | assert_nil Version.find_by_id(3) | ||
|
r974 | end | ||
|
r6507 | |||
|
r7918 | def test_destroy_version_in_use_should_fail | ||
@request.session[:user_id] = 2 | ||||
assert_no_difference 'Version.count' do | ||||
delete :destroy, :id => 2 | ||||
end | ||||
assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook' | ||||
assert flash[:error].match(/Unable to delete version/) | ||||
assert Version.find_by_id(2) | ||||
end | ||||
|
r974 | def test_issue_status_by | ||
xhr :get, :status_by, :id => 2 | ||||
assert_response :success | ||||
|
r9869 | assert_template 'status_by' | ||
|
r974 | assert_template '_issue_counts' | ||
end | ||||
|
r6507 | |||
|
r5059 | def test_issue_status_by_status | ||
xhr :get, :status_by, :id => 2, :status_by => 'status' | ||||
assert_response :success | ||||
|
r9869 | assert_template 'status_by' | ||
|
r5059 | assert_template '_issue_counts' | ||
|
r9869 | assert_include 'Assigned', response.body | ||
assert_include 'Closed', response.body | ||||
|
r5059 | end | ||
|
r942 | end | ||