Add validation of deleteField function
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
// These tests check that the Schema operates correctly.
|
|
||||||
var Config = require('../src/Config');
|
var Config = require('../src/Config');
|
||||||
var Schema = require('../src/Schema');
|
var Schema = require('../src/Schema');
|
||||||
var dd = require('deep-diff');
|
var dd = require('deep-diff');
|
||||||
@@ -406,4 +405,60 @@ describe('Schema', () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can check if a class exists', done => {
|
||||||
|
config.database.loadSchema()
|
||||||
|
.then(schema => {
|
||||||
|
return schema.addClassIfNotExists('NewClass', {})
|
||||||
|
.then(() => {
|
||||||
|
console.log(Object.getPrototypeOf(schema));
|
||||||
|
schema.hasClass('NewClass')
|
||||||
|
.then(hasClass => {
|
||||||
|
expect(hasClass).toEqual(true);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(fail);
|
||||||
|
|
||||||
|
schema.hasClass('NonexistantClass')
|
||||||
|
.then(hasClass => {
|
||||||
|
expect(hasClass).toEqual(false);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(fail);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
fail('Couldn\'t create class');
|
||||||
|
fail(error);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(error => fail('Couldn\'t load schema'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('refuses to delete fields from invalid class names', done => {
|
||||||
|
config.database.loadSchema()
|
||||||
|
.then(schema => schema.deleteField('fieldName', 'invalid class name'))
|
||||||
|
.catch(error => {
|
||||||
|
expect(error.code).toEqual(Parse.Error.INVALID_CLASS_NAME);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('refuses to delete invalid fields', done => {
|
||||||
|
config.database.loadSchema()
|
||||||
|
.then(schema => schema.deleteField('invalid field name', 'ValidClassName'))
|
||||||
|
.catch(error => {
|
||||||
|
expect(error.code).toEqual(Parse.Error.INVALID_KEY_NAME);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('refuses to delete the default fields', done => {
|
||||||
|
config.database.loadSchema()
|
||||||
|
.then(schema => schema.deleteField('installationId', '_Installation'))
|
||||||
|
.catch(error => {
|
||||||
|
expect(error.code).toEqual(136);
|
||||||
|
expect(error.error).toEqual('field installationId cannot be changed');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -409,6 +409,38 @@ Schema.prototype.validateField = function(className, key, type, freeze) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Delete a field, and remove that data from all objects. This is intended
|
||||||
|
// to remove unused fields, if other writers are writing objects that include
|
||||||
|
// this field, the field may reappear. Returns a Promise that resolves with
|
||||||
|
// no object on success, or rejects with { code, error } on failure.
|
||||||
|
Schema.prototype.deleteField = function(fieldName, className) {
|
||||||
|
if (!classNameIsValid(className)) {
|
||||||
|
return Promise.reject({
|
||||||
|
code: Parse.Error.INVALID_CLASS_NAME,
|
||||||
|
error: invalidClassNameMessage(className),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fieldNameIsValid(fieldName)) {
|
||||||
|
return Promise.reject({
|
||||||
|
code: Parse.Error.INVALID_KEY_NAME,
|
||||||
|
error: 'invalid field name: ' + fieldName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//Don't allow deleting the default fields.
|
||||||
|
if (!fieldNameIsValidForClass(fieldName, className)) {
|
||||||
|
return Promise.reject({
|
||||||
|
code: 136,
|
||||||
|
error: 'field ' + fieldName + ' cannot be changed',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.reload()
|
||||||
|
.then(schema => {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Given a schema promise, construct another schema promise that
|
// Given a schema promise, construct another schema promise that
|
||||||
// validates this field once the schema loads.
|
// validates this field once the schema loads.
|
||||||
function thenValidateField(schemaPromise, className, key, type) {
|
function thenValidateField(schemaPromise, className, key, type) {
|
||||||
|
|||||||
Reference in New Issue
Block a user