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-10-06 21:13:31 +02: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-10-06 20:28:58 +02:00
def test_post_create_todo_with_dependencies
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 2 < / 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-10-10 22:25:51 +02:00
todo = @user . todos . find_by_description ( " this will succeed 2 " )
assert_not_nil todo
assert ! todo . uncompleted_predecessors . empty?
2011-10-06 20:28:58 +02:00
end
2011-10-09 20:35:50 +02:00
def test_post_create_todo_with_tags
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-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
assert ! todo . starred?
end
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>"
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-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
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-10-06 21:13:31 +02:00
def test_fails_with_401_if_not_authorized_user
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