Skip to content

Commit

Permalink
Merge pull request #2298 from LD4P/refactor_template_validation
Browse files Browse the repository at this point in the history
Refactors resource template validation.
  • Loading branch information
jermnelson committed Jul 29, 2020
2 parents 538abe2 + 93fcead commit 5211ed3
Show file tree
Hide file tree
Showing 25 changed files with 1,151 additions and 456 deletions.
71 changes: 0 additions & 71 deletions __tests__/ResourceTemplateValidator.test.js

This file was deleted.

93 changes: 93 additions & 0 deletions __tests__/TemplatesBuilder.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
// Copyright 2020 Stanford University see LICENSE for license

import TemplatesBuilder from 'TemplatesBuilder'

import { getFixtureResourceTemplate } from 'fixtureLoaderHelper'


describe('TemplatesBuilder', () => {
it('builds subject template and property templates', async () => {
const uberTemplateResponse = await getFixtureResourceTemplate('resourceTemplate:testing:uber1')
const uberTemplate = uberTemplateResponse.response.body

const subjectTemplate = new TemplatesBuilder(uberTemplate).build()
expect(subjectTemplate.id).toBe('resourceTemplate:testing:uber1')
expect(subjectTemplate.key).toBe('resourceTemplate:testing:uber1')
expect(subjectTemplate.class).toBe('http://id.loc.gov/ontologies/bibframe/Uber1')
expect(subjectTemplate.label).toBe('Uber template1')
expect(subjectTemplate.author).toBe('Justin Littman')
expect(subjectTemplate.date).toBe('2020-07-27')
expect(subjectTemplate.remark).toBe('Template for testing purposes.')
expect(subjectTemplate.propertyTemplateKeys).toHaveLength(17)
expect(subjectTemplate.propertyTemplates).toHaveLength(17)

const propertyTemplate = subjectTemplate.propertyTemplates[0]
expect(propertyTemplate.key).toBe('resourceTemplate:testing:uber1 > http://id.loc.gov/ontologies/bibframe/uber/template1/property1')
expect(propertyTemplate.uri).toBe('http://id.loc.gov/ontologies/bibframe/uber/template1/property1')
expect(propertyTemplate.type).toBe('resource')
expect(propertyTemplate.label).toBe('Uber template1, property1')
expect(propertyTemplate.subjectTemplateKey).toBe('resourceTemplate:testing:uber1')
expect(propertyTemplate.remark).toBe('Multiple nested, repeatable resource templates.')
expect(propertyTemplate.repeatable).toBeTruthy()
expect(propertyTemplate.required).toBeFalsy()
expect(propertyTemplate.defaults).toHaveLength(0)
expect(propertyTemplate.valueSubjectTemplateKeys).toHaveLength(2)
expect(propertyTemplate.component).toBe('NestedResource')

const propertyTemplate2 = subjectTemplate.propertyTemplates[1]
expect(propertyTemplate2.valueSubjectTemplateKeys).toBeNull()

const propertyTemplate7 = subjectTemplate.propertyTemplates[6]
expect(propertyTemplate7.type).toBe('literal')
expect(propertyTemplate7.defaults).toHaveLength(2)
expect(propertyTemplate7.defaults[0]).toEqual({ literal: 'Default literal1', lang: null })
expect(propertyTemplate7.component).toEqual('InputLiteral')

const propertyTemplate8 = subjectTemplate.propertyTemplates[7]
expect(propertyTemplate8.type).toBe('uri')
expect(propertyTemplate8.defaults).toHaveLength(2)
expect(propertyTemplate8.defaults[0]).toEqual({ uri: 'http://sinopia.io/defaultURI1', label: 'Default UR1' })
expect(propertyTemplate8.defaults[1]).toEqual({ uri: 'http://sinopia.io/defaultURI2' })
expect(propertyTemplate8.component).toEqual('InputURI')

const propertyTemplate9 = subjectTemplate.propertyTemplates[8]
expect(propertyTemplate9.remark).toBeNull()
expect(propertyTemplate9.remarkUrl.toString()).toEqual('http://access.rdatoolkit.org/2.13.html')

const propertyTemplate10 = subjectTemplate.propertyTemplates[9]
expect(propertyTemplate10.type).toBe('uri')
expect(propertyTemplate10.component).toEqual('InputListLOC')
expect(propertyTemplate10.authorities).toHaveLength(1)
expect(propertyTemplate10.authorities[0]).toEqual({
authority: undefined,
label: 'type of recording',
nonldLookup: false,
subauthority: undefined,
uri: 'https://id.loc.gov/vocabulary/mrectype',
})

const propertyTemplate13 = subjectTemplate.propertyTemplates[12]
expect(propertyTemplate13.type).toBe('uri')
expect(propertyTemplate13.component).toEqual('InputLookupQA')
expect(propertyTemplate13.authorities).toHaveLength(1)
expect(propertyTemplate13.authorities[0]).toEqual({
authority: 'agrovoc_ld4l_cache',
label: 'AGROVOC (QA)',
nonldLookup: false,
subauthority: '',
uri: 'urn:ld4p:qa:agrovoc',
})

const propertyTemplate16 = subjectTemplate.propertyTemplates[15]
expect(propertyTemplate16.type).toBe('uri')
expect(propertyTemplate16.component).toEqual('InputLookupSinopia')
expect(propertyTemplate16.authorities).toHaveLength(1)
expect(propertyTemplate16.authorities[0]).toEqual({
authority: undefined,
label: 'Sinopia BIBFRAME instance resources',
nonldLookup: false,
subauthority: undefined,
uri: 'urn:ld4p:sinopia:bibframe:instance',
})
})
})
165 changes: 165 additions & 0 deletions __tests__/__template_fixtures__/uber_template1.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"resourceLabel": "Uber template1",
"resourceURI": "http://id.loc.gov/ontologies/bibframe/Uber1",
"remark": "Template for testing purposes.",
"author": "Justin Littman",
"date": "2020-07-27",
"propertyTemplates": [
{
"propertyLabel": "Uber template1, property1",
Expand Down Expand Up @@ -79,6 +81,169 @@
"repeatable": "true",
"type": "resource",
"remark": "A repeatable URI."
},
{
"propertyLabel": "Uber template1, property7",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property7",
"resourceTemplates": [],
"mandatory": "false",
"repeatable": "true",
"type": "literal",
"remark": "A repeatable literal with defaults.",
"valueConstraint": {
"defaults": [
{
"defaultLiteral": "Default literal1"
},
{
"defaultLiteral": "Default literal2"
}
]
}
},
{
"propertyLabel": "Uber template1, property8",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property8",
"resourceTemplates": [],
"mandatory": "false",
"repeatable": "true",
"type": "resource",
"remark": "A repeatable URI with defaults.",
"valueConstraint": {
"defaults": [
{
"defaultLiteral": "Default UR1",
"defaultURI": "http://sinopia.io/defaultURI1"

},
{
"defaultURI": "http://sinopia.io/defaultURI2"
}
]
}
},
{
"propertyLabel": "Uber template1, property9",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property9",
"resourceTemplates": [],
"mandatory": "true",
"repeatable": "false",
"type": "literal",
"remark": "http://access.rdatoolkit.org/2.13.html"
},
{
"propertyLabel": "Uber template1, property10",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property10",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"https://id.loc.gov/vocabulary/mrectype"
]
},
"mandatory": "true",
"repeatable": "false",
"type": "resource",
"remark": "A non-repeatable LOC lookup."
},
{
"propertyLabel": "Uber template1, property11",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property11",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"https://id.loc.gov/vocabulary/mrectype"
]
},
"mandatory": "true",
"repeatable": "true",
"type": "resource",
"remark": "A repeatable LOC lookup."
},
{
"propertyLabel": "Uber template1, property12",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property12",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"https://id.loc.gov/vocabulary/mrectype",
"https://id.loc.gov/vocabulary/mrecmedium"
]
},
"mandatory": "true",
"repeatable": "false",
"type": "resource",
"remark": "A LOC lookup with multiple authorities."
},
{
"propertyLabel": "Uber template1, property13",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property13",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"urn:ld4p:qa:agrovoc"
]
},
"mandatory": "true",
"repeatable": "false",
"type": "resource",
"remark": "A non-repeatable QA lookup."
},
{
"propertyLabel": "Uber template1, property14",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property14",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"urn:ld4p:qa:agrovoc"
]
},
"mandatory": "true",
"repeatable": "true",
"type": "resource",
"remark": "A repeatable QA lookup."
},
{
"propertyLabel": "Uber template1, property15",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property15",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"urn:ld4p:qa:agrovoc",
"urn:ld4p:qa:geonames:spot"
]
},
"mandatory": "true",
"repeatable": "false",
"type": "resource",
"remark": "A QA lookup with multiple authorities."
},
{
"propertyLabel": "Uber template1, property16",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property16",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"urn:ld4p:sinopia:bibframe:instance"
]
},
"mandatory": "true",
"repeatable": "false",
"type": "resource",
"remark": "A non-repeatable Sinopia lookup."
},
{
"propertyLabel": "Uber template1, property17",
"propertyURI": "http://id.loc.gov/ontologies/bibframe/uber/template1/property17",
"resourceTemplates": [],
"valueConstraint": {
"useValuesFrom": [
"urn:ld4p:sinopia:bibframe:instance"
]
},
"mandatory": "true",
"repeatable": "true",
"type": "resource",
"remark": "A repeatable Sinopia lookup."
}
]
}

0 comments on commit 5211ed3

Please sign in to comment.