diff --git a/tracks/app/controllers/projects_controller.rb b/tracks/app/controllers/projects_controller.rb index 906d4bf1..df042b5e 100644 --- a/tracks/app/controllers/projects_controller.rb +++ b/tracks/app/controllers/projects_controller.rb @@ -46,6 +46,7 @@ class ProjectsController < ApplicationController @project.attributes = params['project'] || params['request']['project'] params_are_invalid = false end + @go_to_project = params['go_to_project'] @saved = @project.save @project_not_done_counts = { @project.id => 0 } @active_projects_count = @user.projects.count(:conditions => "state = 'active'") diff --git a/tracks/app/views/projects/create.rjs b/tracks/app/views/projects/create.rjs index 3d7050a2..7deb4402 100644 --- a/tracks/app/views/projects/create.rjs +++ b/tracks/app/views/projects/create.rjs @@ -1,4 +1,6 @@ -if @saved +if @saved and @go_to_project + page.redirect_to project_path(@project) +elsif @saved page.hide 'projects-empty-nd' page.show 'list-active-projects-container' page.replace_html "active-projects-count", @active_projects_count diff --git a/tracks/app/views/projects/index.rhtml b/tracks/app/views/projects/index.rhtml index ecdbd95c..5cf820d4 100644 --- a/tracks/app/views/projects/index.rhtml +++ b/tracks/app/views/projects/index.rhtml @@ -25,6 +25,8 @@
<%= text_area 'project', 'description', "cols" => 30, "rows" => 4 %>
+ + <%= check_box_tag 'go_to_project' %>
diff --git a/tracks/test/functional/projects_controller_test.rb b/tracks/test/functional/projects_controller_test.rb index 822598a3..97b8c9a6 100644 --- a/tracks/test/functional/projects_controller_test.rb +++ b/tracks/test/functional/projects_controller_test.rb @@ -53,6 +53,13 @@ class ProjectsControllerTest < TodoContainerControllerTestBase assert_rjs :call, "Form.reset", "project-form" assert_rjs :call, "Form.focusFirstElement", "project-form" end + + def test_create_project_and_go_to_project_page + num_projects = Project.count + xhr :post, :create, { :project => {:name => 'Immediate Project Planning Required'}, :go_to_project => 1} + assert_js_redirected_to '/projects/Immediate_Project_Planning_Required' + assert_equal num_projects + 1, Project.count + end def test_create_with_slash_in_name_does_not_increment_number_of_projects assert_ajax_create_does_not_increment_count 'foo/bar' diff --git a/tracks/test/test_helper.rb b/tracks/test/test_helper.rb index f3fd75fb..601bcf8d 100644 --- a/tracks/test/test_helper.rb +++ b/tracks/test/test_helper.rb @@ -44,6 +44,28 @@ class Test::Unit::TestCase 1.week.from_now.utc.to_date end + # Courtesy of http://habtm.com/articles/2006/02/20/assert-yourself-man-redirecting-with-rjs + def assert_js_redirected_to(options={}, message=nil) + clean_backtrace do + assert_response(:success, message) + assert_equal 'text/javascript; charset=utf-8', @response.headers['Content-Type'], 'Response should be Javascript content-type'; + js_regexp = %r{(\w+://)?.*?(/|$|\\\?)(.*)} + url_regexp = %r{^window\.location\.href [=] ['"]#{js_regexp}['"][;]$} + redirected_to = @response.body.match(url_regexp) + assert_not_nil(redirected_to, message) + redirected_to = redirected_to[3] + msg = build_message(message, "expected a JS redirect to , found one to ", options, redirected_to) + + if options.is_a?(String) + assert_equal(options.gsub(/^\//, ''), redirected_to, message) + else + msg = build_message(message, "response is not a redirection to all of the options supplied (redirection is )", redirected_to) + assert_equal(@controller.url_for(options).match(js_regexp)[3], redirected_to, msg) + end + end + end + + end class ActionController::IntegrationTest