diff --git a/tracks/app/controllers/todos_controller.rb b/tracks/app/controllers/todos_controller.rb index a92b0f58..c18cd994 100644 --- a/tracks/app/controllers/todos_controller.rb +++ b/tracks/app/controllers/todos_controller.rb @@ -130,13 +130,17 @@ class TodosController < ApplicationController @original_item_context_id = @item.context_id @original_item_project_id = @item.project_id @original_item_was_deferred = @item.deferred? - if params['item']['project_id'].blank? && !params['project_name'].blank? && params['project_name'] != 'None' - project = @user.projects.find_by_name(params['project_name'].strip) - unless project + if params['item']['project_id'].blank? && !params['project_name'].blank? + if params['project_name'] == 'None' + project = Project.null_object + else + project = @user.projects.find_by_name(params['project_name'].strip) + unless project project = @user.projects.build project.name = params['project_name'].strip project.save @new_project_created = true + end end params["item"]["project_id"] = project.id end diff --git a/tracks/app/models/project.rb b/tracks/app/models/project.rb index 2eb7b250..9f29b671 100644 --- a/tracks/app/models/project.rb +++ b/tracks/app/models/project.rb @@ -109,4 +109,8 @@ class NullProject true end + def id + nil + end + end \ No newline at end of file diff --git a/tracks/test/functional/todos_controller_test.rb b/tracks/test/functional/todos_controller_test.rb index 4720ec9c..c0de5c49 100644 --- a/tracks/test/functional/todos_controller_test.rb +++ b/tracks/test/functional/todos_controller_test.rb @@ -64,6 +64,22 @@ class TodosControllerTest < Test::Unit::TestCase #assert_rjs :replace_html, "badge-count", '9' end + def test_update_item_project + t = Todo.find(1) + @request.session['user_id'] = users(:admin_user).id + xhr :post, :update, :id => 1, :_source_view => 'todo', "context_name"=>"library", "project_name"=>"Build a working time machine", "item"=>{"id"=>"1", "notes"=>"", "description"=>"Call Warren Buffet to find out how much he makes per day", "due"=>"30/11/2006"}, "tag_list"=>"foo bar" + t = Todo.find(1) + assert_equal 1, t.project_id + end + + def test_update_item_project_to_none + t = Todo.find(1) + @request.session['user_id'] = users(:admin_user).id + xhr :post, :update, :id => 1, :_source_view => 'todo', "context_name"=>"library", "project_name"=>"None", "item"=>{"id"=>"1", "notes"=>"", "description"=>"Call Warren Buffet to find out how much he makes per day", "due"=>"30/11/2006"}, "tag_list"=>"foo bar" + t = Todo.find(1) + assert_nil t.project_id + end + def test_update_item t = Todo.find(1) @request.session['user_id'] = users(:admin_user).id