diff --git a/lib/authenticated_test_helper.rb b/lib/authenticated_test_helper.rb index 9137cf37..7a52e62b 100644 --- a/lib/authenticated_test_helper.rb +++ b/lib/authenticated_test_helper.rb @@ -3,7 +3,7 @@ module AuthenticatedTestHelper def login_as(user) @request.session['user_id'] = user ? users(user).id : nil end - + def content_type(type) @request.env['Content-Type'] = type end diff --git a/test/functional/recurring_todos_controller_test.rb b/test/functional/recurring_todos_controller_test.rb index 6ba70d75..a1e40b77 100644 --- a/test/functional/recurring_todos_controller_test.rb +++ b/test/functional/recurring_todos_controller_test.rb @@ -17,6 +17,107 @@ class RecurringTodosControllerTest < ActionController::TestCase login_as(:admin_user) xhr :post, :destroy, :id => 1, :_source_view => 'todo' assert_rjs :page, "recurring_todo_1", :remove + begin + rc = RecurringTodo.find(1) + rescue + rc = nil + end + assert_nil rc + end + + def test_new_recurring_todo + login_as(:admin_user) + orig_rt_count = RecurringTodo.count + orig_todo_count = Todo.count + put :create, + "context_name"=>"library", + "project_name"=>"Build a working time machine", + "recurring_todo" => + { + "daily_every_x_days"=>"1", + "daily_selector"=>"daily_every_x_day", + "description"=>"new recurring pattern", + "end_date" => "31/08/2010", + "ends_on" => "ends_on_end_date", + "monthly_day_of_week" => "1", + "monthly_every_x_day" => "18", + "monthly_every_x_month2" => "1", + "monthly_every_x_month" => "1", + "monthly_every_xth_day"=>"1", + "monthly_selector"=>"monthly_every_x_day", + "notes"=>"with some notes", + "number_of_occurences" => "", + "recurring_period"=>"yearly", + "recurring_show_days_before"=>"10", + "recurring_target"=>"due_date", + "start_from"=>"18/08/2008", + "weekly_every_x_week"=>"1", + "weekly_return_monday"=>"m", + "yearly_day_of_week"=>"1", + "yearly_every_x_day"=>"8", + "yearly_every_xth_day"=>"1", + "yearly_month_of_year2"=>"8", + "yearly_month_of_year"=>"6", + "yearly_selector"=>"yearly_every_x_day" + }, + "tag_list"=>"one, two, three, four" + + # check new recurring todo added + assert_equal orig_rt_count+1, RecurringTodo.count + # check new todo added + assert_equal orig_todo_count+1, Todo.count + end + + def test_recurring_todo_toggle_check + # the test fixtures did add recurring_todos but not the corresponding todos, + # so we check complete and uncheck to force creation of a todo from the + # pattern + login_as(:admin_user) + + # mark as complete + xhr :post, :toggle_check, :id=>1, :_source_view=>"" + recurring_todo_1 = RecurringTodo.find(1) + assert recurring_todo_1.completed? + + todo_count = Todo.count + + # mark as active + xhr :post, :toggle_check, :id=>1, :_source_view=>"" + recurring_todo_1.reload + assert recurring_todo_1.active? + + # by making active, a new todo should be created from the pattern + assert_equal todo_count+1, Todo.count + + # find the new todo and check its description + new_todo = Todo.find_by_recurring_todo_id 1 + assert_equal "Call Bill Gates every day", new_todo.description end + def test_creating_recurring_todo_with_show_from_in_past + login_as(:admin_user) + + @yearly = RecurringTodo.find(5) # yearly on june 8th + + # change due date in four days from now and show from 10 days before, i.e. 6 + # days ago + target_date = Time.now.utc + 4.days + @yearly.every_other1 = target_date.day + @yearly.every_other2 = target_date.month + @yearly.show_from_delta = 10 + assert @yearly.save + + # toggle twice to force generation of new todo + xhr :post, :toggle_check, :id=>5, :_source_view=>"" + xhr :post, :toggle_check, :id=>5, :_source_view=>"" + + new_todo = Todo.find_by_recurring_todo_id 5 + + # due date should be the target_date + assert_equal Time.utc(target_date.year, target_date.month, target_date.day), new_todo.due + + # show_from should be nil since now+4.days-10.days is in the past + assert_equal nil, new_todo.show_from + end + end diff --git a/test/functional/todos_controller_test.rb b/test/functional/todos_controller_test.rb index 3c3127e4..b99b537c 100644 --- a/test/functional/todos_controller_test.rb +++ b/test/functional/todos_controller_test.rb @@ -70,7 +70,7 @@ class TodosControllerTest < Test::Rails::TestCase login_as(:admin_user) xhr :post, :destroy, :id => 1, :_source_view => 'todo' assert_rjs :page, "todo_1", :remove - #assert_rjs :replace_html, "badge-count", '9' + # #assert_rjs :replace_html, "badge-count", '9' end def test_create_todo @@ -90,11 +90,11 @@ class TodosControllerTest < Test::Rails::TestCase def test_fail_to_create_todo_via_xml login_as(:admin_user) - #try to create with no context, which is not valid + # #try to create with no context, which is not valid put :create, :format => "xml", "request" => { "project_name"=>"Build a working time machine", "todo"=>{"notes"=>"", "description"=>"Call Warren Buffet to find out how much he makes per day", "due"=>"30/11/2006"}, "tag_list"=>"foo bar" } assert_response 422 assert_xml_select "errors" do - assert_xml_select "error", "Context can't be blank" + assert_xml_select "error", "Context can't be blank" end end @@ -180,7 +180,7 @@ class TodosControllerTest < Test::Rails::TestCase login_as(:admin_user) get :index, { :format => "rss" } assert_equal 'application/rss+xml', @response.content_type - #puts @response.body + # #puts @response.body assert_xml_select 'rss[version="2.0"]' do assert_select 'channel' do @@ -237,7 +237,7 @@ class TodosControllerTest < Test::Rails::TestCase login_as :admin_user get :index, { :format => "atom" } assert_equal 'application/atom+xml', @response.content_type - #puts @response.body + # #puts @response.body assert_xml_select 'feed[xmlns="http://www.w3.org/2005/Atom"]' do assert_xml_select '>title', 'Tracks Actions' @@ -273,7 +273,7 @@ class TodosControllerTest < Test::Rails::TestCase get :index, { :format => "txt" } assert_equal 'text/plain', @response.content_type assert !(/ /.match(@response.body)) - #puts @response.body + # #puts @response.body end def test_text_feed_not_accessible_to_anonymous_user_without_token @@ -299,7 +299,7 @@ class TodosControllerTest < Test::Rails::TestCase get :index, { :format => "ics" } assert_equal 'text/calendar', @response.content_type assert !(/ /.match(@response.body)) - #puts @response.body + # #puts @response.body end def test_mobile_index_uses_text_html_content_type @@ -317,10 +317,10 @@ class TodosControllerTest < Test::Rails::TestCase def test_mobile_create_action_creates_a_new_todo login_as(:admin_user) post :create, {"format"=>"m", "todo"=>{"context_id"=>"2", - "due(1i)"=>"2007", "due(2i)"=>"1", "due(3i)"=>"2", - "show_from(1i)"=>"", "show_from(2i)"=>"", "show_from(3i)"=>"", - "project_id"=>"1", - "notes"=>"test notes", "description"=>"test_mobile_create_action", "state"=>"0"}} + "due(1i)"=>"2007", "due(2i)"=>"1", "due(3i)"=>"2", + "show_from(1i)"=>"", "show_from(2i)"=>"", "show_from(3i)"=>"", + "project_id"=>"1", + "notes"=>"test notes", "description"=>"test_mobile_create_action", "state"=>"0"}} t = Todo.find_by_description("test_mobile_create_action") assert_not_nil t assert_equal 2, t.context_id @@ -334,20 +334,20 @@ class TodosControllerTest < Test::Rails::TestCase def test_mobile_create_action_redirects_to_mobile_home_page_when_successful login_as(:admin_user) post :create, {"format"=>"m", "todo"=>{"context_id"=>"2", - "due(1i)"=>"2007", "due(2i)"=>"1", "due(3i)"=>"2", - "show_from(1i)"=>"", "show_from(2i)"=>"", "show_from(3i)"=>"", - "project_id"=>"1", - "notes"=>"test notes", "description"=>"test_mobile_create_action", "state"=>"0"}} + "due(1i)"=>"2007", "due(2i)"=>"1", "due(3i)"=>"2", + "show_from(1i)"=>"", "show_from(2i)"=>"", "show_from(3i)"=>"", + "project_id"=>"1", + "notes"=>"test notes", "description"=>"test_mobile_create_action", "state"=>"0"}} assert_redirected_to '/m' end def test_mobile_create_action_renders_new_template_when_save_fails login_as(:admin_user) post :create, {"format"=>"m", "todo"=>{"context_id"=>"2", - "due(1i)"=>"2007", "due(2i)"=>"1", "due(3i)"=>"2", - "show_from(1i)"=>"", "show_from(2i)"=>"", "show_from(3i)"=>"", - "project_id"=>"1", - "notes"=>"test notes", "state"=>"0"}, "tag_list"=>"test, test2"} + "due(1i)"=>"2007", "due(2i)"=>"1", "due(3i)"=>"2", + "show_from(1i)"=>"", "show_from(2i)"=>"", "show_from(3i)"=>"", + "project_id"=>"1", + "notes"=>"test notes", "state"=>"0"}, "tag_list"=>"test, test2"} assert_template 'todos/new' end @@ -357,4 +357,25 @@ class TodosControllerTest < Test::Rails::TestCase assert_equal '"{\\"Build a working time machine\\": \\"lab\\"}"', assigns(:default_project_context_name_map) end + def test_toggle_check_on_recurring_todo + login_as(:admin_user) + + # link todo_1 and recurring_todo_1 + recurring_todo_1 = RecurringTodo.find(1) + todo_1 = Todo.find(1) + todo_1.recurring_todo_id = recurring_todo_1.id + + # update todo_1 + assert todo_1.save + + # mark todo_1 as complete by toggle_check + xhr :post, :toggle_check, :id => 1, :_source_view => 'todo' + todo_1.reload + assert todo_1.completed? + + # check there is a new todo linked to the recurring pattern + next_todo = Todo.find_by_recurring_todo_id(recurring_todo_1.id) + assert_equal "Call Bill Gates every day", next_todo.description + end + end