Skip to content

Commit 7ee8770

Browse files
committed
refactor: migrate all test files from REXML to Nokogiri
Replace REXML::Document, REXML::Attribute, and REXML::Element with Nokogiri equivalents across 9 test files (75 usages total). Production code still uses REXML — this commit allows the test suite to validate the Nokogiri API translations against the existing REXML-based production behavior before production code is migrated.
1 parent ef18a52 commit 7ee8770

File tree

9 files changed

+196
-188
lines changed

9 files changed

+196
-188
lines changed

src/api/test/functional/channel_maintenance_test.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ def test_large_channel_test
132132

133133
get "/request/#{id1}"
134134
assert_response :success
135-
data = REXML::Document.new(@response.body)
136-
incident_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
135+
data = Nokogiri::XML(@response.body)
136+
incident_project = data.at_xpath('/request/action/target')['project'].to_s
137137
assert_not_equal incident_project, 'My:Maintenance'
138138

139139
# test build and publish flags
@@ -243,8 +243,8 @@ def test_large_channel_test
243243

244244
get "/request/#{id2}"
245245
assert_response :success
246-
data = REXML::Document.new(@response.body)
247-
maintenance_not_new_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
246+
data = Nokogiri::XML(@response.body)
247+
maintenance_not_new_project = data.at_xpath('/request/action/target')['project'].to_s
248248
assert_equal incident_project, maintenance_not_new_project
249249

250250
# try to do it again
@@ -260,8 +260,8 @@ def test_large_channel_test
260260

261261
get "/request/#{id2}"
262262
assert_response :success
263-
data = REXML::Document.new(@response.body)
264-
maintenance_not_new_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
263+
data = Nokogiri::XML(@response.body)
264+
maintenance_not_new_project = data.at_xpath('/request/action/target')['project'].to_s
265265
assert_equal incident_project, maintenance_not_new_project
266266

267267
# validate releasename
@@ -374,8 +374,8 @@ def test_large_channel_test
374374
assert_response :success
375375
get "/request/#{id3}"
376376
assert_response :success
377-
data = REXML::Document.new(@response.body)
378-
maintenance_yet_another_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
377+
data = Nokogiri::XML(@response.body)
378+
maintenance_yet_another_project = data.at_xpath('/request/action/target')['project'].to_s
379379
# no cleanup
380380
get '/source/home:tom:branches:OBS_Maintained:pack2/pack2.linked.BaseDistro2.0_LinkedUpdateProject'
381381
assert_response :success
@@ -893,8 +893,8 @@ def test_large_channel_test
893893
assert_response :success
894894
get "/request/#{reqid2}"
895895
assert_response :success
896-
data = REXML::Document.new(@response.body)
897-
ontopof_update_incident_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
896+
data = Nokogiri::XML(@response.body)
897+
ontopof_update_incident_project = data.at_xpath('/request/action/target')['project'].to_s
898898
get "/source/#{ontopof_update_incident_project}"
899899
assert_response :success
900900
assert_xml_tag(tag: 'entry', attributes: { name: 'pack2.BaseDistro2.0_LinkedUpdateProject' })

src/api/test/functional/kgraft_maintenance_test.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,18 @@ def test_kgraft_update_setup
5656
get '/source/BaseDistro2.0/_meta'
5757
assert_response :success
5858
assert_no_xml_tag tag: 'lock' # or our fixtures have changed
59-
doc = REXML::Document.new(@response.body)
60-
doc.elements['/project'].add_element 'lock'
61-
doc.elements['/project/lock'].add_element 'enable'
62-
put '/source/BaseDistro2.0/_meta', params: doc.to_s
59+
doc = Nokogiri::XML(@response.body)
60+
doc.at_xpath('/project').add_child(Nokogiri::XML::Node.new('lock', doc))
61+
doc.at_xpath('/project/lock').add_child(Nokogiri::XML::Node.new('enable', doc))
62+
put '/source/BaseDistro2.0/_meta', params: doc.root.to_xml
6363
assert_response :success
6464

6565
# create maintenance incident for first kernel update
6666
post '/source', params: { cmd: 'createmaintenanceincident' }
6767
assert_response :success
6868
assert_xml_tag(tag: 'data', attributes: { name: 'targetproject' })
69-
data = REXML::Document.new(@response.body)
70-
kernel_incident_project = data.elements['/status/data'].text
69+
data = Nokogiri::XML(@response.body)
70+
kernel_incident_project = data.at_xpath('/status/data')&.text
7171
kernel_incident_id = kernel_incident_project.gsub(/^My:Maintenance:/, '')
7272
# submit packages via mbranch
7373
post '/source', params: { cmd: 'branch', package: 'pack2', target_project: kernel_incident_project, add_repositories: 1 }
@@ -170,8 +170,8 @@ def test_kgraft_update_setup
170170
assert_response :success
171171
get "/request/#{id1}"
172172
assert_response :success
173-
data = REXML::Document.new(@response.body)
174-
incident_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
173+
data = Nokogiri::XML(@response.body)
174+
incident_project = data.at_xpath('/request/action/target')['project'].to_s
175175
incident_id = incident_project.gsub(/^My:Maintenance:/, '')
176176

177177
# validate sources
@@ -282,10 +282,10 @@ def test_kgraft_update_setup
282282
get '/source/' + kernel_incident_project + '/_meta'
283283
assert_response :success
284284
assert_no_xml_tag tag: 'lock' # or our fixtures have changed
285-
doc = REXML::Document.new(@response.body)
286-
doc.elements['/project'].add_element 'lock'
287-
doc.elements['/project/lock'].add_element 'enable'
288-
put '/source/' + kernel_incident_project + '/_meta', params: doc.to_s
285+
doc = Nokogiri::XML(@response.body)
286+
doc.at_xpath('/project').add_child(Nokogiri::XML::Node.new('lock', doc))
287+
doc.at_xpath('/project/lock').add_child(Nokogiri::XML::Node.new('enable', doc))
288+
put '/source/' + kernel_incident_project + '/_meta', params: doc.root.to_xml
289289
assert_response :success
290290

291291
# collect the job results

src/api/test/functional/maintenance_test.rb

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ def test_maintenance_request_from_foreign_and_remote_project
249249

250250
get "/request/#{id1}"
251251
assert_response :success
252-
data = REXML::Document.new(@response.body)
253-
incident_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
252+
data = Nokogiri::XML(@response.body)
253+
incident_project = data.at_xpath('/request/action/target')['project'].to_s
254254

255255
get "/source/#{incident_project}/kdelibs.BaseDistro2.0_LinkedUpdateProject"
256256
assert_response :success
@@ -322,8 +322,8 @@ def test_maintenance_request_from_foreign_and_remote_project
322322

323323
get "/request/#{id2}"
324324
assert_response :success
325-
data = REXML::Document.new(@response.body)
326-
incident_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
325+
data = Nokogiri::XML(@response.body)
326+
incident_project = data.at_xpath('/request/action/target')['project'].to_s
327327

328328
get "/source/#{incident_project}/kdelibs.BaseDistro2.0_LinkedUpdateProject"
329329
assert_response :success
@@ -460,8 +460,8 @@ def test_instantiate_new_package_with_local_link_in_service_pack
460460
post '/source', params: { cmd: 'createmaintenanceincident', noaccess: 1 }
461461
assert_response :success
462462
assert_xml_tag(tag: 'data', attributes: { name: 'targetproject' })
463-
data = REXML::Document.new(@response.body)
464-
incident_project = data.elements['/status/data'].text
463+
data = Nokogiri::XML(@response.body)
464+
incident_project = data.at_xpath('/status/data')&.text
465465
assert_equal 'My:Maintenance:100', incident_project
466466

467467
get '/source/ServicePack:Update/pack2/_meta'
@@ -757,8 +757,8 @@ def test_mbranch_and_maintenance_entire_project_request
757757

758758
get "/request/#{id}"
759759
assert_response :success
760-
data = REXML::Document.new(@response.body)
761-
incident_project = data.elements['/request/action/target'].attributes.get_attribute('project').to_s
760+
data = Nokogiri::XML(@response.body)
761+
incident_project = data.at_xpath('/request/action/target')['project'].to_s
762762
assert_not_equal incident_project, 'My:Maintenance'
763763

764764
# validate cleanup
@@ -842,8 +842,8 @@ def test_create_maintenance_incident
842842
post '/source/Temp:Maintenance', params: { cmd: 'createmaintenanceincident' }
843843
assert_response :success
844844
assert_xml_tag(tag: 'data', attributes: { name: 'targetproject' })
845-
data = REXML::Document.new(@response.body)
846-
incident_project = data.elements['/status/data'].text
845+
data = Nokogiri::XML(@response.body)
846+
incident_project = data.at_xpath('/status/data')&.text
847847
# incident_id=incident_project.gsub( /^Temp:Maintenance:/, "" )
848848
get "/source/#{incident_project}/_meta"
849849
assert_xml_tag(tag: 'project', attributes: { kind: 'maintenance_incident' })
@@ -856,8 +856,8 @@ def test_create_maintenance_incident
856856
post '/source/Temp:Maintenance?cmd=createmaintenanceincident&noaccess=1'
857857
assert_response :success
858858
assert_xml_tag(tag: 'data', attributes: { name: 'targetproject' })
859-
data = REXML::Document.new(@response.body)
860-
incident_project2 = data.elements['/status/data'].text
859+
data = Nokogiri::XML(@response.body)
860+
incident_project2 = data.at_xpath('/status/data')&.text
861861
# incident_id2=incident_project2.gsub( /^Temp:Maintenance:/, "" )
862862
get "/source/#{incident_project2}/_meta"
863863
assert_xml_tag(parent: { tag: 'build' }, tag: 'disable', content: nil)
@@ -928,9 +928,9 @@ def test_create_maintenance_project_and_release_packages
928928
login_king
929929
get '/source/My:Maintenance/_meta'
930930
assert_response :success
931-
maintenance_project_meta = REXML::Document.new(@response.body)
932-
maintenance_project_meta.elements['/project'].attributes['kind'] = 'maintenance'
933-
put '/source/My:Maintenance/_meta', params: maintenance_project_meta.to_s
931+
maintenance_project_meta = Nokogiri::XML(@response.body)
932+
maintenance_project_meta.at_xpath('/project')['kind'] = 'maintenance'
933+
put '/source/My:Maintenance/_meta', params: maintenance_project_meta.root.to_xml
934934
assert_response :success
935935

936936
prepare_request_with_user('maintenance_coord', 'buildservice')
@@ -959,8 +959,8 @@ def test_create_maintenance_project_and_release_packages
959959
post '/source', params: { cmd: 'createmaintenanceincident', noaccess: 1 }
960960
assert_response :success
961961
assert_xml_tag(tag: 'data', attributes: { name: 'targetproject' })
962-
data = REXML::Document.new(@response.body)
963-
incident_project = data.elements['/status/data'].text
962+
data = Nokogiri::XML(@response.body)
963+
incident_project = data.at_xpath('/status/data')&.text
964964
incident_id = incident_project.gsub(/^My:Maintenance:/, '')
965965
get "/source/#{incident_project}/_meta"
966966
assert_response :success
@@ -1251,9 +1251,9 @@ def test_create_maintenance_project_and_release_packages
12511251
# let's say the maintenance person wants to publish it now
12521252
get "/source/#{incident_project}/_meta"
12531253
assert_response :success
1254-
maintenance_project_meta = REXML::Document.new(@response.body)
1255-
maintenance_project_meta.elements['/project'].delete_element 'publish'
1256-
put "/source/#{incident_project}/_meta", params: maintenance_project_meta.to_s
1254+
maintenance_project_meta = Nokogiri::XML(@response.body)
1255+
maintenance_project_meta.at_xpath('/project/publish')&.remove
1256+
put "/source/#{incident_project}/_meta", params: maintenance_project_meta.root.to_xml
12571257
assert_response :success
12581258

12591259
# mess up patchinfo and try to create release request
@@ -1587,9 +1587,9 @@ def test_create_maintenance_project_and_release_packages
15871587
assert_xml_tag tag: 'mtime'
15881588
hashed = node = nil
15891589
IO.popen("gunzip -cd #{ENV.fetch('OBS_BACKEND_TEMP', nil)}/data/repos/BaseDistro2.0:/LinkedUpdateProject/BaseDistro2LinkedUpdateProject_repo/repodata/*-updateinfo.xml.gz") do |io|
1590-
node = REXML::Document.new(io.read)
1590+
node = Nokogiri::XML(io.read)
15911591
end
1592-
assert_equal "My-oldname-#{Time.now.year}-1", node.elements['/updates/update/id'].first.to_s
1592+
assert_equal "My-oldname-#{Time.now.year}-1", node.at_xpath('/updates/update/id')&.text
15931593
# verify meta data created by createrepo
15941594
IO.popen("gunzip -cd #{ENV.fetch('OBS_BACKEND_TEMP', nil)}/data/repos/BaseDistro2.0:/LinkedUpdateProject/BaseDistro2LinkedUpdateProject_repo/repodata/*-primary.xml.gz") do |io|
15951595
hashed = Xmlhash.parse(io.read)
@@ -1966,9 +1966,9 @@ def test_create_invalid_release_request
19661966
# remove release target
19671967
get '/source/home:tom:branches:BaseDistro:Update/_meta'
19681968
assert_response :success
1969-
pi = REXML::Document.new(@response.body)
1970-
pi.elements['//repository'].delete_element 'releasetarget'
1971-
put '/source/home:tom:branches:BaseDistro:Update/_meta', params: pi.to_s
1969+
pi = Nokogiri::XML(@response.body)
1970+
pi.at_xpath('//repository/releasetarget')&.remove
1971+
put '/source/home:tom:branches:BaseDistro:Update/_meta', params: pi.root.to_xml
19721972
assert_response :success
19731973

19741974
# Run without server side expansion
@@ -2003,11 +2003,12 @@ def test_create_invalid_release_request
20032003
login_tom
20042004
get '/source/home:tom:branches:BaseDistro:Update/_meta'
20052005
assert_response :success
2006-
meta = REXML::Document.new(@response.body)
2007-
meta.elements['//repository'].add_element 'releasetarget'
2008-
meta.elements['//releasetarget'].add_attribute(REXML::Attribute.new('project', 'BaseDistro:Update'))
2009-
meta.elements['//releasetarget'].add_attribute(REXML::Attribute.new('repository', 'BaseDistroUpdateProject_repo'))
2010-
put '/source/home:tom:branches:BaseDistro:Update/_meta', params: meta.to_s
2006+
meta = Nokogiri::XML(@response.body)
2007+
releasetarget = Nokogiri::XML::Node.new('releasetarget', meta)
2008+
releasetarget['project'] = 'BaseDistro:Update'
2009+
releasetarget['repository'] = 'BaseDistroUpdateProject_repo'
2010+
meta.at_xpath('//repository').add_child(releasetarget)
2011+
put '/source/home:tom:branches:BaseDistro:Update/_meta', params: meta.root.to_xml
20112012
assert_response :success
20122013

20132014
# retry
@@ -2044,14 +2045,14 @@ def test_create_invalid_release_request
20442045
login_tom
20452046
get '/source/home:tom:branches:BaseDistro:Update/patchinfo/_patchinfo'
20462047
assert_response :success
2047-
pi = REXML::Document.new(@response.body)
2048-
pi.elements['//summary'].text = 'My Summary'
2049-
put '/source/home:tom:branches:BaseDistro:Update/patchinfo/_patchinfo', params: pi.to_s
2048+
pi = Nokogiri::XML(@response.body)
2049+
pi.at_xpath('//summary').content = 'My Summary'
2050+
put '/source/home:tom:branches:BaseDistro:Update/patchinfo/_patchinfo', params: pi.root.to_xml
20502051
assert_response :success
20512052

20522053
# remove architecture
2053-
meta.elements['//repository'].delete_element 'arch'
2054-
put '/source/home:tom:branches:BaseDistro:Update/_meta', params: meta.to_s
2054+
meta.at_xpath('//repository/arch')&.remove
2055+
put '/source/home:tom:branches:BaseDistro:Update/_meta', params: meta.root.to_xml
20552056
assert_response :success
20562057

20572058
rq = '<request>

src/api/test/functional/person_controller_test.rb

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -215,16 +215,17 @@ def test_update_user_info
215215
# change the xml data set that came as response body
216216
new_name = 'Thommy Cool'
217217
userinfo_xml = @response.body
218-
doc = REXML::Document.new(userinfo_xml)
219-
doc.elements['//realname'].text = new_name
220-
doc.elements['//watchlist'].add_element 'project'
221-
doc.elements['//project'].add_attribute(REXML::Attribute.new('name', 'home:tom'))
222-
r = REXML::Element.new('globalrole')
223-
r.text = 'Admin'
224-
doc.elements['/person'].insert_after(doc.elements['//state'], r)
218+
doc = Nokogiri::XML(userinfo_xml)
219+
doc.at_xpath('//realname').content = new_name
220+
project_node = Nokogiri::XML::Node.new('project', doc)
221+
project_node['name'] = 'home:tom'
222+
doc.at_xpath('//watchlist').add_child(project_node)
223+
r = Nokogiri::XML::Node.new('globalrole', doc)
224+
r.content = 'Admin'
225+
doc.at_xpath('//state').add_next_sibling(r)
225226
# Write changed data back and validate result
226227
prepare_request_valid_user
227-
put '/person/tom', params: doc.to_s
228+
put '/person/tom', params: doc.root.to_xml
228229
assert_response :success
229230
get '/person/tom'
230231
assert_response :success

src/api/test/functional/request_controller_test.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,12 +1403,13 @@ def test_release_package_via_request
14031403
get '/source/home:Iggy/_meta'
14041404
assert_response :success
14051405
orig_project_meta = @response.body
1406-
doc = REXML::Document.new(@response.body)
1407-
rt = doc.elements['/project/repository'].add_element 'releasetarget'
1408-
rt.add_attribute(REXML::Attribute.new('project', 'home:adrian:RT'))
1409-
rt.add_attribute(REXML::Attribute.new('repository', 'rt'))
1410-
rt.add_attribute(REXML::Attribute.new('trigger', 'manual'))
1411-
put '/source/home:Iggy/_meta', params: doc.to_s
1406+
doc = Nokogiri::XML(@response.body)
1407+
rt = Nokogiri::XML::Node.new('releasetarget', doc)
1408+
rt['project'] = 'home:adrian:RT'
1409+
rt['repository'] = 'rt'
1410+
rt['trigger'] = 'manual'
1411+
doc.at_xpath('/project/repository').add_child(rt)
1412+
put '/source/home:Iggy/_meta', params: doc.root.to_xml
14121413
assert_response :success
14131414

14141415
# create request

0 commit comments

Comments
 (0)