X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/08d6a0c91017af41d7b4f8f07a669d7cd4413772..81d6b9dd28e6ff77e0307cb8feb1ae6836f3fdbf:/test/functional/note_controller_test.rb diff --git a/test/functional/note_controller_test.rb b/test/functional/note_controller_test.rb index 955f1c24c..033cef8a4 100644 --- a/test/functional/note_controller_test.rb +++ b/test/functional/note_controller_test.rb @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../test_helper' class NoteControllerTest < ActionController::TestCase fixtures :users, :notes, :note_comments - def test_map_note_create_success + def test_note_create_success assert_difference('Note.count') do assert_difference('NoteComment.count') do post :create, {:lat => -1.0, :lon => -1.0, :name => "new_tester", :text => "This is a comment"} @@ -11,164 +11,326 @@ class NoteControllerTest < ActionController::TestCase end assert_response :success id = @response.body.sub(/ok/,"").to_i + get :read, {:id => id, :format => 'json'} assert_response :success - js = @response.body - assert_match "\"status\":\"open\"", js - assert_match "\"body\":\"This is a comment\"", js - assert_match "\"author_name\":\"new_tester (a)\"", js + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal "Feature", js["type"] + assert_equal "Point", js["geometry"]["type"] + assert_equal [-1.0, -1.0], js["geometry"]["coordinates"] + assert_equal id, js["properties"]["id"] + assert_equal "open", js["properties"]["status"] + assert_equal 1, js["properties"]["comments"].count + assert_equal "opened", js["properties"]["comments"].last["action"] + assert_equal "This is a comment", js["properties"]["comments"].last["text"] + assert_equal "new_tester (a)", js["properties"]["comments"].last["user"] + end + + def test_note_create_fail + assert_no_difference('Note.count') do + assert_no_difference('NoteComment.count') do + post :create, {:lon => -1.0, :name => "new_tester", :text => "This is a comment"} + end + end + assert_response :bad_request + + assert_no_difference('Note.count') do + assert_no_difference('NoteComment.count') do + post :create, {:lat => -1.0, :name => "new_tester", :text => "This is a comment"} + end + end + assert_response :bad_request + + assert_no_difference('Note.count') do + assert_no_difference('NoteComment.count') do + post :create, {:lat => -1.0, :lon => -1.0, :name => "new_tester"} + end + end + assert_response :bad_request + + assert_no_difference('Note.count') do + assert_no_difference('NoteComment.count') do + post :create, {:lat => -100.0, :lon => -1.0, :name => "new_tester", :text => "This is a comment"} + end + end + assert_response :bad_request + + assert_no_difference('Note.count') do + assert_no_difference('NoteComment.count') do + post :create, {:lat => -1.0, :lon => -200.0, :name => "new_tester", :text => "This is a comment"} + end + end + assert_response :bad_request end - def test_map_note_comment_create_success + def test_note_comment_create_success assert_difference('NoteComment.count') do - post :update, {:id => 2, :name => "new_tester2", :text => "This is an additional comment"} + post :update, {:id => notes(:open_note_with_comment).id, :name => "new_tester2", :text => "This is an additional comment"} end assert_response :success - get :read, {:id => 2, :format => 'json'} + get :read, {:id => notes(:open_note_with_comment).id, :format => 'json'} assert_response :success - js = @response.body - assert_match "\"id\":2", js - assert_match "\"status\":\"open\"", js - assert_match "\"body\":\"This is an additional comment\"", js - assert_match "\"author_name\":\"new_tester2 (a)\"", js + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal "Feature", js["type"] + assert_equal notes(:open_note_with_comment).id, js["properties"]["id"] + assert_equal "open", js["properties"]["status"] + assert_equal 3, js["properties"]["comments"].count + assert_equal "commented", js["properties"]["comments"].last["action"] + assert_equal "This is an additional comment", js["properties"]["comments"].last["text"] + assert_equal "new_tester2 (a)", js["properties"]["comments"].last["user"] end - def test_map_note_read_success - get :read, {:id => 1} - assert_response :success + def test_note_comment_create_fail + assert_no_difference('NoteComment.count') do + post :update, {:name => "new_tester2", :text => "This is an additional comment"} + end + assert_response :bad_request - get :read, {:id => 1, :format => 'xml'} - assert_response :success + assert_no_difference('NoteComment.count') do + post :update, {:id => notes(:open_note_with_comment).id, :name => "new_tester2"} + end + assert_response :bad_request - get :read, {:id => 1, :format => 'rss'} - assert_response :success + assert_no_difference('NoteComment.count') do + post :update, {:id => 12345, :name => "new_tester2", :text => "This is an additional comment"} + end + assert_response :not_found + + assert_no_difference('NoteComment.count') do + post :update, {:id => notes(:hidden_note_with_comment).id, :name => "new_tester2", :text => "This is an additional comment"} + end + assert_response :gone + end - get :read, {:id => 1, :format => 'json'} + def test_note_close_success + post :close, {:id => notes(:open_note_with_comment).id} assert_response :success - get :read, {:id => 1, :format => 'gpx'} + get :read, {:id => notes(:open_note_with_comment).id, :format => 'json'} assert_response :success + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal "Feature", js["type"] + assert_equal notes(:open_note_with_comment).id, js["properties"]["id"] + assert_equal "closed", js["properties"]["status"] + assert_equal 3, js["properties"]["comments"].count + assert_equal "closed", js["properties"]["comments"].last["action"] + assert_equal nil, js["properties"]["comments"].last["text"] + assert_equal "NoName (a)", js["properties"]["comments"].last["user"] end - def test_map_note_close_success - post :close, {:id => 2} - assert_response :success + def test_note_close_fail + post :close + assert_response :bad_request - get :read, {:id => 2, :format => 'json'} - js = @response.body - assert_match "\"id\":2", js - assert_match "\"status\":\"closed\"", js + post :close, {:id => 12345} + assert_response :not_found + + post :close, {:id => notes(:hidden_note_with_comment).id} + assert_response :gone end - def test_get_notes_success - get :list, {:bbox=>'1,1,1.2,1.2'} - assert_response :success + def test_note_read_success +# get :read, {:id => notes(:open_note).id} +# assert_response :success +# assert_equal "application/xml", @response.content_type - get :list, {:bbox=>'1,1,1.2,1.2', :format => 'rss'} + get :read, {:id => notes(:open_note).id, :format => "xml"} assert_response :success + assert_equal "application/xml", @response.content_type - get :list, {:bbox=>'1,1,1.2,1.2', :format => 'json'} + get :read, {:id => notes(:open_note).id, :format => "rss"} assert_response :success + assert_equal "application/rss+xml", @response.content_type - get :list, {:bbox=>'1,1,1.2,1.2', :format => 'xml'} + get :read, {:id => notes(:open_note).id, :format => "json"} assert_response :success + assert_equal "application/json", @response.content_type - get :list, {:bbox=>'1,1,1.2,1.2', :format => 'gpx'} + get :read, {:id => notes(:open_note).id, :format => "gpx"} assert_response :success + assert_equal "application/gpx+xml", @response.content_type end - def test_get_notes_large_area_success - get :list, {:bbox=>'-2.5,-2.5,2.5,2.5'} + def test_note_read_hidden_comment + get :read, {:id => notes(:note_with_hidden_comment).id, :format => 'json'} assert_response :success + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal notes(:note_with_hidden_comment).id, js["properties"]["id"] + assert_equal 2, js["properties"]["comments"].count + assert_equal "Valid comment for note 5", js["properties"]["comments"][0]["text"] + assert_equal "Another valid comment for note 5", js["properties"]["comments"][1]["text"] end - def test_get_notes_large_area_bad_request - get :list, {:bbox=>'-10,-10,12,12'} + def test_note_read_fail + post :read assert_response :bad_request - end - def test_get_notes_closed_7_success - get :list, {:bbox=>'1,1,1.2,1.2', :closed => '7'} - assert_response :success + get :read, {:id => 12345} + assert_response :not_found + + get :read, {:id => notes(:hidden_note_with_comment).id} + assert_response :gone end - def test_get_notes_closed_0_success - get :list, {:bbox=>'1,1,1.2,1.2', :closed => '0'} + def test_note_delete_success + delete :delete, {:id => notes(:open_note_with_comment).id} assert_response :success + + get :read, {:id => notes(:open_note_with_comment).id, :format => 'json'} + assert_response :gone end - def test_get_notes_closed_n1_success - get :list, {:bbox=>'1,1,1.2,1.2', :closed => '-1'} - assert_response :success + def test_note_delete_fail + delete :delete + assert_response :bad_request + + delete :delete, {:id => 12345} + assert_response :not_found + + delete :delete, {:id => notes(:hidden_note_with_comment).id} + assert_response :gone end + def test_get_notes_success +# get :list, {:bbox => '1,1,1.2,1.2'} +# assert_response :success +# assert_equal "text/javascript", @response.content_type - def test_search_success - get :search, {:bbox=>'1,1,1.2,1.2', :q => 'note 1'} + get :list, {:bbox => '1,1,1.2,1.2', :format => 'rss'} assert_response :success + assert_equal "application/rss+xml", @response.content_type - get :search, {:bbox=>'1,1,1.2,1.2', :q => 'note 1', :format => 'xml'} + get :list, {:bbox => '1,1,1.2,1.2', :format => 'json'} assert_response :success + assert_equal "application/json", @response.content_type - get :search, {:bbox=>'1,1,1.2,1.2', :q => 'note 1', :format => 'json'} + get :list, {:bbox => '1,1,1.2,1.2', :format => 'xml'} assert_response :success + assert_equal "application/xml", @response.content_type - get :search, {:bbox=>'1,1,1.2,1.2', :q => 'note 1', :format => 'rss'} + get :list, {:bbox => '1,1,1.2,1.2', :format => 'gpx'} assert_response :success + assert_equal "application/gpx+xml", @response.content_type + end - get :search, {:bbox=>'1,1,1.2,1.2', :q => 'note 1', :format => 'gpx'} - assert_response :success + def test_get_notes_large_area +# get :list, {:bbox => '-2.5,-2.5,2.5,2.5'} +# assert_response :success + +# get :list, {:l => '-2.5', :b => '-2.5', :r => '2.5', :t => '2.5'} +# assert_response :success + + get :list, {:bbox => '-10,-10,12,12'} + assert_response :bad_request + + get :list, {:l => '-10', :b => '-10', :r => '12', :t => '12'} + assert_response :bad_request end - def test_rss_success - get :rss, {:bbox=>'1,1,1.2,1.2'} + def test_get_notes_closed + get :list, {:bbox => '1,1,1.7,1.7', :closed => '7', :format => 'json'} assert_response :success - - get :rss + assert_equal "application/json", @response.content_type + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal "FeatureCollection", js["type"] + assert_equal 4, js["features"].count + + get :list, {:bbox => '1,1,1.7,1.7', :closed => '0', :format => 'json'} assert_response :success + assert_equal "application/json", @response.content_type + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal "FeatureCollection", js["type"] + assert_equal 4, js["features"].count + + get :list, {:bbox => '1,1,1.7,1.7', :closed => '-1', :format => 'json'} + assert_response :success + assert_equal "application/json", @response.content_type + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal "FeatureCollection", js["type"] + assert_equal 6, js["features"].count end - def test_user_notes_success - get :mine, {:display_name=>'test'} + def test_get_notes_bad_params + get :list, {:bbox => '-2.5,-2.5,2.5'} + assert_response :bad_request + + get :list, {:bbox => '-2.5,-2.5,2.5,2.5,2.5'} + assert_response :bad_request + + get :list, {:b => '-2.5', :r => '2.5', :t => '2.5'} + assert_response :bad_request + + get :list, {:l => '-2.5', :r => '2.5', :t => '2.5'} + assert_response :bad_request + + get :list, {:l => '-2.5', :b => '-2.5', :t => '2.5'} + assert_response :bad_request + + get :list, {:l => '-2.5', :b => '-2.5', :r => '2.5'} + assert_response :bad_request + end + + def test_search_success +# get :search, {:q => 'note 1'} +# assert_response :success +# assert_equal "text/javascript", @response.content_type + + get :search, {:q => 'note 1', :format => 'xml'} assert_response :success + assert_equal "application/xml", @response.content_type - get :mine, {:display_name=>'pulibc_test2'} + get :search, {:q => 'note 1', :format => 'json'} assert_response :success + assert_equal "application/json", @response.content_type - get :mine, {:display_name=>'non-existent'} - assert_response :not_found - end + get :search, {:q => 'note 1', :format => 'rss'} + assert_response :success + assert_equal "application/rss+xml", @response.content_type - def test_map_note_comment_create_not_found - assert_no_difference('NoteComment.count') do - post :update, {:id => 12345, :name => "new_tester", :text => "This is an additional comment"} - end - assert_response :not_found + get :search, {:q => 'note 1', :format => 'gpx'} + assert_response :success + assert_equal "application/gpx+xml", @response.content_type end - def test_map_note_close_not_found - post :close, {:id => 12345} - assert_response :not_found + def test_search_bad_params + get :search + assert_response :bad_request end - def test_map_note_read_not_found - get :read, {:id => 12345} - assert_response :not_found + def test_rss_success +# get :rss +# assert_response :success +# assert_equal "application/rss+xml", @response.content_type + +# get :rss, {:bbox=>'1,1,1.2,1.2'} +# assert_response :success +# assert_equal "application/rss+xml", @response.content_type end - def test_map_note_read_gone - get :read, {:id => 4} - assert_response :gone + def test_rss_fail + get :rss, {:bbox=>'1,1,1.2'} + assert_response :bad_request + + get :rss, {:bbox=>'1,1,1.2,1.2,1.2'} + assert_response :bad_request end - def test_map_note_hidden_comment - get :read, {:id => 5, :format => 'json'} + def test_user_notes_success + get :mine, {:display_name=>'test'} + assert_response :success + + get :mine, {:display_name=>'pulibc_test2'} assert_response :success - js = @response.body - assert_match "\"id\":5", js - assert_match "\"body\":\"Valid comment for note 5\"", js - assert_match "\"body\":\"Another valid comment for note 5\"", js - assert_no_match /\"body\":\"Spam for note 5\"/, js + + get :mine, {:display_name=>'non-existent'} + assert_response :not_found end end