From 4a08d49e046c39635eced5515b56f4f8581155e6 Mon Sep 17 00:00:00 2001 From: alencarlucas Date: Tue, 30 Jul 2019 17:32:19 -0300 Subject: [PATCH 1/2] fix: Set falsy values as default to schema fields --- spec/schemas.spec.js | 7 +++++++ src/RestWrite.js | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spec/schemas.spec.js b/spec/schemas.spec.js index e0969aad37..a48cf6f0e1 100644 --- a/spec/schemas.spec.js +++ b/spec/schemas.spec.js @@ -425,6 +425,8 @@ describe('schemas', () => { foo4: { type: 'Date', required: true }, foo5: { type: 'Number', defaultValue: 5 }, ptr: { type: 'Pointer', targetClass: 'SomeClass', required: false }, + defaultFalse: { type: 'Boolean', required: true, defaultValue: false }, + defaultZero: { type: 'Number', defaultValue: 0 } }, }, }).then(async response => { @@ -445,6 +447,8 @@ describe('schemas', () => { foo4: { type: 'Date', required: true }, foo5: { type: 'Number', defaultValue: 5 }, ptr: { type: 'Pointer', targetClass: 'SomeClass', required: false }, + defaultFalse: { type: 'Boolean', required: true, defaultValue: false }, + defaultZero: { type: 'Number', defaultValue: 0 } }, classLevelPermissions: defaultClassLevelPermissions, }); @@ -464,6 +468,9 @@ describe('schemas', () => { expect(obj.get('foo4')).toEqual(date); expect(obj.get('foo5')).toEqual(5); expect(obj.get('ptr')).toBeUndefined(); + expect(obj.get('defaultFalse')).toEqual(false) + expect(obj.get('defaultZero')).toEqual(0) + expect(obj.get('ptr')).toBeUndefined(); done(); }); }); diff --git a/src/RestWrite.js b/src/RestWrite.js index 5b6efb279f..148bf4a3af 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -338,7 +338,8 @@ RestWrite.prototype.setRequiredFieldsIfNeeded = function() { if ( setDefault && schema.fields[fieldName] && - schema.fields[fieldName].defaultValue && + schema.fields[fieldName].defaultValue !== null && + schema.fields[fieldName].defaultValue !== undefined && (this.data[fieldName] === undefined || (typeof this.data[fieldName] === 'object' && this.data[fieldName].__op === 'Delete')) From c266987074294fd4e396d10b94a04d609c3162db Mon Sep 17 00:00:00 2001 From: alencarlucas Date: Wed, 31 Jul 2019 17:12:14 -0300 Subject: [PATCH 2/2] fix: Promise is not being returned in classUpdate method --- spec/Schema.spec.js | 36 +++++++++++++++++++++++++++++ src/Controllers/SchemaController.js | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/spec/Schema.spec.js b/spec/Schema.spec.js index cf73927274..56cf97f363 100644 --- a/spec/Schema.spec.js +++ b/spec/Schema.spec.js @@ -426,6 +426,42 @@ describe('SchemaController', () => { }); }); + it('can update class level permission', done => { + const newLevelPermissions = { + find: {}, + get: { '*': true }, + count: {}, + create: { '*': true }, + update: {}, + delete: { '*': true }, + addField: {}, + protectedFields: { '*': [] }, + }; + config.database.loadSchema().then(schema => { + schema + .validateObject('NewClass', { foo: 2 }) + .then(() => schema.reloadData()) + .then(() => + schema.updateClass( + 'NewClass', + {}, + newLevelPermissions, + {}, + config.database + ) + ) + .then(actualSchema => { + expect(dd(actualSchema.classLevelPermissions, newLevelPermissions)).toEqual(undefined); + done(); + }) + .catch(error => { + console.trace(error); + done(); + fail('Error creating class: ' + JSON.stringify(error)); + }); + }); + }); + it('will fail to create a class if that class was already created by an object', done => { config.database.loadSchema().then(schema => { schema diff --git a/src/Controllers/SchemaController.js b/src/Controllers/SchemaController.js index aa64ef871d..ac76ca1ad0 100644 --- a/src/Controllers/SchemaController.js +++ b/src/Controllers/SchemaController.js @@ -768,7 +768,7 @@ export default class SchemaController { }) .then(results => { enforceFields = results.filter(result => !!result); - this.setPermissions(className, classLevelPermissions, newSchema); + return this.setPermissions(className, classLevelPermissions, newSchema); }) .then(() => this._dbAdapter.setIndexesWithSchemaFormat(