2011-06-17 13:33:54 +02:00
require File . expand_path ( File . dirname ( __FILE__ ) + '/../test_helper' )
require 'todos_controller'
class TodoXmlApiTest < ActionController :: IntegrationTest
2011-10-06 21:13:31 +02:00
fixtures :users , :contexts , :preferences , :todos , :projects
@@valid_postdata = " <todo><description>this will succeed</description><context_id type='integer'>10</context_id><project_id type='integer'>4</project_id></todo> "
2011-09-10 02:31:53 +02:00
2011-06-17 13:33:54 +02:00
def setup
assert_test_environment_ok
2011-10-10 22:25:51 +02:00
@user = users ( :admin_user )
@password = 'abracadabra'
2011-06-17 13:33:54 +02:00
end
2011-09-10 02:31:53 +02:00
2011-06-17 13:33:54 +02:00
def test_get_tickler_succeeds
authenticated_get_xml " /tickler " , @user . login , @password , { }
assert_response 200
end
2011-09-10 02:31:53 +02:00
2011-06-17 13:33:54 +02:00
def test_get_tickler_needs_authentication
get '/tickler.xml' , { } , { }
assert_response 401
get " /tickler " , { } , { 'AUTHORIZATION' = > " Basic " + Base64 . encode64 ( " wrong:wrong " ) , 'ACCEPT' = > 'application/xml' }
assert_response 401
end
2011-09-10 02:31:53 +02:00
2011-11-13 21:39:04 +01:00
def test_get_tickler_returns_all_deferred_and_pending_todos
number = @user . todos . deferred . count + @user . todos . pending . count
2011-06-17 13:33:54 +02:00
authenticated_get_xml " /tickler " , @user . login , @password , { }
2011-11-13 21:39:04 +01:00
assert_tag :tag = > " todos " , :children = > { :count = > number }
2011-06-17 13:33:54 +02:00
end
2011-09-10 02:31:53 +02:00
2011-06-17 13:33:54 +02:00
def test_get_tickler_omits_user_id
authenticated_get_xml " /tickler " , @user . login , @password , { }
assert_no_tag :tag = > " user_id "
end
2011-11-16 16:37:04 +01:00
2011-11-13 21:39:04 +01:00
def test_create_todo_with_show_from
2011-10-06 21:13:31 +02:00
old_count = @user . todos . count
authenticated_post_xml_to_todo_create "
< todo >
< description > Call Warren Buffet to find out how much he makes per day < / description>
2011-11-13 21:39:04 +01:00
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
2011-10-06 21:13:31 +02:00
< show - from type = \ " datetime \" > #{ 1 . week . from_now . xmlschema } </show-from>
< / todo>"
assert_response :success
assert_equal @user . todos . count , old_count + 1
end
2011-11-16 16:37:04 +01:00
2011-11-20 14:48:49 +01:00
def test_post_create_todo_with_multiple_dependencies
2011-10-06 20:28:58 +02:00
authenticated_post_xml_to_todo_create "
< todo >
2011-11-20 14:48:49 +01:00
< description > this will succeed 2 . 0 < / description>
2011-11-13 21:39:04 +01:00
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
2011-10-06 20:28:58 +02:00
< predecessor_dependencies >
2011-10-10 22:25:51 +02:00
< predecessor > 5 < / predecessor>
< predecessor > 6 < / predecessor>
2011-10-06 20:28:58 +02:00
< / predecessor_dependencies>
< / todo>"
assert_response :success
2011-11-20 14:48:49 +01:00
todo = @user . todos . find_by_description ( " this will succeed 2.0 " )
2011-10-10 22:25:51 +02:00
assert_not_nil todo
assert ! todo . uncompleted_predecessors . empty?
2011-10-06 20:28:58 +02:00
end
2011-11-16 16:37:04 +01:00
2011-11-20 14:48:49 +01:00
def test_post_create_todo_with_single_dependency
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 2 . 1 < / description>
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
< predecessor_dependencies >
< predecessor > 6 < / predecessor>
< / predecessor_dependencies>
< / todo>"
assert_response :success
todo = @user . todos . find_by_description ( " this will succeed 2.1 " )
assert_not_nil todo
assert ! todo . uncompleted_predecessors . empty?
end
def test_post_create_todo_with_multiple_tags
2011-10-09 20:35:50 +02:00
authenticated_post_xml_to_todo_create "
< todo >
2011-10-10 22:25:51 +02:00
< description > this will succeed 3 < / description>
2011-11-13 21:39:04 +01:00
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
2011-10-09 20:35:50 +02:00
< tags >
< tag > < name > starred < / name>< / tag >
2011-11-16 16:37:04 +01:00
< tag > < name > starred1 < / name>< / tag >
2011-10-10 22:25:51 +02:00
< tag > < name > starred2 < / name>< / tag >
2011-10-09 20:35:50 +02:00
< / tags>
< / todo>"
2011-10-06 20:28:58 +02:00
2011-10-09 20:35:50 +02:00
assert_response :success
2011-10-10 22:25:51 +02:00
todo = @user . todos . find_by_description ( " this will succeed 3 " )
assert_not_nil todo
2011-11-16 16:37:04 +01:00
assert_equal " starred, starred1, starred2 " , todo . tag_list
assert todo . starred?
2011-10-10 22:25:51 +02:00
end
2011-11-16 16:37:04 +01:00
2011-11-20 14:48:49 +01:00
def test_post_create_todo_with_single_tag
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 3 . 1 < / description>
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
< tags >
< tag > < name > tracks < / name>< / tag >
< / tags>
< / todo>"
assert_response :success
todo = @user . todos . find_by_description ( " this will succeed 3.1 " )
assert_not_nil todo
assert_equal " tracks " , todo . tag_list
end
2011-10-10 22:25:51 +02:00
def test_post_create_todo_with_new_context
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 4 < / description>
2011-11-13 21:39:04 +01:00
< project_id > #{projects(:timemachine).id}</project_id>
2011-10-10 22:25:51 +02:00
< context >
< name > @SomeNewContext < / name>
< / context>
< / todo>"
2011-11-16 16:37:04 +01:00
2011-10-10 22:25:51 +02:00
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
2011-11-16 16:37:04 +01:00
2011-11-21 15:24:29 +01:00
def test_post_create_todo_with_name_of_existing_context
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 4 < / description>
< project_id > #{projects(:timemachine).id}</project_id>
< context >
< name > #{contexts(:office).name}</name>
< / context>
< / todo>"
assert_response :success
todo = @user . todos . find_by_description ( " this will succeed 4 " )
assert_not_nil todo
assert_not_nil todo . context
assert_equal contexts ( :office ) . name , todo . context . name
end
2011-11-13 21:39:04 +01:00
def test_post_create_todo_with_new_project
2011-10-10 22:25:51 +02:00
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 5 < / description>
2011-11-13 21:39:04 +01:00
< context_id > #{contexts(:office).id}</context_id>
2011-10-10 22:25:51 +02:00
< project >
< name > Make even more money < / name>
< / project>
< / todo>"
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 "
2011-10-09 20:35:50 +02:00
end
2011-09-10 02:31:53 +02:00
2011-11-21 15:24:29 +01:00
def test_post_create_todo_with_name_of_existing_project
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 5 < / description>
< context_id > #{contexts(:office).id}</context_id>
< project >
< name > #{projects(:timemachine).name}</name>
< / project>
< / todo>"
assert_response :success
todo = @user . todos . find_by_description ( " this will succeed 5 " )
assert_not_nil todo
assert_not_nil todo . project
assert_equal projects ( :timemachine ) . name , todo . project . name
assert 1 , @user . projects . all ( :conditions = > [ " projects.name = ? " , projects ( :timemachine ) . name ] ) . count # no duplication of project
end
2011-09-10 02:31:53 +02:00
def test_post_create_todo_with_wrong_project_and_context_id
2011-11-13 21:39:04 +01:00
authenticated_post_xml_to_todo_create "
< todo >
< description > this will fail < / description>
< context_id type = 'integer' > - 16 < / context_id>
< project_id type = 'integer' > - 11 < / project_id>
< / todo>"
2011-09-10 02:31:53 +02:00
assert_response 422
2011-09-12 22:58:39 +02:00
assert_xml_select 'errors' do
assert_select 'error' , 2
end
2011-09-10 02:31:53 +02:00
end
2011-11-16 16:37:04 +01:00
def test_fails_with_401_if_not_authorized_user
2011-10-06 21:13:31 +02:00
authenticated_post_xml_to_todo_create '' , 'nobody' , 'nohow'
assert_response 401
end
2011-09-10 02:31:53 +02:00
private
2011-10-10 22:25:51 +02:00
def authenticated_post_xml_to_todo_create ( postdata = @@valid_postdata , user = @user . login , password = @password )
2011-09-10 02:31:53 +02:00
authenticated_post_xml " /todos " , user , password , postdata
end
2011-06-17 13:33:54 +02:00
end