From 96497c22058b2a5a084283e4a7a6b492d5849c3a Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 2 Apr 2025 22:42:11 +1100 Subject: [PATCH 1/3] Update helper.js --- spec/helper.js | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/helper.js b/spec/helper.js index 9c31053421..8ad9b92a77 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -192,7 +192,6 @@ const reconfigureServer = async (changedConfiguration = {}) => { }); cache.clear(); parseServer = await ParseServer.startApp(newConfiguration); - Parse.CoreManager.setRESTController(RESTController); parseServer.expressApp.use('/1', err => { console.error(err); fail('should not call next'); From c322b905c6477decfe987b8ad0c66007ddf8c288 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 2 Apr 2025 23:01:48 +1100 Subject: [PATCH 2/3] Update helper.js --- spec/helper.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/helper.js b/spec/helper.js index 8ad9b92a77..18d2e5feb5 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -192,6 +192,9 @@ const reconfigureServer = async (changedConfiguration = {}) => { }); cache.clear(); parseServer = await ParseServer.startApp(newConfiguration); + if (!newConfiguration.directAccess) { + Parse.CoreManager.setRESTController(RESTController); + } parseServer.expressApp.use('/1', err => { console.error(err); fail('should not call next'); From 55087496bdd9f67d6d16d47ea2bba2a7faf64988 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 2 Apr 2025 23:14:18 +1100 Subject: [PATCH 3/3] fix tests --- spec/CloudCode.spec.js | 91 ++++++++++++++++++++---------------------- spec/ParseFile.spec.js | 4 ++ spec/UserPII.spec.js | 2 +- 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/spec/CloudCode.spec.js b/spec/CloudCode.spec.js index 59ae534df2..84f337f4eb 100644 --- a/spec/CloudCode.spec.js +++ b/spec/CloudCode.spec.js @@ -2006,13 +2006,14 @@ describe('Cloud Code', () => { }); describe('cloud functions', () => { - it('Should have request ip', done => { + it('Should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.define('myFunction', req => { expect(req.ip).toBeDefined(); return 'success'; }); - Parse.Cloud.run('myFunction', {}).then(() => done()); + await Parse.Cloud.run('myFunction', {}); }); }); @@ -2027,14 +2028,15 @@ describe('beforeSave hooks', () => { myObject.save().then(() => done()); }); - it('should have request ip', done => { + it('should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.beforeSave('MyObject', req => { expect(req.ip).toBeDefined(); }); const MyObject = Parse.Object.extend('MyObject'); const myObject = new MyObject(); - myObject.save().then(() => done()); + await myObject.save() }); it('should respect custom object ids (#6733)', async () => { @@ -2082,14 +2084,15 @@ describe('afterSave hooks', () => { myObject.save().then(() => done()); }); - it('should have request ip', done => { + it('should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.afterSave('MyObject', req => { expect(req.ip).toBeDefined(); }); const MyObject = Parse.Object.extend('MyObject'); const myObject = new MyObject(); - myObject.save().then(() => done()); + await myObject.save(); }); it('should unset in afterSave', async () => { @@ -2137,17 +2140,16 @@ describe('beforeDelete hooks', () => { .then(() => done()); }); - it('should have request ip', done => { + it('should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.beforeDelete('MyObject', req => { expect(req.ip).toBeDefined(); }); const MyObject = Parse.Object.extend('MyObject'); const myObject = new MyObject(); - myObject - .save() - .then(myObj => myObj.destroy()) - .then(() => done()); + await myObject.save() + await myObject.destroy(); }); }); @@ -2165,17 +2167,17 @@ describe('afterDelete hooks', () => { .then(() => done()); }); - it('should have request ip', done => { + it('should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.afterDelete('MyObject', req => { expect(req.ip).toBeDefined(); }); const MyObject = Parse.Object.extend('MyObject'); const myObject = new MyObject(); - myObject - .save() - .then(myObj => myObj.destroy()) - .then(() => done()); + await myObject.save(); + await myObject.destroy(); + }); }); @@ -2467,21 +2469,19 @@ describe('beforeFind hooks', () => { .then(() => done()); }); - it('should have request ip', done => { + it('should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.beforeFind('MyObject', req => { expect(req.ip).toBeDefined(); }); const MyObject = Parse.Object.extend('MyObject'); const myObject = new MyObject(); - myObject - .save() - .then(myObj => { - const query = new Parse.Query('MyObject'); - query.equalTo('objectId', myObj.id); - return Promise.all([query.get(myObj.id), query.first(), query.find()]); - }) - .then(() => done()); + await myObject.save() + + const query = new Parse.Query('MyObject'); + query.equalTo('objectId', myObject.id); + await Promise.all([query.get(myObject.id), query.first(), query.find()]); }); it('should run beforeFind on pointers and array of pointers from an object', async () => { @@ -2850,22 +2850,19 @@ describe('afterFind hooks', () => { .then(() => done()); }); - it('should have request ip', done => { + it('should have request ip', async () => { + await reconfigureServer({directAccess: false}); Parse.Cloud.afterFind('MyObject', req => { expect(req.ip).toBeDefined(); }); const MyObject = Parse.Object.extend('MyObject'); const myObject = new MyObject(); - myObject - .save() - .then(myObj => { - const query = new Parse.Query('MyObject'); - query.equalTo('objectId', myObj.id); - return Promise.all([query.get(myObj.id), query.first(), query.find()]); - }) - .then(() => done()) - .catch(done.fail); + await myObject.save() + + const query = new Parse.Query('MyObject'); + query.equalTo('objectId', myObject.id); + await Promise.all([query.get(myObject.id), query.first(), query.find()]); }); it('should validate triggers correctly', () => { @@ -3224,7 +3221,8 @@ describe('beforeLogin hook', () => { done(); }); - it('should be able to block login if an error is thrown', async done => { + it('should be able to block login if an error is thrown', async () => { + await reconfigureServer({directAccess: false}); let hit = 0; Parse.Cloud.beforeLogin(req => { hit++; @@ -3243,10 +3241,10 @@ describe('beforeLogin hook', () => { expect(e.message).toBe('banned account'); } expect(hit).toBe(1); - done(); }); - it('should be able to block login if an error is thrown even if the user has a attached file', async done => { + it('should be able to block login if an error is thrown even if the user has a attached file', async () => { + await reconfigureServer({directAccess: false}); let hit = 0; Parse.Cloud.beforeLogin(req => { hit++; @@ -3268,7 +3266,6 @@ describe('beforeLogin hook', () => { expect(e.message).toBe('banned account'); } expect(hit).toBe(1); - done(); }); it('should not run beforeLogin with incorrect credentials', async done => { @@ -3301,7 +3298,7 @@ describe('beforeLogin hook', () => { done(); }); - it('should trigger afterLogout hook on logout', async done => { + it('should trigger afterLogout hook on logout', async () => { let userId; Parse.Cloud.afterLogout(req => { expect(req.object.className).toEqual('_Session'); @@ -3311,10 +3308,9 @@ describe('beforeLogin hook', () => { userId = user.id; }); - const user = await Parse.User.signUp('user', 'pass'); + const user = await Parse.User.signUp('user', 'pass', null, {installationId: 'test'}); await Parse.User.logOut(); expect(user.id).toBe(userId); - done(); }); it('does not crash server when throwing in afterLogin hook', async () => { @@ -3333,6 +3329,7 @@ describe('beforeLogin hook', () => { }); it('does not crash server when throwing in afterLogout hook', async () => { + await reconfigureServer({directAccess: false}); const error = new Parse.Error(2000, 'afterLogout error'); const trigger = { afterLogout() { @@ -3347,7 +3344,7 @@ describe('beforeLogin hook', () => { expect(response).toEqual(error); }); - it_id('5656d6d7-65ef-43d1-8ca6-6942ae3614d5')(it)('should have expected data in request in beforeLogin', async done => { + it_id('5656d6d7-65ef-43d1-8ca6-6942ae3614d5')(it)('should have expected data in request in beforeLogin', async () => { Parse.Cloud.beforeLogin(req => { expect(req.object).toBeDefined(); expect(req.user).toBeUndefined(); @@ -3358,8 +3355,7 @@ describe('beforeLogin hook', () => { }); await Parse.User.signUp('tupac', 'shakur'); - await Parse.User.logIn('tupac', 'shakur'); - done(); + await Parse.User.logIn('tupac', 'shakur', {installationId: 'test'}); }); it('afterFind should not be triggered when saving an object', async () => { @@ -3464,7 +3460,7 @@ describe('afterLogin hook', () => { done(); }); - it_id('e86155c4-62e1-4c6e-ab4a-9ac6c87c60f2')(it)('should have expected data in request in afterLogin', async done => { + it_id('e86155c4-62e1-4c6e-ab4a-9ac6c87c60f2')(it)('should have expected data in request in afterLogin', async () => { Parse.Cloud.afterLogin(req => { expect(req.object).toBeDefined(); expect(req.user).toBeDefined(); @@ -3475,8 +3471,7 @@ describe('afterLogin hook', () => { }); await Parse.User.signUp('testuser', 'p@ssword'); - await Parse.User.logIn('testuser', 'p@ssword'); - done(); + await Parse.User.logIn('testuser', 'p@ssword', {installationId: 'test'}); }); it('context options should override _context object property when saving a new object', async () => { diff --git a/spec/ParseFile.spec.js b/spec/ParseFile.spec.js index 6be506be8d..5e74e6d010 100644 --- a/spec/ParseFile.spec.js +++ b/spec/ParseFile.spec.js @@ -1131,6 +1131,7 @@ describe('Parse.File testing', () => { it('rejects all file uploads', async () => { await reconfigureServer({ + directAccess:false, fileUpload: { enableForPublic: false, enableForAnonymousUser: false, @@ -1176,6 +1177,7 @@ describe('Parse.File testing', () => { it('allows file upload only for public', async () => { await reconfigureServer({ + directAccess:false, fileUpload: { enableForPublic: true, enableForAnonymousUser: false, @@ -1201,6 +1203,7 @@ describe('Parse.File testing', () => { it('allows file upload only for anonymous user', async () => { await reconfigureServer({ + directAccess:false, fileUpload: { enableForPublic: false, enableForAnonymousUser: true, @@ -1226,6 +1229,7 @@ describe('Parse.File testing', () => { it('allows file upload only for authenticated user', async () => { await reconfigureServer({ + directAccess:false, fileUpload: { enableForPublic: false, enableForAnonymousUser: false, diff --git a/spec/UserPII.spec.js b/spec/UserPII.spec.js index a94e3ca469..44722fcd2e 100644 --- a/spec/UserPII.spec.js +++ b/spec/UserPII.spec.js @@ -13,7 +13,7 @@ describe('Personally Identifiable Information', () => { let user; beforeEach(async done => { - await reconfigureServer(); + await reconfigureServer({directAccess: false}); user = await Parse.User.signUp('tester', 'abc'); user = await Parse.User.logIn(user.get('username'), 'abc'); const acl = new Parse.ACL();