require File.dirname(__FILE__) + '/../test_helper' class RoutingTest < ActionController::IntegrationTest fixtures :groups, :users, :groups_users, :projects, :groups_projects, :ticket_property_types, :ticket_properties def setup RetroCM.reload User.current = User.public_user Project.current = projects(:retro) end def teardown User.current = nil Project.current = nil end def test_base_route_recognition opts = {:controller => 'project_area', :action => 'guide', :project_name => 'something'} assert_recognizes(opts, '/projects/something') opts = {:controller => 'project_area', :action => 'guide', :project_name => 'something'} assert_recognizes(opts, '/something') opts = {:controller => 'admin/dashboard', :action => 'index'} assert_recognizes(opts, '/admin') opts = {:controller => 'login', :action => 'login'} assert_recognizes(opts, '/login') opts = {:controller => 'login', :action => 'logout'} assert_recognizes(opts, '/logout') opts = {:controller => 'login', :action => 'logout'} assert_recognizes(opts, '/logout') opts = {:controller => 'account', :action => 'account'} assert_recognizes(opts, '/account') opts = {:controller => 'account', :action => 'register'} assert_recognizes(opts, '/register') opts = {:controller => 'account', :action => 'reset_password'} assert_recognizes(opts, '/reset_password') opts = {:controller => 'account', :action => 'activate', :login => 'username', :code => 'xYz'} assert_recognizes(opts, '/account/activate/username/xYz') opts = {:controller => 'rss', :action => 'index'} assert_recognizes(opts, '/rss') opts = {:controller => 'rss', :action => 'feed', :category => 'all'} assert_recognizes(opts, '/rss/all') end def test_multiconnect_route_recognition opts = {:controller => 'browse', :action => 'browse', :path => ['folder']} assert_recognizes(opts, '/browse/folder') opts = {:controller => 'browse', :action => 'browse', :path => ['folder'], :project_name => 'something'} assert_recognizes(opts, '/projects/something/browse/folder') opts = {:controller => 'browse', :action => 'file', :path => ['folder', 'file.txt']} assert_recognizes(opts, '/file/folder/file.txt') opts = {:controller => 'browse', :action => 'file', :path => ['folder', 'file.txt'], :project_name => 'something'} assert_recognizes(opts, '/projects/something/file/folder/file.txt') opts = {:controller => 'browse', :action => 'revisions', :path => ['folder', 'file.txt']} assert_recognizes(opts, '/revisions/folder/file.txt') opts = {:controller => 'browse', :action => 'revisions', :path => ['folder', 'file.txt'], :project_name => 'something'} assert_recognizes(opts, '/projects/something/revisions/folder/file.txt') opts = {:controller => 'changesets', :action => 'changesets'} assert_recognizes(opts, '/changesets') opts = {:controller => 'changesets', :action => 'changesets', :project_name => 'something'} assert_recognizes(opts, '/projects/something/changesets') opts = {:controller => 'changesets', :action => 'changeset', :revision => '3'} assert_recognizes(opts, '/changeset/3') opts = {:controller => 'changesets', :action => 'changeset', :revision => '3', :project_name => 'something'} assert_recognizes(opts, '/projects/something/changeset/3') opts = {:controller => 'tickets', :action => 'show', :id => '3'} assert_recognizes(opts, '/ticket/3') opts = {:controller => 'tickets', :action => 'show', :id => '3', :project_name => 'something'} assert_recognizes(opts, '/projects/something/ticket/3') opts = {:controller => 'tickets', :action => 'index'} assert_recognizes(opts, '/tickets') opts = {:controller => 'tickets', :action => 'index', :project_name => 'something'} assert_recognizes(opts, '/projects/something/tickets') opts = {:controller => 'tickets', :action => 'new'} assert_recognizes(opts, '/tickets/new') opts = {:controller => 'tickets', :action => 'new', :project_name => 'something'} assert_recognizes(opts, '/projects/something/tickets/new') opts = {:controller => 'tickets', :action => 'show', :id => '3'} assert_recognizes(opts, '/ticket/3') opts = {:controller => 'tickets', :action => 'show', :id => '3', :project_name => 'something'} assert_recognizes(opts, '/projects/something/ticket/3') opts = {:controller => 'tickets', :action => 'index', :report => '3'} assert_recognizes(opts, '/tickets/report/3') opts = {:controller => 'tickets', :action => 'index', :report => '3', :project_name => 'something'} assert_recognizes(opts, '/projects/something/tickets/report/3') end def test_with_1_project assert(User.current.projects.include?(Project.current)) default_controller = guess_default_controller(Project.current) get '/' assert_response(:redirect) assert_redirected_to(:controller => 'project_area', :action => 'guide') follow_redirect! assert_response(:redirect) assert_redirected_to(:controller => default_controller, :action => 'index') assert_equal("http://www.example.com/#{default_controller}", @response.headers['Location']) follow_redirect! assert_response(:success) assert_template("#{default_controller}/index") get '/something' assert_response(:redirect) assert_redirected_to(:controller => 'project_area', :action => 'guide') follow_redirect! assert_response(:redirect) assert_redirected_to(:controller => default_controller, :action => 'index') assert_equal("http://www.example.com/#{default_controller}", @response.headers['Location']) follow_redirect! assert_response(:success) assert_template("#{default_controller}/index") get '/projects/something' assert_response(:redirect) assert_redirected_to(:controller => 'project_area', :action => 'guide') follow_redirect! assert_response(:redirect) assert_redirected_to(:controller => default_controller, :action => 'index') assert_equal("http://www.example.com/#{default_controller}", @response.headers['Location']) follow_redirect! assert_response(:success) assert_template("#{default_controller}/index") get '/projects' assert_response(:redirect) assert_redirected_to(:controller => default_controller, :action => 'index') follow_redirect! assert_response(:success) assert_template("#{default_controller}/index") get '/tickets' assert_response(:success) assert_template('tickets/index') end def test_with_2_projects project1 = Project.find(1) project2 = Project.new(:name => 'Second') assert(project2.save) User.current.reload assert(User.current.projects.include?(project1)) assert(User.current.projects.include?(project2)) assert_equal(2, project1.ticket_property_types.count) assert_equal(0, project2.ticket_property_types.count) default_controller = guess_default_controller(project1) get "/#{project1.short_name}" assert_response(:redirect) assert_redirected_to(:controller => default_controller, :action => 'index') assert_equal("http://www.example.com/projects/#{project1.short_name}/#{default_controller}", @response.headers['Location']) follow_redirect! assert_response(:success) assert_template("#{default_controller}/index") default_controller = guess_default_controller(project2) get "/#{project2.short_name}" assert_response(:redirect) assert_redirected_to(:controller => default_controller, :action => 'index') assert_equal("http://www.example.com/projects/#{project2.short_name}/#{default_controller}", @response.headers['Location']) follow_redirect! assert_response(:success) assert_template("#{default_controller}/index") assert(project2.destroy) end private def guess_default_controller(project) current_project = Project.current Project.current = project RetroAM.url_options_for_first_accessible_menu_item[:controller] ensure Project.current = current_project end end