]> git.openstreetmap.org Git - rails.git/commitdiff
Refactor api changeset discussion tests
authorAnton Khorev <tony29@yandex.ru>
Mon, 3 Feb 2025 16:20:55 +0000 (19:20 +0300)
committerAnton Khorev <tony29@yandex.ru>
Mon, 3 Feb 2025 16:28:47 +0000 (19:28 +0300)
test/controllers/api/changesets_controller_test.rb

index c0be42a21614132b8628618a21749b663532d35a..5c0e7c9c268dc82cb5ca2a3533a5c7dc21186e96 100644 (file)
@@ -153,17 +153,19 @@ module Api
       get changeset_show_path(changeset)
       assert_response :success, "cannot get first changeset"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
-      assert_single_changeset changeset
-      assert_select "osm>changeset>discussion", 0
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
+      assert_single_changeset changeset do
+        assert_dom "> discussion", 0
+      end
 
       get changeset_show_path(changeset), :params => { :include_discussion => true }
       assert_response :success, "cannot get first changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
-      assert_single_changeset changeset
-      assert_select "osm>changeset>discussion", 1
-      assert_select "osm>changeset>discussion>comment", 0
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
+      assert_single_changeset changeset do
+        assert_dom "> discussion", 1
+        assert_dom "> discussion > comment", 0
+      end
     end
 
     def test_show_comments
@@ -174,16 +176,20 @@ module Api
       get changeset_show_path(changeset), :params => { :include_discussion => true }
       assert_response :success, "cannot get closed changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
-      assert_single_changeset changeset
-      assert_select "osm>changeset>discussion", 1
-      assert_select "osm>changeset>discussion>comment", 3
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@id", comment1.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@visible", "true"
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@id", comment2.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@visible", "true"
-      assert_select "osm>changeset>discussion>comment:nth-child(3)>@id", comment3.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(3)>@visible", "true"
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1 do
+        assert_single_changeset changeset do
+          assert_dom "> discussion", 1 do
+            assert_dom "> comment", 3 do |dom_comments|
+              assert_dom dom_comments[0], "> @id", comment1.id.to_s
+              assert_dom dom_comments[0], "> @visible", "true"
+              assert_dom dom_comments[1], "> @id", comment2.id.to_s
+              assert_dom dom_comments[1], "> @visible", "true"
+              assert_dom dom_comments[2], "> @id", comment3.id.to_s
+              assert_dom dom_comments[2], "> @visible", "true"
+            end
+          end
+        end
+      end
 
       # one hidden comment not included because not asked for
       comment2.update(:visible => false)
@@ -191,28 +197,34 @@ module Api
       get changeset_show_path(changeset), :params => { :include_discussion => true }
       assert_response :success, "cannot get closed changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
-      assert_single_changeset changeset
-      assert_select "osm>changeset>discussion", 1
-      assert_select "osm>changeset>discussion>comment", 2
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@id", comment1.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@visible", "true"
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@id", comment3.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@visible", "true"
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
+      assert_single_changeset changeset do
+        assert_dom "> discussion", 1 do
+          assert_dom "> comment", 2 do |dom_comments|
+            assert_dom dom_comments[0], "> @id", comment1.id.to_s
+            assert_dom dom_comments[0], "> @visible", "true"
+            assert_dom dom_comments[1], "> @id", comment3.id.to_s
+            assert_dom dom_comments[1], "> @visible", "true"
+          end
+        end
+      end
 
       # one hidden comment not included because no permissions
       get changeset_show_path(changeset), :params => { :include_discussion => true, :show_hidden_comments => true }
       assert_response :success, "cannot get closed changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
-      assert_single_changeset changeset
-      assert_select "osm>changeset>discussion", 1
-      assert_select "osm>changeset>discussion>comment", 2
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@id", comment1.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@visible", "true"
-      # maybe will show an empty comment element with visible=false in the future
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@id", comment3.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@visible", "true"
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
+      assert_single_changeset changeset do
+        assert_dom "> discussion", 1 do
+          assert_dom "> comment", 2 do |dom_comments|
+            assert_dom dom_comments[0], "> @id", comment1.id.to_s
+            assert_dom dom_comments[0], "> @visible", "true"
+            # maybe will show an empty comment element with visible=false in the future
+            assert_dom dom_comments[1], "> @id", comment3.id.to_s
+            assert_dom dom_comments[1], "> @visible", "true"
+          end
+        end
+      end
 
       # one hidden comment shown to moderators
       moderator_user = create(:moderator_user)
@@ -221,16 +233,19 @@ module Api
                                           :headers => auth_header
       assert_response :success, "cannot get closed changeset with comments"
 
-      assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
-      assert_single_changeset changeset
-      assert_select "osm>changeset>discussion", 1
-      assert_select "osm>changeset>discussion>comment", 3
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@id", comment1.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(1)>@visible", "true"
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@id", comment2.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(2)>@visible", "false"
-      assert_select "osm>changeset>discussion>comment:nth-child(3)>@id", comment3.id.to_s
-      assert_select "osm>changeset>discussion>comment:nth-child(3)>@visible", "true"
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
+      assert_single_changeset changeset do
+        assert_dom "> discussion", 1 do
+          assert_dom "> comment", 3 do |dom_comments|
+            assert_dom dom_comments[0], "> @id", comment1.id.to_s
+            assert_dom dom_comments[0], "> @visible", "true"
+            assert_dom dom_comments[1], "> @id", comment2.id.to_s
+            assert_dom dom_comments[1], "> @visible", "false"
+            assert_dom dom_comments[2], "> @id", comment3.id.to_s
+            assert_dom dom_comments[2], "> @visible", "true"
+          end
+        end
+      end
     end
 
     def test_show_json
@@ -2657,16 +2672,18 @@ module Api
 
     ##
     # check that the output consists of one specific changeset
-    def assert_single_changeset(changeset)
-      assert_select "osm>changeset", 1
-      assert_select "osm>changeset>@id", changeset.id.to_s
-      assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
-      if changeset.open?
-        assert_select "osm>changeset>@open", "true"
-        assert_select "osm>changeset>@closed_at", 0
-      else
-        assert_select "osm>changeset>@open", "false"
-        assert_select "osm>changeset>@closed_at", changeset.closed_at.xmlschema
+    def assert_single_changeset(changeset, &)
+      assert_dom "> changeset", 1 do
+        assert_dom "> @id", changeset.id.to_s
+        assert_dom "> @created_at", changeset.created_at.xmlschema
+        if changeset.open?
+          assert_dom "> @open", "true"
+          assert_dom "> @closed_at", 0
+        else
+          assert_dom "> @open", "false"
+          assert_dom "> @closed_at", changeset.closed_at.xmlschema
+        end
+        yield if block_given?
       end
     end