Sets the defaultSchemas keys in the SchemaCollection (#1421)

* Sets the defaultSchemas keys in the SchemaCollection

* Moves defaultSchema injection logic to router

* maps outside the function

* fixes test

* conciseness
This commit is contained in:
Florent Vilmart
2016-04-07 22:13:07 -04:00
parent bc96f0beb1
commit c22bafb951
3 changed files with 42 additions and 0 deletions

View File

@@ -326,6 +326,35 @@ describe('schemas', () => {
}); });
}); });
it('responds with all fields when getting incomplete schema', done => {
config.database.schemaCollection().then((schema) => {
return schema.addSchema('_User');
}).then(() => {
request.get({
url: 'http://localhost:8378/1/schemas/_User',
headers: masterKeyHeaders,
json: true
}, (error, response, body) => {
expect(body).toEqual({
className: '_User',
fields: {
objectId: {type: 'String'},
updatedAt: {type: 'Date'},
createdAt: {type: 'Date'},
username: {type: 'String'},
password: {type: 'String'},
authData: {type: 'Object'},
email: {type: 'String'},
emailVerified: {type: 'Boolean'},
ACL: {type: 'ACL'}
},
classLevelPermissions: defaultClassLevelPermissions
});
done();
});
})
});
it('lets you specify class name in both places', done => { it('lets you specify class name in both places', done => {
request.post({ request.post({
url: 'http://localhost:8378/1/schemas/NewClass', url: 'http://localhost:8378/1/schemas/NewClass',

View File

@@ -14,9 +14,20 @@ function classNameMismatchResponse(bodyClass, pathClass) {
); );
} }
function injectDefaultSchema(schema) {
let defaultSchema = Schema.defaultColumns[schema.className];
if (defaultSchema) {
Object.keys(defaultSchema).forEach((key) => {
schema.fields[key] = defaultSchema[key];
});
}
return schema;
}
function getAllSchemas(req) { function getAllSchemas(req) {
return req.config.database.schemaCollection() return req.config.database.schemaCollection()
.then(collection => collection.getAllSchemas()) .then(collection => collection.getAllSchemas())
.then(schemas => schemas.map(injectDefaultSchema))
.then(schemas => ({ response: { results: schemas } })); .then(schemas => ({ response: { results: schemas } }));
} }
@@ -24,6 +35,7 @@ function getOneSchema(req) {
const className = req.params.className; const className = req.params.className;
return req.config.database.schemaCollection() return req.config.database.schemaCollection()
.then(collection => collection.findSchema(className)) .then(collection => collection.findSchema(className))
.then(injectDefaultSchema)
.then(schema => ({ response: schema })) .then(schema => ({ response: schema }))
.catch(error => { .catch(error => {
if (error === undefined) { if (error === undefined) {

View File

@@ -848,4 +848,5 @@ export {
schemaAPITypeToMongoFieldType, schemaAPITypeToMongoFieldType,
buildMergedSchemaObject, buildMergedSchemaObject,
systemClasses, systemClasses,
defaultColumns,
}; };