diff --git a/bookshop/test/dynamic-constraints/readme.md b/bookshop/test/dynamic-constraints/readme.md index 0ffb974d..6660d649 100644 --- a/bookshop/test/dynamic-constraints/readme.md +++ b/bookshop/test/dynamic-constraints/readme.md @@ -22,5 +22,9 @@ cds repl --run bookshop/test/dynamic-constraints ```` ```javascript +await AdminService.create ('Books', {}) await AdminService.create ('Books', { title:' ', author_ID:150 }) +await AdminService.create ('Books', { title:'x' }) +await cds.validate (Books.constraints, 201) +await cds.validate (Books.constraints) ``` diff --git a/bookshop/test/dynamic-constraints/srv/admin-service.cds b/bookshop/test/dynamic-constraints/srv/admin-service.cds index 373501e5..fd771d06 100644 --- a/bookshop/test/dynamic-constraints/srv/admin-service.cds +++ b/bookshop/test/dynamic-constraints/srv/admin-service.cds @@ -1,3 +1,5 @@ +namespace AdminService; //> for cds.entities + using { AdminService } from '../../../srv/admin-service'; annotate AdminService with @requires: false; extend AdminService.Authors with columns { diff --git a/bookshop/test/dynamic-constraints/validate.js b/bookshop/test/dynamic-constraints/validate.js index 8a93f111..22907005 100644 --- a/bookshop/test/dynamic-constraints/validate.js +++ b/bookshop/test/dynamic-constraints/validate.js @@ -14,18 +14,19 @@ cds.validate = function (x, pk, ...columns) { if (x?.ref) [ x, pk ] = [ x.ref +'.constraints', pk.ID||pk ] // Run the constraints check query - const constraints = cds.model.definitions[x] || cds.error `No such constraints view: ${x}` - return SELECT.one.from (constraints, pk, columns.length && columns) + const constraints = typeof x === 'string' ? cds.model.definitions[x] || cds.error `No such constraints view: ${x}` : x + return SELECT.from (constraints, pk, columns.length && columns) // Collect and throw errors, if any - .then (checks => { + .then (rows => (rows.map ? rows : [rows]).map (checks => { const failed = {}; for (let c in checks) { if (c in constraints.keys) continue if (c[0] == '_') continue if (checks[c]) failed[c] = checks[c] } if (Object.keys(failed).length) throw cds.error `Invalid input: ${failed}` - }) + return checks + })) }