##// END OF EJS Templates
Added request and controller objects to the hooks by default....
Added request and controller objects to the hooks by default. The request and controller objects are now added to all hook contexts by default. This will also make url_for work better in hooks by setting up the default_url_options :host, :port, and :protocol. Finally a new helper method @render_or@ has been added to ViewListener. This will let a hook easily render a partial without a full method definition. Thanks to Thomas Löber for the original patch. #2542 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2429 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r2315:765f7abc6033
r2368:5b7a5c39a7da
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