diff --git a/spec/InMemoryCache.spec.js b/spec/InMemoryCache.spec.js index c5c7cd38..d095c1f5 100644 --- a/spec/InMemoryCache.spec.js +++ b/spec/InMemoryCache.spec.js @@ -28,7 +28,7 @@ describe('InMemoryCache', function() { let value = cache.get(KEY); expect(value).toEqual(VALUE); - wait(BASE_TTL.ttl * 2).then(() => { + wait(BASE_TTL.ttl * 10).then(() => { value = cache.get(KEY) expect(value).toEqual(null); done(); diff --git a/spec/schemas.spec.js b/spec/schemas.spec.js index a5a8256d..ffc2650b 100644 --- a/spec/schemas.spec.js +++ b/spec/schemas.spec.js @@ -1852,6 +1852,29 @@ describe('schemas', () => { }) }); + it('can create index on default field', done => { + request.post({ + url: 'http://localhost:8378/1/schemas/NewClass', + headers: masterKeyHeaders, + json: true, + body: {}, + }, () => { + request.put({ + url: 'http://localhost:8378/1/schemas/NewClass', + headers: masterKeyHeaders, + json: true, + body: { + indexes: { + name1: { createdAt: 1}, + } + } + }, (error, response, body) => { + expect(body.indexes.name1).toEqual({ createdAt: 1}); + done(); + }); + }) + }); + it('cannot create compound index if field does not exist', done => { request.post({ url: 'http://localhost:8378/1/schemas/NewClass', diff --git a/src/Controllers/SchemaController.js b/src/Controllers/SchemaController.js index 2233886e..7c133f26 100644 --- a/src/Controllers/SchemaController.js +++ b/src/Controllers/SchemaController.js @@ -530,6 +530,8 @@ export default class SchemaController { delete existingFields._rperm; delete existingFields._wperm; const newSchema = buildMergedSchemaObject(existingFields, submittedFields); + const defaultFields = defaultColumns[className] || defaultColumns._Default; + const fullNewSchema = Object.assign({}, newSchema, defaultFields); const validationError = this.validateSchemaData(className, newSchema, classLevelPermissions, Object.keys(existingFields)); if (validationError) { throw new Parse.Error(validationError.code, validationError.error); @@ -561,7 +563,7 @@ export default class SchemaController { return Promise.all(promises); }) .then(() => this.setPermissions(className, classLevelPermissions, newSchema)) - .then(() => this._dbAdapter.setIndexesWithSchemaFormat(className, indexes, schema.indexes, newSchema)) + .then(() => this._dbAdapter.setIndexesWithSchemaFormat(className, indexes, schema.indexes, fullNewSchema)) .then(() => this.reloadData({ clearCache: true })) //TODO: Move this logic into the database adapter .then(() => {