Skip to content

Commit

Permalink
Refactor api changeset discussion tests
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonKhorev committed Feb 3, 2025
1 parent 55c1033 commit 1ab50d4
Showing 1 changed file with 71 additions and 54 deletions.
125 changes: 71 additions & 54 deletions test/controllers/api/changesets_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -153,17 +153,19 @@ def test_show
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
Expand All @@ -174,45 +176,55 @@ def test_show_comments
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)

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)
Expand All @@ -221,16 +233,19 @@ def test_show_comments
: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
Expand Down Expand Up @@ -2657,16 +2672,18 @@ def test_unsubscribe_fail

##
# 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, &block)
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

Expand Down

0 comments on commit 1ab50d4

Please sign in to comment.