my_controller_test.rb
239 lines
| 7.3 KiB
| text/x-ruby
|
RubyLexer
|
r6478 | # Redmine - project management software | ||
|
r9453 | # Copyright (C) 2006-2012 Jean-Philippe Lang | ||
|
r484 | # | ||
# 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. | ||||
|
r6478 | # | ||
|
r484 | # 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. | ||||
|
r6478 | # | ||
|
r484 | # 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__) | ||
|
r60 | require 'my_controller' | ||
# Re-raise errors caught by the controller. | ||||
class MyController; def rescue_action(e) raise e end; end | ||||
|
r2773 | class MyControllerTest < ActionController::TestCase | ||
|
r9526 | fixtures :users, :user_preferences, :roles, :projects, :members, :member_roles, | ||
:issues, :issue_statuses, :trackers, :enumerations, :custom_fields, :auth_sources | ||||
|
r6478 | |||
|
r60 | def setup | ||
@controller = MyController.new | ||||
@request = ActionController::TestRequest.new | ||||
|
r484 | @request.session[:user_id] = 2 | ||
|
r60 | @response = ActionController::TestResponse.new | ||
end | ||||
|
r484 | def test_index | ||
get :index | ||||
assert_response :success | ||||
assert_template 'page' | ||||
end | ||||
|
r6478 | |||
|
r484 | def test_page | ||
get :page | ||||
assert_response :success | ||||
assert_template 'page' | ||||
end | ||||
|
r6478 | |||
|
r9526 | def test_page_with_timelog_block | ||
preferences = User.find(2).pref | ||||
preferences[:my_page_layout] = {'top' => ['timelog']} | ||||
preferences.save! | ||||
TimeEntry.create!(:user => User.find(2), :spent_on => Date.yesterday, :issue_id => 1, :hours => 2.5, :activity_id => 10) | ||||
get :page | ||||
assert_response :success | ||||
assert_select 'tr.time-entry' do | ||||
assert_select 'td.subject a[href=/issues/1]' | ||||
assert_select 'td.hours', :text => '2.50' | ||||
end | ||||
end | ||||
|
r2274 | def test_my_account_should_show_editable_custom_fields | ||
|
r484 | get :account | ||
assert_response :success | ||||
assert_template 'account' | ||||
assert_equal User.find(2), assigns(:user) | ||||
|
r6478 | |||
|
r2274 | assert_tag :input, :attributes => { :name => 'user[custom_field_values][4]'} | ||
end | ||||
|
r6478 | |||
|
r2274 | def test_my_account_should_not_show_non_editable_custom_fields | ||
UserCustomField.find(4).update_attribute :editable, false | ||||
|
r6478 | |||
|
r2274 | get :account | ||
assert_response :success | ||||
assert_template 'account' | ||||
assert_equal User.find(2), assigns(:user) | ||||
|
r6478 | |||
|
r2274 | assert_no_tag :input, :attributes => { :name => 'user[custom_field_values][4]'} | ||
|
r484 | end | ||
def test_update_account | ||||
|
r4385 | post :account, | ||
:user => { | ||||
:firstname => "Joe", | ||||
:login => "root", | ||||
:admin => 1, | ||||
:group_ids => ['10'], | ||||
:custom_field_values => {"4" => "0100562500"} | ||||
} | ||||
|
r6478 | |||
|
r4293 | assert_redirected_to '/my/account' | ||
|
r484 | user = User.find(2) | ||
assert_equal user, assigns(:user) | ||||
assert_equal "Joe", user.firstname | ||||
assert_equal "jsmith", user.login | ||||
|
r2274 | assert_equal "0100562500", user.custom_value_for(4).value | ||
|
r4385 | # ignored | ||
|
r484 | assert !user.admin? | ||
|
r4385 | assert user.groups.empty? | ||
|
r484 | end | ||
|
r6478 | |||
|
r9283 | def test_my_account_should_show_destroy_link | ||
get :account | ||||
assert_select 'a[href=/my/account/destroy]' | ||||
end | ||||
def test_get_destroy_should_display_the_destroy_confirmation | ||||
get :destroy | ||||
assert_response :success | ||||
assert_template 'destroy' | ||||
assert_select 'form[action=/my/account/destroy]' do | ||||
assert_select 'input[name=confirm]' | ||||
end | ||||
end | ||||
def test_post_destroy_without_confirmation_should_not_destroy_account | ||||
assert_no_difference 'User.count' do | ||||
post :destroy | ||||
end | ||||
assert_response :success | ||||
assert_template 'destroy' | ||||
end | ||||
def test_post_destroy_without_confirmation_should_destroy_account | ||||
assert_difference 'User.count', -1 do | ||||
post :destroy, :confirm => '1' | ||||
end | ||||
assert_redirected_to '/' | ||||
assert_match /deleted/i, flash[:notice] | ||||
end | ||||
def test_post_destroy_with_unsubscribe_not_allowed_should_not_destroy_account | ||||
User.any_instance.stubs(:own_account_deletable?).returns(false) | ||||
assert_no_difference 'User.count' do | ||||
post :destroy, :confirm => '1' | ||||
end | ||||
assert_redirected_to '/my/account' | ||||
end | ||||
|
r484 | def test_change_password | ||
|
r842 | get :password | ||
|
r484 | assert_response :success | ||
|
r842 | assert_template 'password' | ||
|
r6478 | |||
|
r484 | # non matching password confirmation | ||
|
r6478 | post :password, :password => 'jsmith', | ||
|
r842 | :new_password => 'hello', | ||
:new_password_confirmation => 'hello2' | ||||
|
r484 | assert_response :success | ||
|
r842 | assert_template 'password' | ||
|
r8897 | assert_error_tag :content => /Password doesn't match confirmation/ | ||
|
r6478 | |||
|
r484 | # wrong password | ||
|
r6478 | post :password, :password => 'wrongpassword', | ||
|
r842 | :new_password => 'hello', | ||
:new_password_confirmation => 'hello' | ||||
assert_response :success | ||||
assert_template 'password' | ||||
|
r603 | assert_equal 'Wrong password', flash[:error] | ||
|
r6478 | |||
|
r484 | # good password | ||
|
r842 | post :password, :password => 'jsmith', | ||
:new_password => 'hello', | ||||
:new_password_confirmation => 'hello' | ||||
|
r4293 | assert_redirected_to '/my/account' | ||
|
r484 | assert User.try_to_login('jsmith', 'hello') | ||
|
r60 | end | ||
|
r6478 | |||
|
r9304 | def test_change_password_should_redirect_if_user_cannot_change_its_password | ||
User.find(2).update_attribute(:auth_source_id, 1) | ||||
get :password | ||||
assert_not_nil flash[:error] | ||||
assert_redirected_to '/my/account' | ||||
end | ||||
|
r3080 | def test_page_layout | ||
get :page_layout | ||||
assert_response :success | ||||
assert_template 'page_layout' | ||||
end | ||||
|
r6478 | |||
|
r3080 | def test_add_block | ||
|
r9850 | post :add_block, :block => 'issuesreportedbyme' | ||
assert_redirected_to '/my/page_layout' | ||||
|
r3080 | assert User.find(2).pref[:my_page_layout]['top'].include?('issuesreportedbyme') | ||
end | ||||
def test_remove_block | ||||
|
r9850 | post :remove_block, :block => 'issuesassignedtome' | ||
assert_redirected_to '/my/page_layout' | ||||
|
r3080 | assert !User.find(2).pref[:my_page_layout].values.flatten.include?('issuesassignedtome') | ||
end | ||||
def test_order_blocks | ||||
|
r9885 | xhr :post, :order_blocks, :group => 'left', 'blocks' => ['documents', 'calendar', 'latestnews'] | ||
|
r3080 | assert_response :success | ||
assert_equal ['documents', 'calendar', 'latestnews'], User.find(2).pref[:my_page_layout]['left'] | ||||
end | ||||
|
r3096 | |||
|
r8345 | def test_reset_rss_key_with_existing_key | ||
@previous_token_value = User.find(2).rss_key # Will generate one if it's missing | ||||
post :reset_rss_key | ||||
assert_not_equal @previous_token_value, User.find(2).rss_key | ||||
assert User.find(2).rss_token | ||||
assert_match /reset/, flash[:notice] | ||||
assert_redirected_to '/my/account' | ||||
end | ||||
def test_reset_rss_key_without_existing_key | ||||
assert_nil User.find(2).rss_token | ||||
post :reset_rss_key | ||||
assert User.find(2).rss_token | ||||
assert_match /reset/, flash[:notice] | ||||
assert_redirected_to '/my/account' | ||||
|
r3096 | end | ||
|
r3103 | |||
|
r8345 | def test_reset_api_key_with_existing_key | ||
@previous_token_value = User.find(2).api_key # Will generate one if it's missing | ||||
post :reset_api_key | ||||
assert_not_equal @previous_token_value, User.find(2).api_key | ||||
assert User.find(2).api_token | ||||
assert_match /reset/, flash[:notice] | ||||
assert_redirected_to '/my/account' | ||||
end | ||||
def test_reset_api_key_without_existing_key | ||||
assert_nil User.find(2).api_token | ||||
post :reset_api_key | ||||
assert User.find(2).api_token | ||||
assert_match /reset/, flash[:notice] | ||||
assert_redirected_to '/my/account' | ||||
|
r3103 | end | ||
|
r60 | end | ||