@@ -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
6784end
0 commit comments