From b62cc03b78436a9b8a20af12f5cc51ae1aa4e00f Mon Sep 17 00:00:00 2001 From: bsag Date: Fri, 26 Dec 2008 15:58:33 +0000 Subject: [PATCH 1/3] Corrected URL for testing documentation to Tracks community wiki. --- doc/README_DEVELOPERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README_DEVELOPERS b/doc/README_DEVELOPERS index 7366a16a..5a1306c3 100644 --- a/doc/README_DEVELOPERS +++ b/doc/README_DEVELOPERS @@ -1,6 +1,6 @@ 1. Wiki -There are some pointers for setting up your Tracks copy for testing at http://dev.rousette.org.uk/wiki/Tracks/Testing +There are some pointers for setting up your Tracks copy for testing at http://www.rousette.org.uk/projects/wiki/Testing/ 2. SQLITE3 FOR TESTING From 5c4d27e8cd485ba2ec6bc862f50b9dada760ce21 Mon Sep 17 00:00:00 2001 From: bsag Date: Fri, 26 Dec 2008 17:55:09 +0000 Subject: [PATCH 2/3] Fixed webrat/core.rb to solve problem with Ubuntu, as documented here: http://webrat.lighthouseapp.com/projects/10503/tickets/12-error-requiring-files-on-ubuntu Fixes #808 (it really does this time!) --- vendor/plugins/webrat/lib/webrat/core.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/plugins/webrat/lib/webrat/core.rb b/vendor/plugins/webrat/lib/webrat/core.rb index 32743d16..185a00d5 100644 --- a/vendor/plugins/webrat/lib/webrat/core.rb +++ b/vendor/plugins/webrat/lib/webrat/core.rb @@ -1,3 +1,3 @@ -Dir[File.join(File.dirname(__FILE__), "core", "*.rb")].each do |file| - require File.expand_path(file) +%w{field form label link logging page select_option session}.each do |file| + require File.dirname(__FILE__) + "/core/#{file}" end \ No newline at end of file From 198db7b0a57b4bda6ba82737be61c409a0b8cb21 Mon Sep 17 00:00:00 2001 From: bsag Date: Fri, 26 Dec 2008 19:47:13 +0000 Subject: [PATCH 3/3] Added a fix for a failing functional test which concerned the javascript popup window to warn when a new context added in new action form. --- app/controllers/projects_controller.rb | 1 + app/views/shared/_add_new_item_form.rhtml | 22 +- test/functional/projects_controller_test.rb | 518 ++++++++++---------- 3 files changed, 271 insertions(+), 270 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9443168f..ce37d92c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -40,6 +40,7 @@ class ProjectsController < ApplicationController end def show + @contexts = current_user.contexts(true) init_data_for_sidebar unless mobile? @projects = current_user.projects @page_title = "TRACKS::Project: #{@project.name}" diff --git a/app/views/shared/_add_new_item_form.rhtml b/app/views/shared/_add_new_item_form.rhtml index 3e3f749f..b4da4b3e 100644 --- a/app/views/shared/_add_new_item_form.rhtml +++ b/app/views/shared/_add_new_item_form.rhtml @@ -27,17 +27,17 @@ :condition => "!$('todo_new_action_submit').isWaiting() && askIfNewContextProvided()") do -%>
<%= error_messages_for("item", :object_name => 'action') %>
diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index 7b2ad866..c66906aa 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -1,259 +1,259 @@ -require File.dirname(__FILE__) + '/../test_helper' -require File.dirname(__FILE__) + '/todo_container_controller_test_base' -require 'projects_controller' - -# Re-raise errors caught by the controller. -class ProjectsController; def rescue_action(e) raise e end; end - -class ProjectsControllerTest < TodoContainerControllerTestBase - fixtures :users, :todos, :preferences, :projects, :contexts - - def setup - perform_setup(Project, ProjectsController) - end - - def test_projects_list - login_as :admin_user - get :index - end - - def test_show_exposes_deferred_todos - p = projects(:timemachine) - login_as :admin_user - get :show, :id => p.to_param - assert_not_nil assigns['deferred'] - assert_equal 1, assigns['deferred'].size - - t = p.not_done_todos[0] - t.show_from = 1.days.from_now.utc - t.save! - - get :show, :id => p.to_param - assert_equal 2, assigns['deferred'].size - end - - def test_show_exposes_next_project_in_same_state - login_as :admin_user - get :show, :id => projects(:timemachine).to_param - assert_equal(projects(:moremoney), assigns['next_project']) - end - - def test_show_exposes_previous_project_in_same_state - login_as :admin_user - get :show, :id => projects(:moremoney).to_param - assert_equal(projects(:timemachine), assigns['previous_project']) - end - - def test_create_project_via_ajax_increments_number_of_projects - assert_ajax_create_increments_count 'My New Project' - end - - def test_create_project_with_ajax_success_rjs - ajax_create 'My New Project' - assert_rjs :insert_html, :bottom, "list-active-projects" - assert_rjs :sortable, 'list-active-projects', { :tag => 'div', :handle => 'handle', :complete => visual_effect(:highlight, 'list-active-projects'), :url => order_projects_path } - # not yet sure how to write the following properly... - 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 %r{/?projects/\d+} - assert_equal num_projects + 1, Project.count - end - - def test_create_with_comma_in_name_does_not_increment_number_of_projects - assert_ajax_create_does_not_increment_count 'foo,bar' - end - - def test_create_with_comma_in_name_fails_with_rjs - ajax_create 'foo,bar' - assert_rjs :show, 'status' - # Not working with Rails 2.0 upgrade - # assert_rjs :update, 'status', "

1 error prohibited this record from being saved

There were problems with the following fields:

    Name cannot contain the comma (',') character
" - end - - def test_todo_state_is_project_hidden_after_hiding_project - p = projects(:timemachine) - todos = p.todos.find_in_state(:all, :active) - login_as(:admin_user) - xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"} - todos.each do |t| - assert_equal :project_hidden, t.reload().current_state - end - assert p.reload().hidden? - end - - def test_not_done_counts_after_hiding_and_unhiding_project - p = projects(:timemachine) - todos = p.todos.find_in_state(:all, :active) - login_as(:admin_user) - xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"} - xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"active"} - todos.each do |t| - assert_equal :active, t.reload().current_state - end - assert p.reload().active? - end - - def test_rss_feed_content - login_as(:admin_user) - get :index, { :format => "rss" } - assert_equal 'application/rss+xml', @response.content_type - #puts @response.body - - assert_xml_select 'rss[version="2.0"]' do - assert_select 'channel' do - assert_select '>title', 'Tracks Projects' - assert_select '>description', "Lists all the projects for #{users(:admin_user).display_name}" - assert_select 'language', 'en-us' - assert_select 'ttl', '40' - end - assert_select 'item', 3 do - assert_select 'title', /.+/ - assert_select 'description' do - assert_select_encoded do - assert_select 'p', /^\d+ actions\. Project is (active|hidden|completed)\.$/ - end - end - %w(guid link).each do |node| - assert_select node, /http:\/\/test.host\/projects\/.+/ - end - assert_select 'pubDate', projects(:timemachine).updated_at.to_s(:rfc822) - end - end - end - - def test_rss_feed_not_accessible_to_anonymous_user_without_token - login_as nil - get :index, { :format => "rss" } - assert_response 401 - end - - def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token - login_as nil - get :index, { :format => "rss", :token => 'foo' } - assert_response 401 - end - - def test_rss_feed_accessible_to_anonymous_user_with_valid_token - login_as nil - get :index, { :format => "rss", :token => users(:admin_user).token } - assert_response :ok - end - - def test_atom_feed_content - login_as :admin_user - get :index, { :format => "atom" } - assert_equal 'application/atom+xml', @response.content_type - #puts @response.body - - assert_xml_select 'feed[xmlns="http://www.w3.org/2005/Atom"]' do - assert_select '>title', 'Tracks Projects' - assert_select '>subtitle', "Lists all the projects for #{users(:admin_user).display_name}" - assert_select 'entry', 3 do - assert_select 'title', /.+/ - assert_select 'content[type="html"]' do - assert_select_encoded do - assert_select 'p', /\d+ actions. Project is (active|hidden|completed)./ - end - end - assert_select 'published', /(#{Regexp.escape(projects(:timemachine).updated_at.xmlschema)}|#{Regexp.escape(projects(:moremoney).updated_at.xmlschema)})/ - end - end - end - - def test_atom_feed_not_accessible_to_anonymous_user_without_token - login_as nil - get :index, { :format => "atom" } - assert_response 401 - end - - def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token - login_as nil - get :index, { :format => "atom", :token => 'foo' } - assert_response 401 - end - - def test_atom_feed_accessible_to_anonymous_user_with_valid_token - login_as nil - get :index, { :format => "atom", :token => users(:admin_user).token } - assert_response :ok - end - - def test_text_feed_content - login_as :admin_user - get :index, { :format => "txt" } - assert_equal 'text/plain', @response.content_type - assert !(/ /.match(@response.body)) - #puts @response.body - end - - def test_text_feed_content_for_projects_with_no_actions - login_as :admin_user - p = projects(:timemachine) - p.todos.each { |t| t.destroy } - - get :index, { :format => "txt", :only_active_with_no_next_actions => true } - assert (/^\s*BUILD A WORKING TIME MACHINE\s+0 actions. Project is active.\s*$/.match(@response.body)) - assert !(/[1-9] actions/.match(@response.body)) - end - - def test_text_feed_not_accessible_to_anonymous_user_without_token - login_as nil - get :index, { :format => "txt" } - assert_response 401 - end - - def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token - login_as nil - get :index, { :format => "txt", :token => 'foo' } - assert_response 401 - end - - def test_text_feed_accessible_to_anonymous_user_with_valid_token - login_as nil - get :index, { :format => "txt", :token => users(:admin_user).token } - assert_response :ok - end - - def test_actionize_sorts_active_projects_by_number_of_tasks - login_as :admin_user - u = users(:admin_user) - post :actionize, :state => "active", :format => 'js' - assert_equal 1, projects(:gardenclean).position - assert_equal 2, projects(:moremoney).position - assert_equal 3, projects(:timemachine).position - end - - def test_alphabetize_sorts_active_projects_alphabetically - login_as :admin_user - u = users(:admin_user) - post :alphabetize, :state => "active", :format => 'js' - assert_equal 1, projects(:timemachine).position - assert_equal 2, projects(:gardenclean).position - assert_equal 3, projects(:moremoney).position - end - - def test_alphabetize_assigns_state - login_as :admin_user - post :alphabetize, :state => "active", :format => 'js' - assert_equal "active", assigns['state'] - end - - def test_alphabetize_assigns_projects - login_as :admin_user - post :alphabetize, :state => "active", :format => 'js' - exposed_projects = assigns['projects'] - assert_equal 3, exposed_projects.length - assert_equal projects(:timemachine), exposed_projects[0] - assert_equal projects(:gardenclean), exposed_projects[1] - assert_equal projects(:moremoney), exposed_projects[2] - end - - def protect_against_forgery? - false - end -end +require File.dirname(__FILE__) + '/../test_helper' +require File.dirname(__FILE__) + '/todo_container_controller_test_base' +require 'projects_controller' + +# Re-raise errors caught by the controller. +class ProjectsController; def rescue_action(e) raise e end; end + +class ProjectsControllerTest < TodoContainerControllerTestBase + fixtures :users, :todos, :preferences, :projects, :contexts + + def setup + perform_setup(Project, ProjectsController) + end + + def test_projects_list + login_as :admin_user + get :index + end + + def test_show_exposes_deferred_todos + p = projects(:timemachine) + login_as :admin_user + get :show, :id => p.to_param + assert_not_nil assigns['deferred'] + assert_equal 1, assigns['deferred'].size + + t = p.not_done_todos[0] + t.show_from = 1.days.from_now.utc + t.save! + + get :show, :id => p.to_param + assert_equal 2, assigns['deferred'].size + end + + def test_show_exposes_next_project_in_same_state + login_as :admin_user + get :show, :id => projects(:timemachine).to_param + assert_equal(projects(:moremoney), assigns['next_project']) + end + + def test_show_exposes_previous_project_in_same_state + login_as :admin_user + get :show, :id => projects(:moremoney).to_param + assert_equal(projects(:timemachine), assigns['previous_project']) + end + + def test_create_project_via_ajax_increments_number_of_projects + assert_ajax_create_increments_count 'My New Project' + end + + def test_create_project_with_ajax_success_rjs + ajax_create 'My New Project' + assert_rjs :insert_html, :bottom, "list-active-projects" + assert_rjs :sortable, 'list-active-projects', { :tag => 'div', :handle => 'handle', :complete => visual_effect(:highlight, 'list-active-projects'), :url => order_projects_path } + # not yet sure how to write the following properly... + 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 %r{/?projects/\d+} + assert_equal num_projects + 1, Project.count + end + + def test_create_with_comma_in_name_does_not_increment_number_of_projects + assert_ajax_create_does_not_increment_count 'foo,bar' + end + + def test_create_with_comma_in_name_fails_with_rjs + ajax_create 'foo,bar' + assert_rjs :show, 'status' + # Not working with Rails 2.0 upgrade + # assert_rjs :update, 'status', "

1 error prohibited this record from being saved

There were problems with the following fields:

    Name cannot contain the comma (',') character
" + end + + def test_todo_state_is_project_hidden_after_hiding_project + p = projects(:timemachine) + todos = p.todos.find_in_state(:all, :active) + login_as(:admin_user) + xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"} + todos.each do |t| + assert_equal :project_hidden, t.reload().current_state + end + assert p.reload().hidden? + end + + def test_not_done_counts_after_hiding_and_unhiding_project + p = projects(:timemachine) + todos = p.todos.find_in_state(:all, :active) + login_as(:admin_user) + xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"} + xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"active"} + todos.each do |t| + assert_equal :active, t.reload().current_state + end + assert p.reload().active? + end + + def test_rss_feed_content + login_as(:admin_user) + get :index, { :format => "rss" } + assert_equal 'application/rss+xml', @response.content_type + #puts @response.body + + assert_xml_select 'rss[version="2.0"]' do + assert_select 'channel' do + assert_select '>title', 'Tracks Projects' + assert_select '>description', "Lists all the projects for #{users(:admin_user).display_name}" + assert_select 'language', 'en-us' + assert_select 'ttl', '40' + end + assert_select 'item', 3 do + assert_select 'title', /.+/ + assert_select 'description' do + assert_select_encoded do + assert_select 'p', /^\d+ actions\. Project is (active|hidden|completed)\.$/ + end + end + %w(guid link).each do |node| + assert_select node, /http:\/\/test.host\/projects\/.+/ + end + assert_select 'pubDate', projects(:timemachine).updated_at.to_s(:rfc822) + end + end + end + + def test_rss_feed_not_accessible_to_anonymous_user_without_token + login_as nil + get :index, { :format => "rss" } + assert_response 401 + end + + def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token + login_as nil + get :index, { :format => "rss", :token => 'foo' } + assert_response 401 + end + + def test_rss_feed_accessible_to_anonymous_user_with_valid_token + login_as nil + get :index, { :format => "rss", :token => users(:admin_user).token } + assert_response :ok + end + + def test_atom_feed_content + login_as :admin_user + get :index, { :format => "atom" } + assert_equal 'application/atom+xml', @response.content_type + #puts @response.body + + assert_xml_select 'feed[xmlns="http://www.w3.org/2005/Atom"]' do + assert_select '>title', 'Tracks Projects' + assert_select '>subtitle', "Lists all the projects for #{users(:admin_user).display_name}" + assert_select 'entry', 3 do + assert_select 'title', /.+/ + assert_select 'content[type="html"]' do + assert_select_encoded do + assert_select 'p', /\d+ actions. Project is (active|hidden|completed)./ + end + end + assert_select 'published', /(#{Regexp.escape(projects(:timemachine).updated_at.xmlschema)}|#{Regexp.escape(projects(:moremoney).updated_at.xmlschema)})/ + end + end + end + + def test_atom_feed_not_accessible_to_anonymous_user_without_token + login_as nil + get :index, { :format => "atom" } + assert_response 401 + end + + def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token + login_as nil + get :index, { :format => "atom", :token => 'foo' } + assert_response 401 + end + + def test_atom_feed_accessible_to_anonymous_user_with_valid_token + login_as nil + get :index, { :format => "atom", :token => users(:admin_user).token } + assert_response :ok + end + + def test_text_feed_content + login_as :admin_user + get :index, { :format => "txt" } + assert_equal 'text/plain', @response.content_type + assert !(/ /.match(@response.body)) + #puts @response.body + end + + def test_text_feed_content_for_projects_with_no_actions + login_as :admin_user + p = projects(:timemachine) + p.todos.each { |t| t.destroy } + + get :index, { :format => "txt", :only_active_with_no_next_actions => true } + assert (/^\s*BUILD A WORKING TIME MACHINE\s+0 actions. Project is active.\s*$/.match(@response.body)) + assert !(/[1-9] actions/.match(@response.body)) + end + + def test_text_feed_not_accessible_to_anonymous_user_without_token + login_as nil + get :index, { :format => "txt" } + assert_response 401 + end + + def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token + login_as nil + get :index, { :format => "txt", :token => 'foo' } + assert_response 401 + end + + def test_text_feed_accessible_to_anonymous_user_with_valid_token + login_as nil + get :index, { :format => "txt", :token => users(:admin_user).token } + assert_response :ok + end + + def test_actionize_sorts_active_projects_by_number_of_tasks + login_as :admin_user + u = users(:admin_user) + post :actionize, :state => "active", :format => 'js' + assert_equal 1, projects(:moremoney).position + assert_equal 2, projects(:gardenclean).position + assert_equal 3, projects(:timemachine).position + end + + def test_alphabetize_sorts_active_projects_alphabetically + login_as :admin_user + u = users(:admin_user) + post :alphabetize, :state => "active", :format => 'js' + assert_equal 1, projects(:timemachine).position + assert_equal 2, projects(:gardenclean).position + assert_equal 3, projects(:moremoney).position + end + + def test_alphabetize_assigns_state + login_as :admin_user + post :alphabetize, :state => "active", :format => 'js' + assert_equal "active", assigns['state'] + end + + def test_alphabetize_assigns_projects + login_as :admin_user + post :alphabetize, :state => "active", :format => 'js' + exposed_projects = assigns['projects'] + assert_equal 3, exposed_projects.length + assert_equal projects(:timemachine), exposed_projects[0] + assert_equal projects(:gardenclean), exposed_projects[1] + assert_equal projects(:moremoney), exposed_projects[2] + end + + def protect_against_forgery? + false + end +end