New: Validate Cloud Validators (#7154)
* new: validate cloud validators * add otherKey * Update CHANGELOG.md * Update CloudCode.Validator.spec.js * Update CloudCode.Validator.spec.js * new: validate cloud validators * add otherKey * Update CHANGELOG.md * Update CloudCode.Validator.spec.js * Update CloudCode.Validator.spec.js * Update Parse.Cloud.js * Update CHANGELOG.md * Change to throw error Co-authored-by: Antonio Davi Macedo Coelho de Castro <adavimacedo@gmail.com>
This commit is contained in:
@@ -92,9 +92,7 @@ describe('cloud validator', () => {
|
||||
},
|
||||
async () => {
|
||||
await new Promise(resolve => {
|
||||
setTimeout(() => {
|
||||
resolve();
|
||||
}, 1000);
|
||||
setTimeout(resolve, 1000);
|
||||
});
|
||||
throw 'async error';
|
||||
}
|
||||
@@ -132,7 +130,7 @@ describe('cloud validator', () => {
|
||||
await Parse.Cloud.run('myFunction');
|
||||
});
|
||||
|
||||
it('require user on cloud functions', done => {
|
||||
it('require user on cloud functions', async done => {
|
||||
Parse.Cloud.define(
|
||||
'hello1',
|
||||
() => {
|
||||
@@ -142,16 +140,14 @@ describe('cloud validator', () => {
|
||||
requireUser: true,
|
||||
}
|
||||
);
|
||||
|
||||
Parse.Cloud.run('hello1', {})
|
||||
.then(() => {
|
||||
fail('function should have failed.');
|
||||
})
|
||||
.catch(error => {
|
||||
expect(error.code).toEqual(Parse.Error.VALIDATION_ERROR);
|
||||
expect(error.message).toEqual('Validation failed. Please login to continue.');
|
||||
done();
|
||||
});
|
||||
try {
|
||||
await Parse.Cloud.run('hello1', {});
|
||||
fail('function should have failed.');
|
||||
} catch (error) {
|
||||
expect(error.code).toEqual(Parse.Error.VALIDATION_ERROR);
|
||||
expect(error.message).toEqual('Validation failed. Please login to continue.');
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
it('require master on cloud functions', done => {
|
||||
@@ -605,16 +601,10 @@ describe('cloud validator', () => {
|
||||
expect(obj.get('foo')).toBe('bar');
|
||||
|
||||
const query = new Parse.Query('beforeFind');
|
||||
try {
|
||||
const first = await query.first({ useMasterKey: true });
|
||||
expect(first).toBeDefined();
|
||||
expect(first.id).toBe(obj.id);
|
||||
done();
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
console.log(e.code);
|
||||
throw e;
|
||||
}
|
||||
const first = await query.first({ useMasterKey: true });
|
||||
expect(first).toBeDefined();
|
||||
expect(first.id).toBe(obj.id);
|
||||
done();
|
||||
});
|
||||
|
||||
it('basic beforeDelete skipWithMasterKey', async function (done) {
|
||||
@@ -1429,6 +1419,156 @@ describe('cloud validator', () => {
|
||||
}
|
||||
});
|
||||
|
||||
it('does not log on valid config', () => {
|
||||
Parse.Cloud.define('myFunction', () => {}, {
|
||||
requireUser: true,
|
||||
requireMaster: true,
|
||||
validateMasterKey: false,
|
||||
skipWithMasterKey: true,
|
||||
requireUserKeys: {
|
||||
Acc: {
|
||||
constant: true,
|
||||
options: ['A', 'B'],
|
||||
required: true,
|
||||
default: 'f',
|
||||
error: 'a',
|
||||
type: String,
|
||||
},
|
||||
},
|
||||
fields: {
|
||||
Acc: {
|
||||
constant: true,
|
||||
options: ['A', 'B'],
|
||||
required: true,
|
||||
default: 'f',
|
||||
error: 'a',
|
||||
type: String,
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
it('Logs on invalid config', () => {
|
||||
const fields = [
|
||||
{
|
||||
field: 'requiredUser',
|
||||
value: true,
|
||||
error: 'requiredUser is not a supported parameter for Cloud Function validations.',
|
||||
},
|
||||
{
|
||||
field: 'requireUser',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key requireUser. Expected boolean, actual array',
|
||||
},
|
||||
{
|
||||
field: 'requireMaster',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key requireMaster. Expected boolean, actual array',
|
||||
},
|
||||
{
|
||||
field: 'validateMasterKey',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key validateMasterKey. Expected boolean, actual array',
|
||||
},
|
||||
{
|
||||
field: 'skipWithMasterKey',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key skipWithMasterKey. Expected boolean, actual array',
|
||||
},
|
||||
{
|
||||
field: 'requireAllUserRoles',
|
||||
value: true,
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key requireAllUserRoles. Expected array|function, actual boolean',
|
||||
},
|
||||
{
|
||||
field: 'requireAnyUserRoles',
|
||||
value: true,
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key requireAnyUserRoles. Expected array|function, actual boolean',
|
||||
},
|
||||
{
|
||||
field: 'fields',
|
||||
value: true,
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key fields. Expected array|object, actual boolean',
|
||||
},
|
||||
{
|
||||
field: 'requireUserKeys',
|
||||
value: true,
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key requireUserKeys. Expected array|object, actual boolean',
|
||||
},
|
||||
];
|
||||
for (const field of fields) {
|
||||
try {
|
||||
Parse.Cloud.define('myFunction', () => {}, {
|
||||
[field.field]: field.value,
|
||||
});
|
||||
fail(`Expected error registering invalid Cloud Function validation ${field.field}.`);
|
||||
} catch (e) {
|
||||
expect(e).toBe(field.error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('Logs on invalid config', () => {
|
||||
const fields = [
|
||||
{
|
||||
field: 'otherKey',
|
||||
value: true,
|
||||
error: 'otherKey is not a supported parameter for Cloud Function validations.',
|
||||
},
|
||||
{
|
||||
field: 'constant',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key constant. Expected boolean, actual array',
|
||||
},
|
||||
{
|
||||
field: 'required',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key required. Expected boolean, actual array',
|
||||
},
|
||||
{
|
||||
field: 'error',
|
||||
value: [],
|
||||
error:
|
||||
'Invalid type for Cloud Function validation key error. Expected string, actual array',
|
||||
},
|
||||
];
|
||||
for (const field of fields) {
|
||||
try {
|
||||
Parse.Cloud.define('myFunction', () => {}, {
|
||||
fields: {
|
||||
name: {
|
||||
[field.field]: field.value,
|
||||
},
|
||||
},
|
||||
});
|
||||
fail(`Expected error registering invalid Cloud Function validation ${field.field}.`);
|
||||
} catch (e) {
|
||||
expect(e).toBe(field.error);
|
||||
}
|
||||
try {
|
||||
Parse.Cloud.define('myFunction', () => {}, {
|
||||
requireUserKeys: {
|
||||
name: {
|
||||
[field.field]: field.value,
|
||||
},
|
||||
},
|
||||
});
|
||||
fail(`Expected error registering invalid Cloud Function validation ${field.field}.`);
|
||||
} catch (e) {
|
||||
expect(e).toBe(field.error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('set params options function async', async () => {
|
||||
Parse.Cloud.define(
|
||||
'hello',
|
||||
|
||||
Reference in New Issue
Block a user