From 5dbae2b34f2cc6fa8b3c962b8baec67c619f4637 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Wed, 27 Sep 2023 00:09:36 -0500 Subject: [PATCH 1/5] fix: Return `Parse.Job` and `Parse.Push` statusId when `directAccess` is false --- spec/ParseServerRESTController.spec.js | 31 ++++++++++++++++++++++++++ src/ParseServerRESTController.js | 9 +++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index 5e6a550e25..b48661a660 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -631,4 +631,35 @@ describe('ParseServerRESTController', () => { expect(sessions[0].get('installationId')).toBe(installationId); expect(sessions[0].get('sessionToken')).toBe(loggedUser.sessionToken); }); + + it('returns a statusId when running jobs', async () => { + Parse.Cloud.job('CloudJob', () => { + return 'Cloud job completed'; + }); + const jobStatusId = await RESTController.request( + 'POST', + '/jobs/CloudJob', + {}, + { useMasterKey: true } + ); + expect(jobStatusId).toBeDefined(); + + const result = await Parse.Cloud.getJobStatus(jobStatusId); + expect(result.get('message')).toBe('Cloud job completed'); + }); + + it('returns a statusId when running push notifications', async () => { + const payload = { + data: { alert: 'We return status!' }, + where: { deviceType: 'ios' }, + }; + const pushStatusId = await RESTController.request('POST', '/push', payload, { + useMasterKey: true, + }); + expect(pushStatusId).toBeDefined(); + + const result = await Parse.Push.getPushStatus(pushStatusId); + expect(result.get('query')).toEqual(JSON.stringify(payload.where)); + expect(result.get('payload')).toEqual(JSON.stringify(payload.data)); + }); }); diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index 12ee0a67e5..0126d15bed 100644 --- a/src/ParseServerRESTController.js +++ b/src/ParseServerRESTController.js @@ -128,7 +128,14 @@ function ParseServerRESTController(applicationId, router) { }) .then( resp => { - const { response, status } = resp; + let { response } = resp; + const { status, headers = {} } = resp; + if (headers['X-Parse-Push-Status-Id']) { + response = headers['X-Parse-Push-Status-Id']; + } + if (headers['X-Parse-Job-Status-Id']) { + response = headers['X-Parse-Job-Status-Id']; + } if (options.returnStatus) { resolve({ ...response, _status: status }); } else { From 74e2a899953ade76bdf2ba98e791e8874f659532 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Tue, 3 Oct 2023 12:27:42 -0500 Subject: [PATCH 2/5] return headers in RestController --- src/ParseServerRESTController.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index 0126d15bed..ed6145a990 100644 --- a/src/ParseServerRESTController.js +++ b/src/ParseServerRESTController.js @@ -58,8 +58,10 @@ function ParseServerRESTController(applicationId, router) { response => { if (options.returnStatus) { const status = response._status; + const headers = response._headers; delete response._status; - return { success: response, _status: status }; + delete response._headers; + return { success: response, _status: status, _headers: headers }; } return { success: response }; }, @@ -128,16 +130,9 @@ function ParseServerRESTController(applicationId, router) { }) .then( resp => { - let { response } = resp; - const { status, headers = {} } = resp; - if (headers['X-Parse-Push-Status-Id']) { - response = headers['X-Parse-Push-Status-Id']; - } - if (headers['X-Parse-Job-Status-Id']) { - response = headers['X-Parse-Job-Status-Id']; - } + const { response, status, headers = {} } = resp; if (options.returnStatus) { - resolve({ ...response, _status: status }); + resolve({ ...response, _status: status, _headers: headers }); } else { resolve(response); } From 01ad23ab16bfa52c1870740c6758980f33f5ae3d Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 12 Apr 2024 10:38:48 -0500 Subject: [PATCH 3/5] update tests --- spec/ParseServerRESTController.spec.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index b48661a660..7cffd07c39 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -636,16 +636,16 @@ describe('ParseServerRESTController', () => { Parse.Cloud.job('CloudJob', () => { return 'Cloud job completed'; }); - const jobStatusId = await RESTController.request( + const response = await RESTController.request( 'POST', '/jobs/CloudJob', {}, - { useMasterKey: true } + { useMasterKey: true, returnStatus: true } ); + const jobStatusId = response._headers['X-Parse-Job-Status-Id']; expect(jobStatusId).toBeDefined(); - const result = await Parse.Cloud.getJobStatus(jobStatusId); - expect(result.get('message')).toBe('Cloud job completed'); + expect(result.id).toBe(jobStatusId); }); it('returns a statusId when running push notifications', async () => { @@ -653,13 +653,14 @@ describe('ParseServerRESTController', () => { data: { alert: 'We return status!' }, where: { deviceType: 'ios' }, }; - const pushStatusId = await RESTController.request('POST', '/push', payload, { + const response = await RESTController.request('POST', '/push', payload, { useMasterKey: true, + returnStatus: true, }); + const pushStatusId = response._headers['X-Parse-Push-Status-Id']; expect(pushStatusId).toBeDefined(); const result = await Parse.Push.getPushStatus(pushStatusId); - expect(result.get('query')).toEqual(JSON.stringify(payload.where)); - expect(result.get('payload')).toEqual(JSON.stringify(payload.data)); + expect(result.id).toBe(pushStatusId); }); }); From 2bf3ac3b85fccfc871cf84db4eee458a1d8f761e Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 12 Apr 2024 10:51:50 -0500 Subject: [PATCH 4/5] batch request test --- spec/ParseServerRESTController.spec.js | 30 ++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index 7cffd07c39..22a2fa68ba 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -636,13 +636,13 @@ describe('ParseServerRESTController', () => { Parse.Cloud.job('CloudJob', () => { return 'Cloud job completed'; }); - const response = await RESTController.request( + const res = await RESTController.request( 'POST', '/jobs/CloudJob', {}, { useMasterKey: true, returnStatus: true } ); - const jobStatusId = response._headers['X-Parse-Job-Status-Id']; + const jobStatusId = res._headers['X-Parse-Job-Status-Id']; expect(jobStatusId).toBeDefined(); const result = await Parse.Cloud.getJobStatus(jobStatusId); expect(result.id).toBe(jobStatusId); @@ -653,11 +653,33 @@ describe('ParseServerRESTController', () => { data: { alert: 'We return status!' }, where: { deviceType: 'ios' }, }; - const response = await RESTController.request('POST', '/push', payload, { + const res = await RESTController.request('POST', '/push', payload, { useMasterKey: true, returnStatus: true, }); - const pushStatusId = response._headers['X-Parse-Push-Status-Id']; + const pushStatusId = res._headers['X-Parse-Push-Status-Id']; + expect(pushStatusId).toBeDefined(); + + const result = await Parse.Push.getPushStatus(pushStatusId); + expect(result.id).toBe(pushStatusId); + }); + + fit('returns a statusId when running batch push notifications', async () => { + const payload = { + data: { alert: 'We return status!' }, + where: { deviceType: 'ios' }, + }; + const res = await RESTController.request('POST', 'batch', { + requests: [{ + method: 'POST', + path: '/push', + body: payload, + }], + }, { + useMasterKey: true, + returnStatus: true, + }); + const pushStatusId = res[0]._headers['X-Parse-Push-Status-Id']; expect(pushStatusId).toBeDefined(); const result = await Parse.Push.getPushStatus(pushStatusId); From aa4960c3573667dd3c004f9ecf02661d7a7655bd Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 12 Apr 2024 10:57:17 -0500 Subject: [PATCH 5/5] remove fit --- spec/ParseServerRESTController.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index 22a2fa68ba..f4b753987c 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -664,7 +664,7 @@ describe('ParseServerRESTController', () => { expect(result.id).toBe(pushStatusId); }); - fit('returns a statusId when running batch push notifications', async () => { + it('returns a statusId when running batch push notifications', async () => { const payload = { data: { alert: 'We return status!' }, where: { deviceType: 'ios' },