##// END OF EJS Templates
Send an email to the user when an administrator activates a registered user (#2656)....
Send an email to the user when an administrator activates a registered user (#2656). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2484 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r2315:765f7abc6033
r2422:04c428e05948
Show More
projects_controller_test.rb
517 lines | 17.1 KiB | text/x-ruby | RubyLexer
/ test / functional / projects_controller_test.rb
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Calendar....
r1796 # Redmine - project management software
# Copyright (C) 2006-2008 Jean-Philippe Lang
Jean-Philippe Lang
v0.2.0...
r5 #
# 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.
Jean-Philippe Lang
Initial commit...
r2 require File.dirname(__FILE__) + '/../test_helper'
require 'projects_controller'
# Re-raise errors caught by the controller.
class ProjectsController; def rescue_action(e) raise e end; end
class ProjectsControllerTest < Test::Unit::TestCase
Jean-Philippe Lang
Activity enhancements:...
r1213 fixtures :projects, :versions, :users, :roles, :members, :issues, :journals, :journal_details,
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115 :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
:attachments
Jean-Philippe Lang
Initial commit...
r2
def setup
@controller = ProjectsController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
Jean-Philippe Lang
Fixed: Calendar and Gantt show private subprojects even if current user is not a member of them (#1217)....
r1416 @request.session[:user_id] = nil
Jean-Philippe Lang
Slight tests fixes....
r2053 Setting.default_language = 'en'
Jean-Philippe Lang
Initial commit...
r2 end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
def test_index_routing
assert_routing(
{:method => :get, :path => '/projects'},
:controller => 'projects', :action => 'index'
)
end
Jean-Philippe Lang
Initial commit...
r2 def test_index
get :index
assert_response :success
Jean-Philippe Lang
Moved ProjectsController#list to ProjectsController#index....
r1450 assert_template 'index'
Jean-Philippe Lang
Merged nested projects branch. Removes limit on subproject nesting (#594)....
r2302 assert_not_nil assigns(:projects)
assert_tag :ul, :child => {:tag => 'li',
:descendant => {:tag => 'a', :content => 'eCookbook'},
:child => { :tag => 'ul',
:descendant => { :tag => 'a',
:content => 'Child of private child'
}
}
}
assert_no_tag :a, :content => /Private child of eCookbook/
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 end
def test_index_atom_routing
assert_routing(
{:method => :get, :path => '/projects.atom'},
:controller => 'projects', :action => 'index', :format => 'atom'
)
end
Jean-Philippe Lang
Fixed: no :author method error on projects atom feed (#1623)....
r1639
def test_index_atom
get :index, :format => 'atom'
assert_response :success
assert_template 'common/feed.atom.rxml'
assert_select 'feed>title', :text => 'Redmine: Latest projects'
assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
def test_add_routing
assert_routing(
{:method => :get, :path => '/projects/new'},
:controller => 'projects', :action => 'add'
)
assert_recognizes(
{:controller => 'projects', :action => 'add'},
{:method => :post, :path => '/projects/new'}
)
assert_recognizes(
{:controller => 'projects', :action => 'add'},
{:method => :post, :path => '/projects'}
)
end
def test_show_routing
assert_routing(
{:method => :get, :path => '/projects/test'},
:controller => 'projects', :action => 'show', :id => 'test'
)
end
def test_show_by_id
get :show, :id => 1
Jean-Philippe Lang
0.3 unstable...
r10 assert_response :success
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 assert_template 'show'
assert_not_nil assigns(:project)
Jean-Philippe Lang
Added some tests for projects controller and helper....
r976 end
Jean-Philippe Lang
Project identifier is now used in URLs (instead of project id)....
r994
def test_show_by_identifier
get :show, :id => 'ecookbook'
assert_response :success
assert_template 'show'
assert_not_nil assigns(:project)
assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
end
Jean-Philippe Lang
Added some tests for projects controller and helper....
r976
Jean-Philippe Lang
Fixed: private subprojects names are revealed on the project overview (#1152)....
r1384 def test_private_subprojects_hidden
get :show, :id => 'ecookbook'
assert_response :success
assert_template 'show'
assert_no_tag :tag => 'a', :content => /Private child/
end
def test_private_subprojects_visible
@request.session[:user_id] = 2 # manager who is a member of the private subproject
get :show, :id => 'ecookbook'
assert_response :success
assert_template 'show'
assert_tag :tag => 'a', :content => /Private child/
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_settings_routing
assert_routing(
{:method => :get, :path => '/projects/4223/settings'},
:controller => 'projects', :action => 'settings', :id => '4223'
)
assert_routing(
{:method => :get, :path => '/projects/4223/settings/members'},
:controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
)
end
Jean-Philippe Lang
Added some tests for projects controller and helper....
r976 def test_settings
@request.session[:user_id] = 2 # manager
get :settings, :id => 1
assert_response :success
assert_template 'settings'
end
def test_edit
@request.session[:user_id] = 2 # manager
Jean-Philippe Lang
Fixed: custom field selection is not saved when unchecking them all on project settings...
r1069 post :edit, :id => 1, :project => {:name => 'Test changed name',
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 :issue_custom_field_ids => ['']}
Jean-Philippe Lang
Project identifier is now used in URLs (instead of project id)....
r994 assert_redirected_to 'projects/settings/ecookbook'
Jean-Philippe Lang
Added some tests for projects controller and helper....
r976 project = Project.find(1)
assert_equal 'Test changed name', project.name
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_add_version_routing
assert_routing(
{:method => :get, :path => 'projects/64/versions/new'},
:controller => 'projects', :action => 'add_version', :id => '64'
)
assert_routing(
#TODO: use PUT
{:method => :post, :path => 'projects/64/versions/new'},
:controller => 'projects', :action => 'add_version', :id => '64'
)
end
def test_add_issue_category_routing
assert_routing(
{:method => :get, :path => 'projects/test/categories/new'},
:controller => 'projects', :action => 'add_issue_category', :id => 'test'
)
assert_routing(
#TODO: use PUT and update form
{:method => :post, :path => 'projects/64/categories/new'},
:controller => 'projects', :action => 'add_issue_category', :id => '64'
)
end
def test_destroy_routing
assert_routing(
{:method => :get, :path => '/projects/567/destroy'},
:controller => 'projects', :action => 'destroy', :id => '567'
)
assert_routing(
#TODO: use DELETE and update form
{:method => :post, :path => 'projects/64/destroy'},
:controller => 'projects', :action => 'destroy', :id => '64'
)
end
Jean-Philippe Lang
Added some tests for projects controller and helper....
r976 def test_get_destroy
@request.session[:user_id] = 1 # admin
get :destroy, :id => 1
assert_response :success
assert_template 'destroy'
assert_not_nil Project.find_by_id(1)
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 end
Jean-Philippe Lang
Added some tests for projects controller and helper....
r976
def test_post_destroy
@request.session[:user_id] = 1 # admin
post :destroy, :id => 1, :confirm => 1
assert_redirected_to 'admin/projects'
assert_nil Project.find_by_id(1)
end
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115
def test_add_file
set_tmp_attachments_directory
@request.session[:user_id] = 2
Jean-Philippe Lang
Fixes functional test failures....
r2185 Setting.notified_events = ['file_added']
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115 ActionMailer::Base.deliveries.clear
assert_difference 'Attachment.count' do
post :add_file, :id => 1, :version_id => '',
:attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
end
assert_redirected_to 'projects/list_files/ecookbook'
a = Attachment.find(:first, :order => 'created_on DESC')
assert_equal 'testfile.txt', a.filename
assert_equal Project.find(1), a.container
mail = ActionMailer::Base.deliveries.last
assert_kind_of TMail::Mail, mail
assert_equal "[eCookbook] New file", mail.subject
assert mail.body.include?('testfile.txt')
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_add_file_routing
assert_routing(
{:method => :get, :path => '/projects/33/files/new'},
:controller => 'projects', :action => 'add_file', :id => '33'
)
assert_routing(
{:method => :post, :path => '/projects/33/files/new'},
:controller => 'projects', :action => 'add_file', :id => '33'
)
end
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115 def test_add_version_file
set_tmp_attachments_directory
@request.session[:user_id] = 2
Jean-Philippe Lang
Fixes functional test failures....
r2185 Setting.notified_events = ['file_added']
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115
assert_difference 'Attachment.count' do
post :add_file, :id => 1, :version_id => '2',
:attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
end
assert_redirected_to 'projects/list_files/ecookbook'
a = Attachment.find(:first, :order => 'created_on DESC')
assert_equal 'testfile.txt', a.filename
assert_equal Version.find(2), a.container
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
def test_list_files
get :list_files, :id => 1
assert_response :success
assert_template 'list_files'
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115 assert_not_nil assigns(:containers)
# file attached to the project
assert_tag :a, :content => 'project_file.zip',
:attributes => { :href => '/attachments/download/8/project_file.zip' }
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
Jean-Philippe Lang
Files module: makes version field non required (#1053)....
r2115 # file attached to a project's version
assert_tag :a, :content => 'version_file.zip',
:attributes => { :href => '/attachments/download/9/version_file.zip' }
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 end
def test_list_files_routing
assert_routing(
{:method => :get, :path => '/projects/33/files'},
:controller => 'projects', :action => 'list_files', :id => '33'
)
end
def test_changelog_routing
assert_routing(
{:method => :get, :path => '/projects/44/changelog'},
:controller => 'projects', :action => 'changelog', :id => '44'
)
end
def test_changelog
get :changelog, :id => 1
assert_response :success
assert_template 'changelog'
assert_not_nil assigns(:versions)
end
def test_roadmap_routing
assert_routing(
{:method => :get, :path => 'projects/33/roadmap'},
:controller => 'projects', :action => 'roadmap', :id => '33'
)
Jean-Philippe Lang
Initial commit...
r2 end
Jean-Philippe Lang
search engine improvements and simple test...
r282
Jean-Philippe Lang
added roadmap and activity calls in projects functional tests...
r368 def test_roadmap
get :roadmap, :id => 1
assert_response :success
assert_template 'roadmap'
assert_not_nil assigns(:versions)
Jean-Philippe Lang
Added some functional tests (projects and repositories)....
r968 # 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))
end
def test_roadmap_with_completed_versions
get :roadmap, :id => 1, :completed => 1
assert_response :success
assert_template 'roadmap'
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))
Jean-Philippe Lang
added roadmap and activity calls in projects functional tests...
r368 end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
def test_project_activity_routing
assert_routing(
{:method => :get, :path => '/projects/1/activity'},
:controller => 'projects', :action => 'activity', :id => '1'
)
end
def test_project_activity_atom_routing
assert_routing(
{:method => :get, :path => '/projects/1/activity.atom'},
:controller => 'projects', :action => 'activity', :id => '1', :format => 'atom'
)
end
Jean-Philippe Lang
Activity enhancements:...
r1213 def test_project_activity
get :activity, :id => 1, :with_subprojects => 0
Jean-Philippe Lang
added roadmap and activity calls in projects functional tests...
r368 assert_response :success
assert_template 'activity'
assert_not_nil assigns(:events_by_day)
Jean-Philippe Lang
Added issues status changes on the activity view (initial patch by Cyril Mougel)....
r879
assert_tag :tag => "h3",
:content => /#{2.days.ago.to_date.day}/,
Jean-Philippe Lang
Activity test fix (r1120)....
r1109 :sibling => { :tag => "dl",
:child => { :tag => "dt",
Jean-Philippe Lang
Fixes test broken by r1578....
r1567 :attributes => { :class => /issue-edit/ },
Jean-Philippe Lang
Activity test fix (r1120)....
r1109 :child => { :tag => "a",
Jean-Philippe Lang
Added issues status changes on the activity view (initial patch by Cyril Mougel)....
r879 :content => /(#{IssueStatus.find(2).name})/,
}
}
}
Jean-Philippe Lang
Activity refactoring....
r1692 end
def test_previous_project_activity
Jean-Philippe Lang
Display the last 30 days on the activity view rather than the current month....
r1182 get :activity, :id => 1, :from => 3.days.ago.to_date
Jean-Philippe Lang
Project name format limitation removed (name can now contain any character)....
r936 assert_response :success
assert_template 'activity'
assert_not_nil assigns(:events_by_day)
Jean-Philippe Lang
Added issues status changes on the activity view (initial patch by Cyril Mougel)....
r879 assert_tag :tag => "h3",
:content => /#{3.day.ago.to_date.day}/,
Jean-Philippe Lang
Activity test fix (r1120)....
r1109 :sibling => { :tag => "dl",
:child => { :tag => "dt",
Jean-Philippe Lang
Fixes test broken by r1578....
r1567 :attributes => { :class => /issue/ },
Jean-Philippe Lang
Activity test fix (r1120)....
r1109 :child => { :tag => "a",
Jean-Philippe Lang
Added issues status changes on the activity view (initial patch by Cyril Mougel)....
r879 :content => /#{Issue.find(1).subject}/,
}
}
}
Jean-Philippe Lang
added roadmap and activity calls in projects functional tests...
r368 end
Jean-Philippe Lang
Added the ability to archive projects:...
r546
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_global_activity_routing
assert_routing({:method => :get, :path => '/activity'}, :controller => 'projects', :action => 'activity')
end
Jean-Philippe Lang
Activity refactoring....
r1692 def test_global_activity
Jean-Philippe Lang
Activity enhancements:...
r1213 get :activity
assert_response :success
assert_template 'activity'
Jean-Philippe Lang
Activity refactoring....
r1692 assert_not_nil assigns(:events_by_day)
Jean-Philippe Lang
Activity enhancements:...
r1213
Jean-Philippe Lang
Activity refactoring....
r1692 assert_tag :tag => "h3",
:content => /#{5.day.ago.to_date.day}/,
:sibling => { :tag => "dl",
:child => { :tag => "dt",
:attributes => { :class => /issue/ },
:child => { :tag => "a",
:content => /#{Issue.find(5).subject}/,
Jean-Philippe Lang
Makes activity view accept a user_id param to show user's activity (#1002)....
r2065 }
}
}
end
def test_user_activity
get :activity, :user_id => 2
assert_response :success
assert_template 'activity'
assert_not_nil assigns(:events_by_day)
assert_tag :tag => "h3",
:content => /#{3.day.ago.to_date.day}/,
:sibling => { :tag => "dl",
:child => { :tag => "dt",
:attributes => { :class => /issue/ },
:child => { :tag => "a",
:content => /#{Issue.find(1).subject}/,
Jean-Philippe Lang
Activity refactoring....
r1692 }
}
}
Jean-Philippe Lang
Activity enhancements:...
r1213 end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_global_activity_atom_routing
assert_routing({:method => :get, :path => '/activity.atom'}, :controller => 'projects', :action => 'activity', :format => 'atom')
end
Jean-Philippe Lang
Fixed: activity atom feed broken by r1701 (#1703)....
r1710 def test_activity_atom_feed
get :activity, :format => 'atom'
assert_response :success
assert_template 'common/feed.atom.rxml'
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_archive_routing
assert_routing(
#TODO: use PUT to project path and modify form
{:method => :post, :path => 'projects/64/archive'},
:controller => 'projects', :action => 'archive', :id => '64'
)
end
def test_archive
Jean-Philippe Lang
Added the ability to archive projects:...
r546 @request.session[:user_id] = 1 # admin
post :archive, :id => 1
assert_redirected_to 'admin/projects'
assert !Project.find(1).active?
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 def test_unarchive_routing
assert_routing(
#TODO: use PUT to project path and modify form
{:method => :post, :path => '/projects/567/unarchive'},
:controller => 'projects', :action => 'unarchive', :id => '567'
)
end
Jean-Philippe Lang
Added the ability to archive projects:...
r546 def test_unarchive
@request.session[:user_id] = 1 # admin
Project.find(1).archive
post :unarchive, :id => 1
assert_redirected_to 'admin/projects'
assert Project.find(1).active?
end
Jean-Philippe Lang
Menu mapper: add support for :before, :after and :last options to #push method and add #delete method....
r1646
Jean-Philippe Lang
Jump to the current tab when using the project quick-jump combo (#2364)....
r2208 def test_jump_should_redirect_to_active_tab
get :show, :id => 1, :jump => 'issues'
assert_redirected_to 'projects/ecookbook/issues'
end
def test_jump_should_not_redirect_to_inactive_tab
get :show, :id => 3, :jump => 'documents'
assert_response :success
assert_template 'show'
end
def test_jump_should_not_redirect_to_unknown_tab
get :show, :id => 3, :jump => 'foobar'
assert_response :success
assert_template 'show'
end
Jean-Philippe Lang
Menu mapper: add support for :before, :after and :last options to #push method and add #delete method....
r1646 def test_project_menu
assert_no_difference 'Redmine::MenuManager.items(:project_menu).size' do
Redmine::MenuManager.map :project_menu do |menu|
menu.push :foo, { :controller => 'projects', :action => 'show' }, :cation => 'Foo'
menu.push :bar, { :controller => 'projects', :action => 'show' }, :before => :activity
menu.push :hello, { :controller => 'projects', :action => 'show' }, :caption => Proc.new {|p| p.name.upcase }, :after => :bar
end
get :show, :id => 1
assert_tag :div, :attributes => { :id => 'main-menu' },
Jean-Philippe Lang
Adds a css class on menu items in order to apply item specific styles (eg. icons)....
r2057 :descendant => { :tag => 'li', :child => { :tag => 'a', :content => 'Foo',
:attributes => { :class => 'foo' } } }
Jean-Philippe Lang
Menu mapper: add support for :before, :after and :last options to #push method and add #delete method....
r1646
assert_tag :div, :attributes => { :id => 'main-menu' },
Jean-Philippe Lang
Adds a css class on menu items in order to apply item specific styles (eg. icons)....
r2057 :descendant => { :tag => 'li', :child => { :tag => 'a', :content => 'Bar',
:attributes => { :class => 'bar' } },
Jean-Philippe Lang
Menu mapper: add support for :before, :after and :last options to #push method and add #delete method....
r1646 :before => { :tag => 'li', :child => { :tag => 'a', :content => 'ECOOKBOOK' } } }
assert_tag :div, :attributes => { :id => 'main-menu' },
Jean-Philippe Lang
Adds a css class on menu items in order to apply item specific styles (eg. icons)....
r2057 :descendant => { :tag => 'li', :child => { :tag => 'a', :content => 'ECOOKBOOK',
:attributes => { :class => 'hello' } },
Jean-Philippe Lang
Menu mapper: add support for :before, :after and :last options to #push method and add #delete method....
r1646 :before => { :tag => 'li', :child => { :tag => 'a', :content => 'Activity' } } }
# Remove the menu items
Redmine::MenuManager.map :project_menu do |menu|
menu.delete :foo
menu.delete :bar
menu.delete :hello
end
end
end
Jean-Philippe Lang
Merged hooks branch @ r1785 into trunk....
r1785
# A hook that is manually registered later
class ProjectBasedTemplate < Redmine::Hook::ViewListener
def view_layouts_base_html_head(context)
# Adds a project stylesheet
stylesheet_link_tag(context[:project].identifier) if context[:project]
end
end
# Don't use this hook now
Redmine::Hook.clear_listeners
def test_hook_response
Redmine::Hook.add_listener(ProjectBasedTemplate)
get :show, :id => 1
assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},
:parent => {:tag => 'head'}
Redmine::Hook.clear_listeners
end
Jean-Philippe Lang
Initial commit...
r2 end