@@ -78,6 +78,7 @@ class BioschemasTest < ActionDispatch::IntegrationTest
7878
7979 test 'Course/CourseInstance & Event bioschemas on show page for course event' do
8080 event = events ( :course_event )
81+ event . external_resources . create! ( { title : 'Cool website' , url : 'https://external-resource.pizza' } )
8182 url = event_url ( event . id )
8283
8384 get url
@@ -116,6 +117,9 @@ class BioschemasTest < ActionDispatch::IntegrationTest
116117 assert_equal [ 'Learn lots of stuff!' ] , course_props [ 'description' ]
117118 assert_equal [ 'http://example.com/cool-course-summer' ] , course_props [ 'url' ]
118119 assert_equal [ 'Ruby' , 'Javascript' ] . sort , course_props [ 'keywords' ] . sort
120+ assert_equal [ 'Sleep' , 'Eat' , 'Breathe' ] . sort , course_props [ 'coursePrerequisites' ] . sort , 'Should split the markdown into an array'
121+ assert_equal [ 'Learn stuff' , 'Get a job' , 'Get paid' ] . sort , course_props [ 'teaches' ] . sort , 'Should split the markdown into an array'
122+ assert_equal [ 'de' ] . sort , course_props [ 'inLanguage' ]
119123
120124 assert_equal [ '2015-08-23 10:16:33 UTC' ] , course_instance_props [ 'startDate' ]
121125 assert_equal [ '2015-08-24 18:07:46 UTC' ] , course_instance_props [ 'endDate' ]
@@ -183,6 +187,59 @@ class BioschemasTest < ActionDispatch::IntegrationTest
183187 results = graph . query ( q )
184188 assert_equal 1 , results . count
185189 assert_equal 'CourseCo' , results . first . organizer
190+
191+ # External resources
192+ q = RDF ::Query . new do
193+ pattern RDF ::Query ::Pattern . new ( course_uri , RDF ::Vocab ::SCHEMA . mentions , :mentions )
194+ pattern RDF ::Query ::Pattern . new ( :mentions , RDF ::Vocab ::SCHEMA . name , :name )
195+ pattern RDF ::Query ::Pattern . new ( :mentions , RDF ::Vocab ::SCHEMA . url , :url )
196+ end
197+ results = graph . query ( q )
198+ assert_equal 1 , results . count
199+ assert_equal 'Cool website' , results . first . name
200+ assert_equal 'https://external-resource.pizza' , results . first . url
201+ end
202+
203+ test 'handles non-list markdown for prereqs on course event' do
204+ event = events ( :course_event )
205+ event . learning_objectives = "The meaning of life\n * item1 \n * item2\n "
206+ event . prerequisites = "** Get out of bed **"
207+ event . save!
208+ url = event_url ( event . slug )
209+
210+ get url
211+
212+ reader = RDF ::Reader . for ( :rdfa ) . new ( response . body , base_uri : url , logger : false )
213+ graph = RDF ::Graph . new
214+ graph . insert_statements ( reader )
215+
216+ results = graph . query ( [ :subject , RDF . type , RDF ::Vocab ::SCHEMA . Course ] )
217+ course_uri = results . first . subject
218+ assert_equal 1 , results . count
219+ assert_equal url , course_uri
220+
221+ results = graph . query ( [ course_uri , RDF ::Vocab ::SCHEMA . hasCourseInstance , :course_instance ] )
222+ assert_equal 1 , results . count
223+
224+ results = graph . query ( [ results . first . object , RDF . type , RDF ::Vocab ::SCHEMA . CourseInstance ] )
225+ course_instance_uri = results . first . subject
226+ assert_equal 1 , results . count
227+
228+ course_props = { }
229+ graph . query ( [ course_uri , :p , :o ] ) . each do |result |
230+ key = result . predicate . to_s . split ( '/' ) . last
231+ course_props [ key ] ||= [ ]
232+ course_props [ key ] << result . object . to_s
233+ end
234+ course_instance_props = { }
235+ graph . query ( [ course_instance_uri , :p , :o ] ) . each do |result |
236+ key = result . predicate . to_s . split ( '/' ) . last
237+ course_instance_props [ key ] ||= [ ]
238+ course_instance_props [ key ] << result . object . to_s
239+ end
240+
241+ assert_equal [ '** Get out of bed **' ] , course_props [ 'coursePrerequisites' ]
242+ assert_equal [ "The meaning of life\n * item1 \n * item2\n " ] , course_props [ 'teaches' ]
186243 end
187244
188245 test 'Bioschemas on event index page' do
@@ -207,7 +264,10 @@ class BioschemasTest < ActionDispatch::IntegrationTest
207264
208265 test 'LearningResource bioschemas on show page for material' do
209266 material = materials ( :material_with_optionals )
210- url = material_url ( material . id )
267+ material . external_resources . create! ( { title : 'Cool website' , url : 'https://external-resource.pizza' } )
268+ material . node_names = [ 'Westeros' ]
269+ material . save!
270+ url = material_url ( material . slug )
211271
212272 get url
213273
@@ -233,6 +293,15 @@ class BioschemasTest < ActionDispatch::IntegrationTest
233293 assert_equal [ '2021-07-12' ] , props [ 'dateCreated' ]
234294 assert_equal [ '2021-07-13' ] , props [ 'dateModified' ]
235295 assert_equal [ 'intermediate' ] , props [ 'educationalLevel' ]
296+ assert_equal [ 'Quiz' , 'Presentation' ] . sort , props [ 'learningResourceType' ] . sort
297+ assert_equal [ 'http://dx.doi.ac.uk/2q3093032' ] , props [ 'identifier' ]
298+ assert_equal [ '1.0.3' ] , props [ 'version' ]
299+ assert_equal [ '2021-07-12' ] , props [ 'dateCreated' ]
300+ assert_equal [ '2021-07-13' ] , props [ 'dateModified' ]
301+ assert_equal [ '2021-07-14' ] , props [ 'datePublished' ]
302+ assert_equal [ 'development' ] , props [ 'creativeWorkStatus' ]
303+ assert_equal [ 'None' , 'Nothing at all' ] . sort , props [ 'competencyRequired' ] . sort , 'Should split the markdown into an array'
304+ assert_equal [ ' - Understand the new materials model' ] . sort , props [ 'teaches' ] . sort , 'Should not split the markdown into an array'
236305
237306 # Audience
238307 q = RDF ::Query . new do
@@ -276,6 +345,29 @@ class BioschemasTest < ActionDispatch::IntegrationTest
276345 assert_equal 1 , results . count
277346 authors = results . map ( &:contributor )
278347 assert_includes authors , 'Dr Dre'
348+
349+ # Provider
350+ q = RDF ::Query . new do
351+ pattern RDF ::Query ::Pattern . new ( material_uri , RDF ::Vocab ::SCHEMA . provider , :provider_info )
352+ pattern RDF ::Query ::Pattern . new ( :provider_info , RDF ::Vocab ::SCHEMA . name , :name )
353+ pattern RDF ::Query ::Pattern . new ( :provider_info , RDF ::Vocab ::SCHEMA . url , :url )
354+ end
355+ results = graph . query ( q )
356+ providers = results . map { |r | [ r . name , r . url ] }
357+ assert_equal 2 , providers . count
358+ assert_includes providers , [ 'ELIXIR Westeros' , 'http://example.com' ]
359+ assert_includes providers , [ 'Goblet' , 'http://mygoblet.org' ]
360+
361+ # External resources
362+ q = RDF ::Query . new do
363+ pattern RDF ::Query ::Pattern . new ( material_uri , RDF ::Vocab ::SCHEMA . mentions , :mentions )
364+ pattern RDF ::Query ::Pattern . new ( :mentions , RDF ::Vocab ::SCHEMA . name , :name )
365+ pattern RDF ::Query ::Pattern . new ( :mentions , RDF ::Vocab ::SCHEMA . url , :url )
366+ end
367+ results = graph . query ( q )
368+ assert_equal 1 , results . count
369+ assert_equal 'Cool website' , results . first . name
370+ assert_equal 'https://external-resource.pizza' , results . first . url
279371 end
280372
281373 test 'Bioschemas on material index page' do
0 commit comments