fix: set objects in afterFind triggers (#7311)

This commit is contained in:
dblythy
2021-10-09 11:34:09 +11:00
committed by GitHub
parent 197fcbda00
commit 68a3a87501
5 changed files with 115 additions and 15 deletions

View File

@@ -2391,6 +2391,53 @@ describe('afterFind hooks', () => {
});
});
it('can set a pointer object in afterFind', async () => {
const obj = new Parse.Object('MyObject');
await obj.save();
Parse.Cloud.afterFind('MyObject', async ({ objects }) => {
const otherObject = new Parse.Object('Test');
otherObject.set('foo', 'bar');
await otherObject.save();
objects[0].set('Pointer', otherObject);
objects[0].set('xyz', 'yolo');
expect(objects[0].get('Pointer').get('foo')).toBe('bar');
});
const query = new Parse.Query('MyObject');
query.equalTo('objectId', obj.id);
const obj2 = await query.first();
expect(obj2.get('xyz')).toBe('yolo');
const pointer = obj2.get('Pointer');
expect(pointer.get('foo')).toBe('bar');
});
it('can set invalid object in afterFind', async () => {
const obj = new Parse.Object('MyObject');
await obj.save();
Parse.Cloud.afterFind('MyObject', () => [{}]);
const query = new Parse.Query('MyObject');
query.equalTo('objectId', obj.id);
const obj2 = await query.first();
expect(obj2).toBeDefined();
expect(obj2.toJSON()).toEqual({});
expect(obj2.id).toBeUndefined();
});
it('can return a unsaved object in afterFind', async () => {
const obj = new Parse.Object('MyObject');
await obj.save();
Parse.Cloud.afterFind('MyObject', async () => {
const otherObject = new Parse.Object('Test');
otherObject.set('foo', 'bar');
return [otherObject];
});
const query = new Parse.Query('MyObject');
const obj2 = await query.first();
expect(obj2.get('foo')).toEqual('bar');
expect(obj2.id).toBeUndefined();
await obj2.save();
expect(obj2.id).toBeDefined();
});
it('should have request headers', done => {
Parse.Cloud.afterFind('MyObject', req => {
expect(req.headers).toBeDefined();

View File

@@ -358,6 +358,44 @@ describe('ParseLiveQuery', function () {
await object.save();
});
it('can handle afterEvent set pointers', async done => {
await reconfigureServer({
liveQuery: {
classNames: ['TestObject'],
},
startLiveQueryServer: true,
verbose: false,
silent: true,
});
const object = new TestObject();
await object.save();
const secondObject = new Parse.Object('Test2');
secondObject.set('foo', 'bar');
await secondObject.save();
Parse.Cloud.afterLiveQueryEvent('TestObject', async ({ object }) => {
const query = new Parse.Query('Test2');
const obj = await query.first();
object.set('obj', obj);
});
const query = new Parse.Query(TestObject);
query.equalTo('objectId', object.id);
const subscription = await query.subscribe();
subscription.on('update', object => {
expect(object.get('obj')).toBeDefined();
expect(object.get('obj').get('foo')).toBe('bar');
done();
});
subscription.on('error', () => {
fail('error should not have been called.');
});
object.set({ foo: 'bar' });
await object.save();
});
it('can handle async afterEvent modification', async done => {
await reconfigureServer({
liveQuery: {