Skip to content

Commit 323abaf

Browse files
committed
Improve oai-pmh tests by parsing XML
1 parent c757a91 commit 323abaf

1 file changed

Lines changed: 37 additions & 20 deletions

File tree

test/controllers/oai_controller_test.rb

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ class OaiControllerTest < ActionDispatch::IntegrationTest
66
@user = users(:regular_user)
77
@material.user_id = @user.id
88
@material.save!
9+
@ns = {
10+
'oai' => 'http://www.openarchives.org/OAI/2.0/',
11+
'dc' => 'http://purl.org/dc/elements/1.1/',
12+
'sdo' => 'http://schema.org/',
13+
'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
14+
}
915
end
1016

1117
test 'should get endpoint' do
@@ -16,52 +22,63 @@ class OaiControllerTest < ActionDispatch::IntegrationTest
1622

1723
test 'OAI Identify verb returns expected repository info' do
1824
get '/oai-pmh', params: { verb: 'Identify' }
19-
2025
assert_response :success
2126

22-
assert_includes @response.body, '<protocolVersion>2.0</protocolVersion>'
27+
parsed = Nokogiri::XML(@response.body)
28+
assert_equal '2.0', parsed.at_xpath('//oai:protocolVersion', @ns).text
2329
end
2430

25-
test 'OAI ListMetadataFormates verb returns expected repository info' do
31+
test 'OAI ListMetadataFormats verb returns expected repository info' do
2632
get '/oai-pmh', params: { verb: 'ListMetadataFormats' }
27-
2833
assert_response :success
2934

30-
assert_includes @response.body, 'oai_dc'
31-
assert_includes @response.body, 'rdf'
35+
parsed = Nokogiri::XML(@response.body)
36+
prefixes = parsed.xpath('//oai:ListMetadataFormats/oai:metadataFormat/oai:metadataPrefix', @ns).map(&:text)
37+
assert_includes prefixes, 'oai_dc'
38+
assert_includes prefixes, 'rdf'
3239
end
3340

3441
test 'OAI ListRecords returns material in oai_dc format' do
3542
get '/oai-pmh', params: { verb: 'ListRecords', metadataPrefix: 'oai_dc' }
36-
3743
assert_response :success
38-
body = @response.body
3944

40-
assert_includes body, @material.title
41-
@material.keywords.each { |keyword| assert_includes body, keyword }
42-
assert_includes body, @material.doi
45+
parsed = Nokogiri::XML(@response.body)
46+
titles = parsed.xpath('//dc:title', @ns).map(&:text)
47+
assert_includes titles, @material.title
48+
49+
subjects = parsed.xpath('//dc:subject', @ns).map(&:text)
50+
@material.keywords.each { |kw| assert_includes subjects, kw }
51+
52+
identifiers = parsed.xpath('//dc:identifier', @ns).map(&:text)
53+
assert_includes identifiers, @material.doi
4354
end
4455

4556
test 'OAI ListRecords returns material in rdf format' do
4657
get '/oai-pmh', params: { verb: 'ListRecords', metadataPrefix: 'rdf' }
47-
4858
assert_response :success
49-
body = @response.body
5059

51-
assert_includes body, '<sdo:name>Training Material Example</sdo:name>'
52-
assert_includes body, '<sdo:keywords>good</sdo:keywords>'
60+
parsed = Nokogiri::XML(@response.body)
61+
62+
names = parsed.xpath('//sdo:LearningResource/sdo:name', @ns).map(&:text)
63+
assert_includes names, 'Training Material Example'
64+
65+
keywords = parsed.xpath('//sdo:LearningResource/sdo:keywords', @ns).map(&:text)
66+
assert_includes keywords, 'good'
5367
end
5468

5569
test 'OAI ListRecords returns only visible materials' do
5670
get '/oai-pmh', params: { verb: 'ListRecords', metadataPrefix: 'rdf' }
5771
assert_response :success
58-
assert_includes @response.body, '<sdo:name>Training Material Example</sdo:name>'
5972

60-
@material.visible = false
61-
@material.save!
73+
parsed = Nokogiri::XML(@response.body)
6274

63-
get '/oai-pmh', params: { verb: 'ListRecords', metadataPrefix: 'oai_dc' }
75+
assert_includes parsed.xpath('//sdo:name', @ns).map(&:text), 'Training Material Example'
76+
77+
@material.update!(visible: false)
78+
79+
get '/oai-pmh', params: { verb: 'ListRecords', metadataPrefix: 'rdf' }
6480
assert_response :success
65-
assert_not_includes @response.body, '<sdo:name>Training Material Example</sdo:name>'
81+
parsed = Nokogiri::XML(@response.body)
82+
refute_includes parsed.xpath('//sdo:name', @ns).map(&:text), 'Training Material Example'
6683
end
6784
end

0 commit comments

Comments
 (0)