]> git.openstreetmap.org Git - rails.git/blobdiff - test/controllers/changeset_controller_test.rb
Add a few more tests
[rails.git] / test / controllers / changeset_controller_test.rb
index b65926d93bc75a337db69f1526303d58920ac188..1be10ec2a3c9440a3c17a886bbb77e1e6f4c7e92 100644 (file)
@@ -1,5 +1,5 @@
-require 'test_helper'
-require 'changeset_controller'
+require "test_helper"
+require "changeset_controller"
 
 class ChangesetControllerTest < ActionController::TestCase
   api_fixtures
@@ -180,6 +180,7 @@ class ChangesetControllerTest < ActionController::TestCase
   # document structure.
   def test_read
     changeset_id = changesets(:normal_user_first_change).id
+
     get :read, :id => changeset_id
     assert_response :success, "cannot get first changeset"
 
@@ -193,6 +194,17 @@ class ChangesetControllerTest < ActionController::TestCase
     assert_select "osm[version='#{API_VERSION}'][generator='OpenStreetMap server']", 1
     assert_select "osm>changeset[id='#{changeset_id}']", 1
     assert_select "osm>changeset>discussion", 1
+    assert_select "osm>changeset>discussion>comment", 0
+
+    changeset_id = changesets(:normal_user_closed_change).id
+
+    get :read, :id => changeset_id, :include_discussion => true
+    assert_response :success, "cannot get closed changeset with comments"
+
+    assert_select "osm[version='#{API_VERSION}'][generator='OpenStreetMap server']", 1
+    assert_select "osm>changeset[id='#{changeset_id}']", 1
+    assert_select "osm>changeset>discussion", 1
+    assert_select "osm>changeset>discussion>comment", 3
   end
 
   ##
@@ -464,7 +476,7 @@ EOF
     changeset_id = changesets(:public_user_first_change).id
     %w(node way relation).each do |type|
       delete.find("//osmChange/delete/#{type}").each do |n|
-        n['changeset'] = changeset_id.to_s
+        n["changeset"] = changeset_id.to_s
       end
     end
 
@@ -517,7 +529,7 @@ EOF
       content "<osm><changeset>" +
         "<tag k='created_by' v='osm test suite checking changesets'/>" +
         "</changeset></osm>"
-      assert_difference('Changeset.count', 1) do
+      assert_difference "Changeset.count", 1 do
         put :create
       end
       assert_response :success
@@ -726,7 +738,7 @@ EOF
     assert_equal 2, Node.find(new_node_id).tags.size, "new node should have two tags"
     assert_equal [new_node_id, 3], Way.find(1).nds, "way nodes should match"
     Relation.find(1).members.each do |type, id, _role|
-      if type == 'node'
+      if type == "node"
         assert_equal new_node_id, id, "relation should contain new node"
       end
     end
@@ -1381,7 +1393,7 @@ EOF
     assert_response :success
     assert_template nil
     # print @response.body
-    # FIXME needs more assert_select tests
+    # FIXME: needs more assert_select tests
     assert_select "osmChange[version='#{API_VERSION}'][generator='#{GENERATOR}']" do
       assert_select "create", :count => 5
       assert_select "create>node[id='#{nodes(:used_node_2).node_id}'][visible='#{nodes(:used_node_2).visible?}'][version='#{nodes(:used_node_2).version}']" do
@@ -1393,7 +1405,7 @@ EOF
 
   ##
   # check that the bounding box of a changeset gets updated correctly
-  ## FIXME: This should really be moded to a integration test due to the with_controller
+  # FIXME: This should really be moded to a integration test due to the with_controller
   def test_changeset_bbox
     basic_authorization users(:public_user).email, "test"
 
@@ -1544,39 +1556,39 @@ EOF
     assert_response :success, "can't get changesets by user and open"
     assert_changesets [1]
 
-    get :query, :time => '2007-12-31'
+    get :query, :time => "2007-12-31"
     assert_response :success, "can't get changesets by time-since"
     assert_changesets [1, 2, 4, 5, 6]
 
-    get :query, :time => '2008-01-01T12:34Z'
+    get :query, :time => "2008-01-01T12:34Z"
     assert_response :success, "can't get changesets by time-since with hour"
     assert_changesets [1, 2, 4, 5, 6]
 
-    get :query, :time => '2007-12-31T23:59Z,2008-01-01T00:01Z'
+    get :query, :time => "2007-12-31T23:59Z,2008-01-01T00:01Z"
     assert_response :success, "can't get changesets by time-range"
     assert_changesets [1, 5, 6]
 
-    get :query, :open => 'true'
+    get :query, :open => "true"
     assert_response :success, "can't get changesets by open-ness"
     assert_changesets [1, 2, 4]
 
-    get :query, :closed => 'true'
+    get :query, :closed => "true"
     assert_response :success, "can't get changesets by closed-ness"
     assert_changesets [3, 5, 6, 7, 8]
 
-    get :query, :closed => 'true', :user => users(:normal_user).id
+    get :query, :closed => "true", :user => users(:normal_user).id
     assert_response :success, "can't get changesets by closed-ness and user"
     assert_changesets [3, 6, 8]
 
-    get :query, :closed => 'true', :user => users(:public_user).id
+    get :query, :closed => "true", :user => users(:public_user).id
     assert_response :success, "can't get changesets by closed-ness and user"
     assert_changesets [7]
 
-    get :query, :changesets => '1,2,3'
+    get :query, :changesets => "1,2,3"
     assert_response :success, "can't get changesets by id (as comma-separated string)"
     assert_changesets [1, 2, 3]
 
-    get :query, :changesets => ''
+    get :query, :changesets => ""
     assert_response :bad_request, "should be a bad request since changesets is empty"
   end
 
@@ -1619,8 +1631,8 @@ EOF
     changeset = changesets(:normal_user_first_change)
     new_changeset = changeset.to_xml
     new_tag = XML::Node.new "tag"
-    new_tag['k'] = "tagtesting"
-    new_tag['v'] = "valuetesting"
+    new_tag["k"] = "tagtesting"
+    new_tag["v"] = "valuetesting"
     new_changeset.find("//osm/changeset").first << new_tag
     content new_changeset
 
@@ -1642,8 +1654,8 @@ EOF
     changeset = changesets(:public_user_first_change)
     new_changeset = changeset.to_xml
     new_tag = XML::Node.new "tag"
-    new_tag['k'] = "tagtesting"
-    new_tag['v'] = "valuetesting"
+    new_tag["k"] = "tagtesting"
+    new_tag["v"] = "valuetesting"
     new_changeset.find("//osm/changeset").first << new_tag
     content new_changeset
 
@@ -1676,8 +1688,8 @@ EOF
     changeset = changesets(:normal_user_first_change)
     new_changeset = changeset.to_xml
     new_tag = XML::Node.new "tag"
-    new_tag['k'] = "testing"
-    new_tag['v'] = "testing"
+    new_tag["k"] = "testing"
+    new_tag["v"] = "testing"
     new_changeset.find("//osm/changeset").first << new_tag
 
     content new_changeset
@@ -1719,9 +1731,9 @@ EOF
 
       # loop until we fill the changeset with nodes
       offset.times do |i|
-        node_xml['lat'] = rand.to_s
-        node_xml['lon'] = rand.to_s
-        node_xml['version'] = (i + 1).to_s
+        node_xml["lat"] = rand.to_s
+        node_xml["lon"] = rand.to_s
+        node_xml["version"] = (i + 1).to_s
 
         content node_doc
         put :update, :id => node_id
@@ -1729,9 +1741,9 @@ EOF
       end
 
       # trying again should fail
-      node_xml['lat'] = rand.to_s
-      node_xml['lon'] = rand.to_s
-      node_xml['version'] = offset.to_s
+      node_xml["lat"] = rand.to_s
+      node_xml["lon"] = rand.to_s
+      node_xml["version"] = offset.to_s
 
       content node_doc
       put :update, :id => node_id
@@ -1756,7 +1768,7 @@ EOF
     assert_template :layout => "map"
     assert_select "h2", :text => "Changesets", :count => 1
 
-    get :list, :format => "html", :list => '1', :bbox => '-180,-90,90,180'
+    get :list, :format => "html", :list => "1", :bbox => "-180,-90,90,180"
     assert_response :success
     assert_template "list"
 
@@ -1769,7 +1781,7 @@ EOF
     # Now check that all 20 (or however many were returned) changesets are in the html
     assert_select "li", :count => changesets.size
     changesets.each do |_changeset|
-      # FIXME this test needs rewriting - test for table contents
+      # FIXME: this test needs rewriting - test for table contents
     end
   end
 
@@ -1782,7 +1794,7 @@ EOF
     assert_template :layout => "xhr"
     assert_select "h2", :text => "Changesets", :count => 1
 
-    get :list, :format => "html", :list => '1', :bbox => '-180,-90,90,180'
+    get :list, :format => "html", :list => "1", :bbox => "-180,-90,90,180"
     assert_response :success
     assert_template "list"
 
@@ -1795,7 +1807,7 @@ EOF
     # Now check that all 20 (or however many were returned) changesets are in the html
     assert_select "li", :count => changesets.size
     changesets.each do |_changeset|
-      # FIXME this test needs rewriting - test for table contents
+      # FIXME: this test needs rewriting - test for table contents
     end
   end
 
@@ -1806,7 +1818,7 @@ EOF
     get :list, :format => "html", :display_name => user.display_name
     assert_response :success
     assert_template "history"
-    ## FIXME need to add more checks to see which if edits are actually shown if your data is public
+    # FIXME: need to add more checks to see which if edits are actually shown if your data is public
   end
 
   ##
@@ -1814,7 +1826,7 @@ EOF
   def test_list_user_not_found
     get :list, :format => "html", :display_name => "Some random user"
     assert_response :not_found
-    assert_template 'user/no_such_user'
+    assert_template "user/no_such_user"
   end
 
   ##
@@ -1829,7 +1841,7 @@ EOF
     assert_select "feed", :count => 1
     assert_select "entry", :count => changesets.size
     changesets.each do |_changeset|
-      # FIXME this test needs rewriting - test for feed contents
+      # FIXME: this test needs rewriting - test for feed contents
     end
   end
 
@@ -1841,7 +1853,7 @@ EOF
     assert_response :success
     assert_template "list"
     assert_equal "application/atom+xml", response.content_type
-    ## FIXME need to add more checks to see which if edits are actually shown if your data is public
+    # FIXME: need to add more checks to see which if edits are actually shown if your data is public
   end
 
   ##
@@ -1870,44 +1882,81 @@ EOF
   ##
   # create comment success
   def test_create_comment_success
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
+
+    assert_difference "ChangesetComment.count", 1 do
+      assert_no_difference "ActionMailer::Base.deliveries.size" do
+        post :comment, :id => changesets(:normal_user_closed_change).id, :text => "This is a comment"
+      end
+    end
+    assert_response :success
 
-    assert_difference('ChangesetComment.count') do
-      post :comment, :id => changesets(:normal_user_closed_change).id, :text => 'This is a comment'
+    assert_difference "ChangesetComment.count", 1 do
+      assert_difference "ActionMailer::Base.deliveries.size", 1 do
+        post :comment, :id => changesets(:normal_user_subscribed_change).id, :text => "This is a comment"
+      end
     end
     assert_response :success
+
+    email = ActionMailer::Base.deliveries.first
+    assert_equal 1, email.to.length
+    assert_equal "[OpenStreetMap] test2 has commented on one of your changesets", email.subject
+    assert_equal "test@openstreetmap.org", email.to.first
+
+    ActionMailer::Base.deliveries.clear
+
+    basic_authorization(users(:second_public_user).email, "test")
+
+    assert_difference "ChangesetComment.count", 1 do
+      assert_difference "ActionMailer::Base.deliveries.size", 2 do
+        post :comment, :id => changesets(:normal_user_subscribed_change).id, :text => "This is a comment"
+      end
+    end
+    assert_response :success
+
+    email = ActionMailer::Base.deliveries.find { |e| e.to.first == "test@openstreetmap.org" }
+    assert_not_nil email
+    assert_equal 1, email.to.length
+    assert_equal "[OpenStreetMap] pulibc_test2 has commented on one of your changesets", email.subject
+
+    email = ActionMailer::Base.deliveries.find { |e| e.to.first == "test@example.com" }
+    assert_not_nil email
+    assert_equal 1, email.to.length
+    assert_equal "[OpenStreetMap] pulibc_test2 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 :comment, :id => changesets(:normal_user_closed_change).id, :text => 'This is a comment'
+    post :comment, :id => changesets(:normal_user_closed_change).id, :text => "This is a comment"
     assert_response :unauthorized
 
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
 
     # bad changeset id
-    assert_no_difference('ChangesetComment.count') do
-      post :comment, :id => 999111, :text => 'This is a comment'
+    assert_no_difference "ChangesetComment.count" do
+      post :comment, :id => 999111, :text => "This is a comment"
     end
     assert_response :not_found
 
     # not closed changeset
-    assert_no_difference('ChangesetComment.count') do
-      post :comment, :id => changesets(:normal_user_first_change).id, :text => 'This is a comment'
+    assert_no_difference "ChangesetComment.count" do
+      post :comment, :id => changesets(:normal_user_first_change).id, :text => "This is a comment"
     end
     assert_response :conflict
 
     # no text
-    assert_no_difference('ChangesetComment.count') do
+    assert_no_difference "ChangesetComment.count" do
       post :comment, :id => changesets(:normal_user_closed_change).id
     end
     assert_response :bad_request
 
     # empty text
-    assert_no_difference('ChangesetComment.count') do
-      post :comment, :id => changesets(:normal_user_closed_change).id, :text => ''
+    assert_no_difference "ChangesetComment.count" do
+      post :comment, :id => changesets(:normal_user_closed_change).id, :text => ""
     end
     assert_response :bad_request
   end
@@ -1915,10 +1964,10 @@ EOF
   ##
   # test subscribe success
   def test_subscribe_success
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
     changeset = changesets(:normal_user_closed_change)
 
-    assert_difference('changeset.subscribers.count') do
+    assert_difference "changeset.subscribers.count", 1 do
       post :subscribe, :id => changeset.id
     end
     assert_response :success
@@ -1929,29 +1978,29 @@ EOF
   def test_subscribe_fail
     # unauthorized
     changeset = changesets(:normal_user_closed_change)
-    assert_no_difference('changeset.subscribers.count') do
+    assert_no_difference "changeset.subscribers.count" do
       post :subscribe, :id => changeset.id
     end
     assert_response :unauthorized
 
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
 
     # bad changeset id
-    assert_no_difference('changeset.subscribers.count') do
+    assert_no_difference "changeset.subscribers.count" do
       post :subscribe, :id => 999111
     end
     assert_response :not_found
 
     # not closed changeset
     changeset = changesets(:normal_user_first_change)
-    assert_no_difference('changeset.subscribers.count') do
+    assert_no_difference "changeset.subscribers.count" do
       post :subscribe, :id => changeset.id
     end
     assert_response :conflict
 
     # trying to subscribe when already subscribed
     changeset = changesets(:normal_user_subscribed_change)
-    assert_no_difference('changeset.subscribers.count') do
+    assert_no_difference "changeset.subscribers.count" do
       post :subscribe, :id => changeset.id
     end
     assert_response :conflict
@@ -1960,10 +2009,10 @@ EOF
   ##
   # test unsubscribe success
   def test_unsubscribe_success
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
     changeset = changesets(:normal_user_subscribed_change)
 
-    assert_difference('changeset.subscribers.count', -1) do
+    assert_difference "changeset.subscribers.count", -1 do
       post :unsubscribe, :id => changeset.id
     end
     assert_response :success
@@ -1974,29 +2023,29 @@ EOF
   def test_unsubscribe_fail
     # unauthorized
     changeset = changesets(:normal_user_closed_change)
-    assert_no_difference('changeset.subscribers.count') do
+    assert_no_difference "changeset.subscribers.count" do
       post :unsubscribe, :id => changeset.id
     end
     assert_response :unauthorized
 
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
 
     # bad changeset id
-    assert_no_difference('changeset.subscribers.count', -1) do
+    assert_no_difference "changeset.subscribers.count" do
       post :unsubscribe, :id => 999111
     end
     assert_response :not_found
 
     # not closed changeset
     changeset = changesets(:normal_user_first_change)
-    assert_no_difference('changeset.subscribers.count', -1) do
+    assert_no_difference "changeset.subscribers.count" do
       post :unsubscribe, :id => changeset.id
     end
     assert_response :conflict
 
     # trying to unsubscribe when not subscribed
     changeset = changesets(:normal_user_closed_change)
-    assert_no_difference('changeset.subscribers.count') do
+    assert_no_difference "changeset.subscribers.count" do
       post :unsubscribe, :id => changeset.id
     end
     assert_response :not_found
@@ -2007,20 +2056,20 @@ EOF
   def test_hide_comment_fail
     # unauthorized
     comment = changeset_comments(:normal_comment_1)
-    assert('comment.visible') do
+    assert("comment.visible") do
       post :hide_comment, :id => comment.id
       assert_response :unauthorized
     end
 
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
 
     # not a moderator
-    assert('comment.visible') do
+    assert("comment.visible") do
       post :hide_comment, :id => comment.id
       assert_response :forbidden
     end
 
-    basic_authorization(users(:moderator_user).email, 'test')
+    basic_authorization(users(:moderator_user).email, "test")
 
     # bad comment id
     post :hide_comment, :id => 999111
@@ -2032,9 +2081,9 @@ EOF
   def test_hide_comment_success
     comment = changeset_comments(:normal_comment_1)
 
-    basic_authorization(users(:moderator_user).email, 'test')
+    basic_authorization(users(:moderator_user).email, "test")
 
-    assert('!comment.visible') do
+    assert("!comment.visible") do
       post :hide_comment, :id => comment.id
     end
     assert_response :success
@@ -2045,20 +2094,20 @@ EOF
   def test_unhide_comment_fail
     # unauthorized
     comment = changeset_comments(:normal_comment_1)
-    assert('comment.visible') do
+    assert("comment.visible") do
       post :unhide_comment, :id => comment.id
       assert_response :unauthorized
     end
 
-    basic_authorization(users(:public_user).email, 'test')
+    basic_authorization(users(:public_user).email, "test")
 
     # not a moderator
-    assert('comment.visible') do
+    assert("comment.visible") do
       post :unhide_comment, :id => comment.id
       assert_response :forbidden
     end
 
-    basic_authorization(users(:moderator_user).email, 'test')
+    basic_authorization(users(:moderator_user).email, "test")
 
     # bad comment id
     post :unhide_comment, :id => 999111
@@ -2070,9 +2119,9 @@ EOF
   def test_unhide_comment_success
     comment = changeset_comments(:normal_comment_1)
 
-    basic_authorization(users(:moderator_user).email, 'test')
+    basic_authorization(users(:moderator_user).email, "test")
 
-    assert('!comment.visible') do
+    assert("!comment.visible") do
       post :unhide_comment, :id => comment.id
     end
     assert_response :success
@@ -2128,16 +2177,16 @@ EOF
     # check the bbox
     doc = XML::Parser.string(@response.body).parse
     changeset = doc.find("//osm/changeset").first
-    assert_equal bbox[0], changeset['min_lon'].to_f, "min lon"
-    assert_equal bbox[1], changeset['min_lat'].to_f, "min lat"
-    assert_equal bbox[2], changeset['max_lon'].to_f, "max lon"
-    assert_equal bbox[3], changeset['max_lat'].to_f, "max lat"
+    assert_equal bbox[0], changeset["min_lon"].to_f, "min lon"
+    assert_equal bbox[1], changeset["min_lat"].to_f, "min lat"
+    assert_equal bbox[2], changeset["max_lon"].to_f, "max lon"
+    assert_equal bbox[3], changeset["max_lat"].to_f, "max lat"
   end
 
   ##
   # update the changeset_id of a way element
   def update_changeset(xml, changeset_id)
-    xml_attr_rewrite(xml, 'changeset', changeset_id)
+    xml_attr_rewrite(xml, "changeset", changeset_id)
   end
 
   ##