From 6cb42c8890bb95248f59a88ee4b6df68ea10a42d Mon Sep 17 00:00:00 2001 From: Justin Littman Date: Fri, 2 Aug 2019 16:38:47 -0400 Subject: [PATCH 1/2] Removes find node function from resource validator constructor. --- __tests__/ResourceValidator.test.js | 11 +++++------ src/ResourceValidator.js | 9 ++++----- src/reducers/inputs.js | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/__tests__/ResourceValidator.test.js b/__tests__/ResourceValidator.test.js index fd9de27e7..f91dcf604 100644 --- a/__tests__/ResourceValidator.test.js +++ b/__tests__/ResourceValidator.test.js @@ -1,7 +1,6 @@ // Copyright 2019 Stanford University see LICENSE for license import Validator from 'ResourceValidator' -import { findObjectAtPath } from 'selectors/resourceSelectors' let resource let resourceTemplates @@ -50,7 +49,7 @@ beforeEach(() => { describe('validate()', () => { it('when no properties are mandatory', () => { - const results = new Validator({ resource, entities: { resourceTemplates } }, findObjectAtPath).validate() + const results = new Validator({ resource, entities: { resourceTemplates } }).validate() expect(results[0]).toEqual({}) expect(results[1]).toEqual([]) @@ -59,7 +58,7 @@ describe('validate()', () => { it('when a property is mandatory and provided', () => { resourceTemplates['resourceTemplate:Monograph:Instance'].propertyTemplates[0].mandatory = 'true' resource['resourceTemplate:Monograph:Instance']['http://id.loc.gov/ontologies/bibframe/title'].items = [{ content: 'bar' }] - const results = new Validator({ resource, entities: { resourceTemplates } }, findObjectAtPath).validate() + const results = new Validator({ resource, entities: { resourceTemplates } }).validate() expect(results[0]).toEqual({}) expect(results[1]).toEqual([]) @@ -67,7 +66,7 @@ describe('validate()', () => { it('when a property is mandatory and not provided', () => { resourceTemplates['resourceTemplate:Monograph:Instance'].propertyTemplates[0].mandatory = 'true' - const results = new Validator({ resource, entities: { resourceTemplates } }, findObjectAtPath).validate() + const results = new Validator({ resource, entities: { resourceTemplates } }).validate() expect(results[0]).toEqual({ resource: { @@ -91,7 +90,7 @@ describe('validate()', () => { it('when a nested resource is mandatory and provided', () => { resourceTemplates['resourceTemplate:Monograph:Instance'].propertyTemplates[0].mandatory = 'true' resource['resourceTemplate:Monograph:Instance']['http://id.loc.gov/ontologies/bibframe/title'].abcdCode = { 'resourceTemplate:bf2:Title': {} } - const results = new Validator({ resource, entities: { resourceTemplates } }, findObjectAtPath).validate() + const results = new Validator({ resource, entities: { resourceTemplates } }).validate() expect(results[0]).toEqual({}) expect(results[1]).toEqual([]) @@ -101,7 +100,7 @@ describe('validate()', () => { // Make barcode mandatory resourceTemplates['resourceTemplate:Monograph:Instance'].propertyTemplates[1].mandatory = 'true' resource['resourceTemplate:Monograph:Instance']['http://id.loc.gov/ontologies/bibframe/itemPortion'].abcdCode = { 'resourceTemplate:bf2:Identifiers:Barcode': {} } - const results = new Validator({ resource, entities: { resourceTemplates } }, findObjectAtPath).validate() + const results = new Validator({ resource, entities: { resourceTemplates } }).validate() expect(results[0]).toEqual({ resource: { diff --git a/src/ResourceValidator.js b/src/ResourceValidator.js index 5032eceb4..bece57097 100644 --- a/src/ResourceValidator.js +++ b/src/ResourceValidator.js @@ -1,10 +1,9 @@ -import { getResourceTemplate } from 'selectors/resourceSelectors' +import { getResourceTemplate, findObjectAtPath } from 'selectors/resourceSelectors' import _ from 'lodash' export default class Validator { - constructor(selectorReducer, findNode) { + constructor(selectorReducer) { this.selectorReducer = selectorReducer - this.findNode = findNode this.errorState = {} this.errors = [] } @@ -54,7 +53,7 @@ export default class Validator { } validateMandatoryProperty(reduxPath, labelPath) { - const propertyNode = this.findNode(this.selectorReducer, reduxPath) + const propertyNode = findObjectAtPath(this.selectorReducer, reduxPath) if (propertyNode.items) { if (_.isEmpty(propertyNode.items)) this.addError(reduxPath, labelPath, 'Required') } else if (_.isEmpty(propertyNode)) { @@ -63,7 +62,7 @@ export default class Validator { } validateNestedResourceProperty(reduxPath, labelPath, propertyTemplate) { - const propertyNode = this.findNode(this.selectorReducer, reduxPath) + const propertyNode = findObjectAtPath(this.selectorReducer, reduxPath) propertyTemplate.valueConstraint.valueTemplateRefs.forEach((resourceTemplateId) => { Object.keys(propertyNode).forEach((key) => { const newReduxPath = [...reduxPath, key, resourceTemplateId] diff --git a/src/reducers/inputs.js b/src/reducers/inputs.js index 279b0d9bc..325401760 100644 --- a/src/reducers/inputs.js +++ b/src/reducers/inputs.js @@ -5,7 +5,7 @@ import { findObjectAtPath } from 'selectors/resourceSelectors' export const validate = (state) => { const newState = { ...state } - const result = new Validator(newState, findObjectAtPath).validate() + const result = new Validator(newState).validate() newState.editor.resourceValidationErrors = result[0] newState.editor.errors = result[1] return newState From 8af714433e9ccc8058c02baa98f2a24cc3e05920 Mon Sep 17 00:00:00 2001 From: Justin Littman Date: Sat, 3 Aug 2019 09:15:22 -0400 Subject: [PATCH 2/2] literalPropertyTemplates.test.js test tweak --- .../correctRdfInPreview/literalPropertyTemplates.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/__tests__/integration/correctRdfInPreview/literalPropertyTemplates.test.js b/__tests__/integration/correctRdfInPreview/literalPropertyTemplates.test.js index b5b49c038..874f96dd5 100644 --- a/__tests__/integration/correctRdfInPreview/literalPropertyTemplates.test.js +++ b/__tests__/integration/correctRdfInPreview/literalPropertyTemplates.test.js @@ -120,8 +120,9 @@ describe('RDF from literal property templates', () => { }) describe('three values, 1 default', () => { it('defaultLiteral only', async () => { - expect.assertions(10) + expect.assertions(11) await pupExpect(page).toClick('a[href="/editor"]', { text: 'test literal, repeatable, required, default literal only (no URI)' }) + await pupExpect(page).toMatch('mydefaultvalue') await pupExpect(page).toFill('input[placeholder=\'literal, repeatable, required, default literal only, default language\']', 'another') await page.keyboard.press('Enter') await pupExpect(page).toFill('input[placeholder=\'literal, repeatable, required, default literal only, default language\']', 'yet another')