diff --git a/app/models/todo.rb b/app/models/todo.rb index db5a7453..fe31417c 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -143,19 +143,6 @@ class Todo < ActiveRecord::Base end end - def predecessor_dependencies=(params) - value = params[:predecessor_dependencies] - if !value.nil? - if value.class == Array - value.each do |attrs| - predecessor_dependencies.build(attrs) - end - else - predecessor_dependencies.build(value) - end - end - end - def save_predecessors unless @predecessor_array.nil? # Only save predecessors if they changed current_array = self.predecessors @@ -190,19 +177,6 @@ class Todo < ActiveRecord::Base self.activate! end - def successor_dependencies=(params) - value = params[:successor_dependencies] - if !value.nil? - if value.class == Array - value.each do |attrs| - successor_dependencies.build(attrs) - end - else - successor_dependencies.build(value) - end - end - end - # Returns true if t is equal to self or a successor of self def is_successor?(todo) if self == todo @@ -314,6 +288,8 @@ class Todo < ActiveRecord::Base end def add_predecessor(t) + return if t.nil? + @predecessor_array = predecessors @predecessor_array << t end @@ -335,7 +311,63 @@ class Todo < ActiveRecord::Base def raw_notes=(value) self[:notes] = value end - + + # XML API fixups + def predecessor_dependencies=(params) + value = params[:predecessor] + + if !value.nil? + if value.class == Array + value.each do |ele| + if ele.is_a? String + add_predecessor(self.user.todos.find_by_id(ele.to_i)) unless ele.blank? + else + predecessor_dependencies.build(value) + end + end + else + if ele.is_a? String + add_predecessor(self.user.todos.find_by_id(ele.to_i)) unless ele.blank? + else + predecessor_dependencies.build(value) + end + end + end + end + + alias_method :original_context=, :context= + def context=(value) + if value.is_a? Context + self.original_context=(value) + else + self.original_context=(Context.create(value)) + end + end + + alias_method :original_project=, :project= + def project=(value) + if value.is_a? Project + self.original_project=(value) + else + self.original_project=(Project.create(value)) + end + end + + alias_method :original_tags=, :tags= + def tags=(params) + value = params[:tag] + + if !value.nil? + if value.class == Array + value.each do |attrs| + tags.build(attrs) + end + else + tags.build(value) + end + end + end + # Rich Todo API def self.from_rich_message(user, default_context_id, description, notes) diff --git a/test/integration/todo_xml_api_test.rb b/test/integration/todo_xml_api_test.rb index 20171f99..21da3fdb 100644 --- a/test/integration/todo_xml_api_test.rb +++ b/test/integration/todo_xml_api_test.rb @@ -8,8 +8,8 @@ class TodoXmlApiTest < ActionController::IntegrationTest def setup assert_test_environment_ok - @user = users(:other_user) - @password = 'sesame' + @user = users(:admin_user) + @password = 'abracadabra' end def test_get_tickler_succeeds @@ -51,39 +51,73 @@ class TodoXmlApiTest < ActionController::IntegrationTest end def test_post_create_todo_with_dependencies - old_count = @user.todos.count authenticated_post_xml_to_todo_create " this will succeed 2 - 10 - 4 + 8 + 1 - 12 + 5 + 6 - - 12 - " assert_response :success - assert_equal @user.todos.count, old_count + 1 + todo = @user.todos.find_by_description("this will succeed 2") + assert_not_nil todo + assert !todo.uncompleted_predecessors.empty? end def test_post_create_todo_with_tags - old_count = @user.todos.count authenticated_post_xml_to_todo_create " - this will succeed 2 - 10 - 4 + this will succeed 3 + 8 + 1 starred + starred2 " - puts @response.body assert_response :success - assert_equal @user.todos.count, old_count + 1 + todo = @user.todos.find_by_description("this will succeed 3") + assert_not_nil todo + assert !todo.starred? + end + + def test_post_create_todo_with_new_context + authenticated_post_xml_to_todo_create " + + this will succeed 4 + 1 + + @SomeNewContext + +" + + assert_response :success + todo = @user.todos.find_by_description("this will succeed 4") + assert_not_nil todo + assert_not_nil todo.context + assert_equal todo.context.name, "@SomeNewContext" + end + + def test_post_create_todo_with_new_context + authenticated_post_xml_to_todo_create " + + this will succeed 5 + 8 + + Make even more money + +" + + assert_response :success + todo = @user.todos.find_by_description("this will succeed 5") + assert_not_nil todo + assert_not_nil todo.project + assert_equal todo.project.name, "Make even more money" end def test_post_create_todo_with_wrong_project_and_context_id @@ -101,7 +135,7 @@ class TodoXmlApiTest < ActionController::IntegrationTest private - def authenticated_post_xml_to_todo_create(postdata = @@valid_postdata, user = users(:other_user).login, password = 'sesame') + def authenticated_post_xml_to_todo_create(postdata = @@valid_postdata, user = @user.login, password = @password) authenticated_post_xml "/todos", user, password, postdata end