From e60c2c90380b800edee0248677807bbbc31bf589 Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Thu, 10 Mar 2011 16:50:19 +0100 Subject: [PATCH] fix #1121 and add tests for this --- app/helpers/todos_helper.rb | 6 +++--- app/views/todos/destroy.js.erb | 5 ++++- app/views/todos/toggle_check.js.erb | 5 +++-- features/calendar.feature | 25 ++++++++++++++++++++++-- features/step_definitions/todo_steps.rb | 26 +++++++++++++++++++++++++ features/support/world.rb | 9 +++++++-- 6 files changed, 66 insertions(+), 10 deletions(-) diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 8a215515..1f347fb4 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -287,7 +287,7 @@ module TodosHelper end def date_field_tag(name, id, value = nil, options = {}) - text_field_tag name, value, {"size" => 12, "id" => id, "class" => "Date", "onfocus" => "Calendar.setup", "autocomplete" => "off"}.update(options.stringify_keys) + text_field_tag name, value, {"size" => 12, "id" => id, "class" => "Date", "autocomplete" => "off"}.update(options.stringify_keys) end def update_needs_to_hide_context @@ -295,7 +295,7 @@ module TodosHelper (@remaining_in_context == 0 && @todo_was_deferred_from_active_state) || (@remaining_in_context == 0 && @todo.completed? && !(@original_item_was_deferred || @original_item_was_hidden)) if source_view_is(:tag) - return false if source_view_is(:project) + return false if source_view_is_one_of(:project, :calendar) return (@remaining_in_context == 0) && !source_view_is(:context) end @@ -403,7 +403,7 @@ module TodosHelper end end html += "}}) " * animation.count - return html + return html + ";" end private diff --git a/app/views/todos/destroy.js.erb b/app/views/todos/destroy.js.erb index b5acc553..93bfe6d6 100644 --- a/app/views/todos/destroy.js.erb +++ b/app/views/todos/destroy.js.erb @@ -19,7 +19,10 @@ function show_empty_messages() { <% end -%> <% if empty_container_msg_div_id && todo_container_is_empty -%> - $('#<%=empty_container_msg_div_id%>').slideDown(1000); + $('#<%=empty_container_msg_div_id%>').slideDown(1000); + <% if @down_count == 0 -%> + $('#no_todos_in_view').slideDown(1000); + <% end -%> <% end -%> <% if source_view_is(:deferred) && @down_count==0 -%> diff --git a/app/views/todos/toggle_check.js.erb b/app/views/todos/toggle_check.js.erb index d02605b7..e90c0741 100644 --- a/app/views/todos/toggle_check.js.erb +++ b/app/views/todos/toggle_check.js.erb @@ -7,7 +7,7 @@ animation = [] animation << "remove_todo" if @todo.completed? - animation << "add_to_completed_container" + animation << "add_to_completed_container" unless source_view_is(:calendar) animation << "add_new_recurring_todo" animation << "activate_pending_todos" animation << "remove_source_container" @@ -22,7 +22,8 @@ <% end -%> function redirect_after_complete() { - redirect_to("<%= project_path(@todo.project) -%>"); + var path = "<%= @todo.project_id.nil? ? "/" : project_path(@todo.project) -%>"; + redirect_to(path); } function remove_todo(next_steps) { diff --git a/features/calendar.feature b/features/calendar.feature index 165a4998..5343bc9c 100644 --- a/features/calendar.feature +++ b/features/calendar.feature @@ -22,7 +22,7 @@ Feature: Show all due actions in a calendar view Then the badge should show 1 And I should see "a new next action" - @selenium @wip + @selenium Scenario: Clearing the due date of a todo will remove it from the calendar When I go to the home page And I submit a new action with description "a new next action" in the context "@calendar" @@ -32,5 +32,26 @@ Feature: Show all due actions in a calendar view When I clear the due date of "a new next action" Then I should not see "a new next action" + @selenium + Scenario: Marking a todo complete will remove it from the calendar + Given I have a todo "a new next action" in the context "@calendar" which is due tomorrow + When I go to the calendar page + Then I should see "a new next action" + When I clear the due date of "a new next action" + Then I should not see "a new next action" + + @selenium + Scenario: Deleting a todo complete will remove it from the calendar + Given I have a todo "a new next action" in the context "@calendar" which is due tomorrow + When I go to the calendar page + Then I should see "a new next action" + When I delete the action "a new next action" + Then I should not see "a new next action" + + @selenium Scenario: Changing due date of a todo will move it in the calendar - Given this is a pending scenario + Given I have a todo "a new next action" in the context "@calendar" which is due tomorrow + When I go to the calendar page + Then I should see "a new next action" + When I edit the due date of "a new next action" to next month + Then I should see "a new next action" in the due next month container diff --git a/features/step_definitions/todo_steps.rb b/features/step_definitions/todo_steps.rb index 8cb5a957..776d6374 100644 --- a/features/step_definitions/todo_steps.rb +++ b/features/step_definitions/todo_steps.rb @@ -7,6 +7,13 @@ Given /^I have a todo "([^"]*)" in the context "([^"]*)"$/ do |description, cont @current_user.todos.create!(:context_id => context.id, :description => description) end +Given /^I have a todo "([^"]*)" in the context "([^"]*)" which is due tomorrow$/ do |description, context_name| + context = @current_user.contexts.find_or_create(:name => context_name) + @todo = @current_user.todos.create!(:context_id => context.id, :description => description) + @todo.due = @todo.created_at + 1.day + @todo.save! +end + Given /^I have a todo "([^"]*)"$/ do |description| Given "I have a todo \"#{description}\" in the context \"Context A\"" end @@ -148,6 +155,14 @@ When /^I edit the due date of "([^"]*)" to tomorrow$/ do |action_description| submit_edit_todo_form(todo) end +When /^I edit the due date of "([^"]*)" to next month$/ do |action_description| + todo = @current_user.todos.find_by_description(action_description) + todo.should_not be_nil + open_edit_form_for(todo) + fill_in "due_todo_#{todo.id}", :with => format_date(todo.created_at + 1.month) + submit_edit_todo_form(todo) +end + When /^I clear the due date of "([^"]*)"$/ do |action_description| todo = @current_user.todos.find_by_description(action_description) todo.should_not be_nil @@ -272,6 +287,17 @@ Then /^I should not see "([^"]*)" in the deferred container$/ do |todo_descripti end end +Then /^I should see "([^"]*)" in the due next month container$/ do |todo_description| + todo = @current_user.todos.find_by_description(todo_description) + todo.should_not be_nil + + xpath = "xpath=//div[@id='due_after_this_month']//div[@id='line_todo_#{todo.id}']" + + wait_for :timeout => 5 do + !selenium.is_element_present(xpath) + end +end + Then /^the selected project should be "([^"]*)"$/ do |content| # Works for mobile. TODO: make it work for both mobile and non-mobile field_labeled("Project").element.search(".//option[@selected = 'selected']").inner_html.should =~ /#{content}/ diff --git a/features/support/world.rb b/features/support/world.rb index e773eaa7..899fb801 100644 --- a/features/support/world.rb +++ b/features/support/world.rb @@ -41,8 +41,13 @@ module TracksStepHelper end def open_edit_form_for(todo) - # click edit - selenium.click("//div[@id='line_todo_#{todo.id}']//img[@id='edit_icon_todo_#{todo.id}']", :wait_for => :ajax, :javascript_framework => :jquery) + edit_button = "xpath=//div[@id='line_todo_#{todo.id}']//img[@id='edit_icon_todo_#{todo.id}']" + + wait_for :timeout => 5 do + selenium.is_element_present(edit_button) + end + + selenium.click(edit_button, :wait_for => :ajax, :javascript_framework => :jquery) end def wait_for_ajax