X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/10294f4849b5d97185c618687a710a2dfc19f148..26f6fdf82c93b0fd3198bb8929d5f20a4723bfe8:/test/controllers/changeset_comments_controller_test.rb diff --git a/test/controllers/changeset_comments_controller_test.rb b/test/controllers/changeset_comments_controller_test.rb index 10dfb1f88..5d0f4b51f 100644 --- a/test/controllers/changeset_comments_controller_test.rb +++ b/test/controllers/changeset_comments_controller_test.rb @@ -1,21 +1,9 @@ require "test_helper" -class ChangesetCommentsControllerTest < ActionController::TestCase +class ChangesetCommentsControllerTest < ActionDispatch::IntegrationTest ## # test all routes which lead to this controller def test_routes - assert_routing( - { :path => "/api/0.6/changeset/1/comment", :method => :post }, - { :controller => "changeset_comments", :action => "create", :id => "1" } - ) - assert_routing( - { :path => "/api/0.6/changeset/comment/1/hide", :method => :post }, - { :controller => "changeset_comments", :action => "destroy", :id => "1" } - ) - assert_routing( - { :path => "/api/0.6/changeset/comment/1/unhide", :method => :post }, - { :controller => "changeset_comments", :action => "restore", :id => "1" } - ) assert_routing( { :path => "/changeset/1/comments/feed", :method => :get }, { :controller => "changeset_comments", :action => "index", :id => "1", :format => "rss" } @@ -26,226 +14,64 @@ class ChangesetCommentsControllerTest < ActionController::TestCase ) end - ## - # create comment success - def test_create_comment_success - user = create(:user) - user2 = create(:user) - private_user = create(:user, :data_public => false) - suspended_user = create(:user, :suspended) - deleted_user = create(:user, :deleted) - private_user_closed_changeset = create(:changeset, :closed, :user => private_user) - - basic_authorization user.email, "test" - - assert_difference "ChangesetComment.count", 1 do - assert_no_difference "ActionMailer::Base.deliveries.size" do - perform_enqueued_jobs do - post :create, :params => { :id => private_user_closed_changeset.id, :text => "This is a comment" } - end - end - end - assert_response :success - - changeset = create(:changeset, :closed, :user => private_user) - changeset.subscribers.push(private_user) - changeset.subscribers.push(user) - changeset.subscribers.push(suspended_user) - changeset.subscribers.push(deleted_user) - - assert_difference "ChangesetComment.count", 1 do - assert_difference "ActionMailer::Base.deliveries.size", 1 do - perform_enqueued_jobs do - post :create, :params => { :id => changeset.id, :text => "This is a comment" } - end - end - end - assert_response :success - - email = ActionMailer::Base.deliveries.first - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{user.display_name} has commented on one of your changesets", email.subject - assert_equal private_user.email, email.to.first - - ActionMailer::Base.deliveries.clear - - basic_authorization user2.email, "test" - - assert_difference "ChangesetComment.count", 1 do - assert_difference "ActionMailer::Base.deliveries.size", 2 do - perform_enqueued_jobs do - post :create, :params => { :id => changeset.id, :text => "This is a comment" } - end - end - end - assert_response :success - - email = ActionMailer::Base.deliveries.find { |e| e.to.first == private_user.email } - assert_not_nil email - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{user2.display_name} has commented on one of your changesets", email.subject - - email = ActionMailer::Base.deliveries.find { |e| e.to.first == user.email } - assert_not_nil email - assert_equal 1, email.to.length - assert_equal "[OpenStreetMap] #{user2.display_name} has commented on a changeset you are interested in", email.subject - - ActionMailer::Base.deliveries.clear - end - - ## - # create comment fail - def test_create_comment_fail - # unauthorized - post :create, :params => { :id => create(:changeset, :closed).id, :text => "This is a comment" } - assert_response :unauthorized - - basic_authorization create(:user).email, "test" - - # bad changeset id - assert_no_difference "ChangesetComment.count" do - post :create, :params => { :id => 999111, :text => "This is a comment" } - end - assert_response :not_found - - # not closed changeset - assert_no_difference "ChangesetComment.count" do - post :create, :params => { :id => create(:changeset).id, :text => "This is a comment" } - end - assert_response :conflict - - # no text - assert_no_difference "ChangesetComment.count" do - post :create, :params => { :id => create(:changeset, :closed).id } - end - assert_response :bad_request - - # empty text - assert_no_difference "ChangesetComment.count" do - post :create, :params => { :id => create(:changeset, :closed).id, :text => "" } - end - assert_response :bad_request - end - - ## - # test hide comment fail - def test_destroy_comment_fail - # unauthorized - comment = create(:changeset_comment) - assert_equal true, comment.visible - - post :destroy, :params => { :id => comment.id } - assert_response :unauthorized - assert_equal true, comment.reload.visible - - basic_authorization create(:user).email, "test" - - # not a moderator - post :destroy, :params => { :id => comment.id } - assert_response :forbidden - assert_equal true, comment.reload.visible - - basic_authorization create(:moderator_user).email, "test" - - # bad comment id - post :destroy, :params => { :id => 999111 } - assert_response :not_found - assert_equal true, comment.reload.visible - end - - ## - # test hide comment succes - def test_hide_comment_success - comment = create(:changeset_comment) - assert_equal true, comment.visible - - basic_authorization create(:moderator_user).email, "test" - - post :destroy, :params => { :id => comment.id } - assert_response :success - assert_equal false, comment.reload.visible - end - - ## - # test unhide comment fail - def test_restore_comment_fail - # unauthorized - comment = create(:changeset_comment, :visible => false) - assert_equal false, comment.visible - - post :restore, :params => { :id => comment.id } - assert_response :unauthorized - assert_equal false, comment.reload.visible - - basic_authorization create(:user).email, "test" - - # not a moderator - post :restore, :params => { :id => comment.id } - assert_response :forbidden - assert_equal false, comment.reload.visible - - basic_authorization create(:moderator_user).email, "test" - - # bad comment id - post :restore, :params => { :id => 999111 } - assert_response :not_found - assert_equal false, comment.reload.visible - end - - ## - # test unhide comment succes - def test_unhide_comment_success - comment = create(:changeset_comment, :visible => false) - assert_equal false, comment.visible - - basic_authorization create(:moderator_user).email, "test" - - post :restore, :params => { :id => comment.id } - assert_response :success - assert_equal true, comment.reload.visible - end - ## # test comments feed def test_feed changeset = create(:changeset, :closed) create_list(:changeset_comment, 3, :changeset => changeset) - get :index, :params => { :format => "rss" } + get changesets_comments_feed_path(:format => "rss") assert_response :success - assert_equal "application/rss+xml", @response.content_type + assert_equal "application/rss+xml", @response.media_type assert_select "rss", :count => 1 do assert_select "channel", :count => 1 do assert_select "item", :count => 3 end end - get :index, :params => { :format => "rss", :limit => 2 } + get changesets_comments_feed_path(:format => "rss", :limit => 2) assert_response :success - assert_equal "application/rss+xml", @response.content_type + assert_equal "application/rss+xml", @response.media_type assert_select "rss", :count => 1 do assert_select "channel", :count => 1 do assert_select "item", :count => 2 end end - get :index, :params => { :id => changeset.id, :format => "rss" } + get changeset_comments_feed_path(:id => changeset.id, :format => "rss") assert_response :success - assert_equal "application/rss+xml", @response.content_type + assert_equal "application/rss+xml", @response.media_type assert_select "rss", :count => 1 do assert_select "channel", :count => 1 do assert_select "item", :count => 3 end end + # Rails::Dom::Testing.html_document_fragment.parse(icons) + # Gets comment Ids from HTML and checks that they are in descending order + + last_comment_id = -1 + assert_select "rss", :count => 1 do + assert_select "description", :count => 3 do |descriptions| + descriptions.children.each do |description| + changeset_dom = Rails::Dom::Testing.html_document_fragment.parse(description.content) + comment = changeset_dom.at_css(".changeset-comment-text") + next unless comment + + id = comment.content.split[-1].to_i + assert_operator id, "<", last_comment_id if last_comment_id != -1 + last_comment_id = id + end + end + end end ## # test comments feed def test_feed_bad_limit - get :index, :params => { :format => "rss", :limit => 0 } + get changesets_comments_feed_path(:format => "rss", :limit => 0) assert_response :bad_request - get :index, :params => { :format => "rss", :limit => 100001 } + get changesets_comments_feed_path(:format => "rss", :limit => 100001) assert_response :bad_request end end