Skip to content

Commit

Permalink
feat: validation of create role CMS-2752
Browse files Browse the repository at this point in the history
  • Loading branch information
simon-scherzinger committed May 2, 2017
1 parent b946774 commit 4f739a2
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 9 deletions.
7 changes: 5 additions & 2 deletions src/resources/datamanager/DataManagerResource.js
@@ -1,3 +1,5 @@
import validator from 'json-schema-remote';

import superagent from 'superagent';
import * as qs from 'querystring';

Expand Down Expand Up @@ -410,9 +412,10 @@ export default class DataManagerResource extends Resource {
if (!role) {
throw new Error('Cannot create resource with undefined object.');
}
// TODO schema validation
return post(this.newRequest().follow('ec:dm-roles'), role);
return this.resource.link('ec:dm-role/by-id');
})
.then(link => validator.validate(role, `${link.profile}-template`))
.then(() => post(this.newRequest().follow('ec:dm-roles'), role))
.then(([dm, traversal]) => new RoleResource(dm, this.environment, traversal));
}

Expand Down
18 changes: 11 additions & 7 deletions test/datamanager/DataManager.test.js
Expand Up @@ -577,20 +577,24 @@ describe('DataManager Resource', () => {
return resolve(JSON.parse(res));
});
})
.then((clientJSON) => {
stub.returns(Promise.resolve([clientJSON, resource.traversal]));
.then((res) => {
stub.returns(Promise.resolve([res, resource.traversal]));
const create = Object.assign({}, {
name: resource.name,
label: resource.label,
addUnregistered: resource.addUnregistered,
addRegistered: resource.addRegistered,
accounts: resource.accounts,
name: res.name,
label: res.label,
addUnregistered: res.addUnregistered,
addRegistered: res.addRegistered,
accounts: res.accounts,
});
return resource.createRole(create);
})
.then(() => {
stub.should.be.called.once;
stub.restore();
})
.catch((err) => {
stub.restore();
throw err;
});
});
it('should be rejected on undefined client', () => {
Expand Down
5 changes: 5 additions & 0 deletions test/mocks/dm-single.json
Expand Up @@ -72,6 +72,11 @@
"profile": "https://entrecode.de/schema/dm-roles",
"href": "https://datamanager.entrecode.de/role?dataManagerID=48e18a34-cf64-4f4a-bc47-45323a7f0e44"
},
"ec:dm-role/by-id": {
"profile": "https://entrecode.de/schema/dm-role",
"href": "https://datamanager.entrecode.de/role{?roldeID}",
"templated": true
},
"ec:dm-roles/options": {
"href": "https://datamanager.entrecode.de/role{?accounts,addRegistered,addUnregistered,dataManagerID,label,label~,name,name~,page,roleID,roleID~,size,sort}",
"templated": true
Expand Down
1 change: 1 addition & 0 deletions test/mocks/nock.js
Expand Up @@ -8,6 +8,7 @@ module.exports = {
.get('/datamanager').replyWithFile(200, `${__dirname}/schema/dm.json`)
.get('/datamanager-template').replyWithFile(200, `${__dirname}/schema/dm-template.json`)
.get('/dm-template-template').replyWithFile(200, `${__dirname}/schema/dm-template-template.json`)
.get('/dm-role-template').replyWithFile(200, `${__dirname}/schema/dm-role-template.json`)
.get('/datetime').replyWithFile(200, `${__dirname}/schema/datetime.json`)
.get('/uuidV4').replyWithFile(200, `${__dirname}/schema/uuidV4.json`)
.get('/locale').replyWithFile(200, `${__dirname}/schema/locale.json`)
Expand Down
25 changes: 25 additions & 0 deletions test/mocks/schema/dm-role-template.json
@@ -0,0 +1,25 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "https://entrecode.de/schema/dm-role",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"addUnregistered": {
"type": "boolean"
},
"addRegistered": {
"type": "boolean"
},
"accounts": {
"type": "array",
"items": {
"$ref": "https://entrecode.de/schema/uuidV4"
}
}
}
}

0 comments on commit 4f739a2

Please sign in to comment.