2014-05-16 18:03:13 -04:00
require 'test_helper'
2011-06-17 13:33:54 +02:00
2013-05-13 15:36:33 +02:00
class TodoXmlApiTest < ActionDispatch :: IntegrationTest
2011-10-06 21:13:31 +02:00
@@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
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
2012-04-27 14:22:16 +02:00
authenticated_get_xml " /tickler.xml " , @user . login , @password , { }
2011-06-17 13:33:54 +02:00
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
2018-11-03 11:00:27 -05:00
get '/tickler.xml' , params : { } , headers : { }
2011-06-17 13:33:54 +02:00
assert_response 401
2018-11-03 11:00:27 -05:00
get " /tickler.xml " , params : { } , headers : { 'HTTP_AUTHORIZATION' = > " Basic " + Base64 . encode64 ( " wrong:wrong " ) , 'ACCEPT' = > 'application/xml' }
2011-06-17 13:33:54 +02:00
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
2012-04-27 14:22:16 +02:00
authenticated_get_xml " /tickler.xml " , @user . login , @password , { }
2015-08-09 17:43:40 -04:00
assert_select 'todos' do
assert_select 'todo' , count : number
end
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
2012-04-27 14:22:16 +02:00
authenticated_get_xml " /tickler.xml " , @user . login , @password , { }
2015-08-09 17:43:40 -04:00
assert_select 'user_id' , false
2011-06-17 13:33:54 +02:00
end
2011-11-16 16:37:04 +01:00
2014-05-16 15:33:45 +02:00
def test_get_index_with_only_active_todos
authenticated_get_xml " /todos.xml " , @user . login , @password , { }
assert_response 200
all_todo_count = assigns [ 'xml_todos' ]
authenticated_get_xml " /todos.xml?limit_to_active_todos=1 " , @user . login , @password , { }
assert_response 200
active_todo_count = assigns [ 'xml_todos' ]
assert all_todo_count != active_todo_count , " active should be less than all todos "
end
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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 2.0 " ) . first
2011-10-10 22:25:51 +02:00
assert_not_nil todo
2013-05-27 12:44:31 +02:00
assert ! todo . uncompleted_predecessors . empty? , " should have predecessors "
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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 2.1 " ) . first
2011-11-20 14:48:49 +01:00
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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 3 " ) . first
2011-10-10 22:25:51 +02:00
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
2012-03-19 20:04:56 +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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 3.1 " ) . first
2011-11-20 14:48:49 +01:00
assert_not_nil todo
assert_equal " tracks " , todo . tag_list
end
2012-03-19 20:04:56 +01:00
def test_post_create_todo_with_multiple_tags_and_space
# testing fix for #1229
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 3 < / description>
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
< tags >
< tag > < name > foo < / name>< / tag >
< tag > < name > bar < / name>< / tag >
< tag > < name > bingo < / name>< / tag >
< / tags>
< / todo>"
assert_response :success
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 3 " ) . first
2012-03-19 20:04:56 +01:00
assert_not_nil todo
assert_equal " bar, bingo, foo " , todo . tag_list
authenticated_post_xml_to_todo_create "
< todo >
< description > this will succeed 4 < / description>
< context_id > #{contexts(:office).id}</context_id>
< project_id > #{projects(:timemachine).id}</project_id>
< tags >
< tag > < name > foo < / name>< / tag >
< tag > < name > bar < / name>< / tag >
< tag > < name > bingo < / name>< / tag >
< / tags>
< / todo>"
assert_response :success
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 4 " ) . first
2012-03-19 20:04:56 +01:00
assert_not_nil todo
assert_equal " bar, bingo, foo " , 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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 4 " ) . first
2011-10-10 22:25:51 +02:00
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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 4 " ) . first
2011-11-21 15:24:29 +01:00
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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 5 " ) . first
2011-10-10 22:25:51 +02:00
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
2013-02-27 11:50:49 +01:00
todo = @user . todos . where ( :description = > " this will succeed 5 " ) . first
2011-11-21 15:24:29 +01:00
assert_not_nil todo
assert_not_nil todo . project
assert_equal projects ( :timemachine ) . name , todo . project . name
2012-04-27 14:22:16 +02:00
assert_equal 1 , @user . projects . where ( " projects.name " = > projects ( :timemachine ) . name ) . count # no duplication of project
2011-11-21 15:24:29 +01: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>"
2012-04-27 14:22:16 +02:00
assert_response 409
2015-08-09 17:43:40 -04:00
assert_select 'errors' do
2011-09-12 22:58:39 +02:00
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 )
2012-04-27 14:22:16 +02:00
authenticated_post_xml " /todos.xml " , user , password , postdata
2011-09-10 02:31:53 +02:00
end
2015-08-09 17:43:40 -04:00
end