diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index 5e6a550e25..f4b753987c 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -631,4 +631,58 @@ 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 res = await RESTController.request( + 'POST', + '/jobs/CloudJob', + {}, + { useMasterKey: true, returnStatus: true } + ); + const jobStatusId = res._headers['X-Parse-Job-Status-Id']; + expect(jobStatusId).toBeDefined(); + const result = await Parse.Cloud.getJobStatus(jobStatusId); + expect(result.id).toBe(jobStatusId); + }); + + it('returns a statusId when running push notifications', async () => { + const payload = { + data: { alert: 'We return status!' }, + where: { deviceType: 'ios' }, + }; + const res = await RESTController.request('POST', '/push', payload, { + useMasterKey: true, + returnStatus: true, + }); + const pushStatusId = res._headers['X-Parse-Push-Status-Id']; + expect(pushStatusId).toBeDefined(); + + const result = await Parse.Push.getPushStatus(pushStatusId); + expect(result.id).toBe(pushStatusId); + }); + + it('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); + expect(result.id).toBe(pushStatusId); + }); }); diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index 12ee0a67e5..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,9 +130,9 @@ function ParseServerRESTController(applicationId, router) { }) .then( resp => { - const { response, status } = resp; + const { response, status, headers = {} } = resp; if (options.returnStatus) { - resolve({ ...response, _status: status }); + resolve({ ...response, _status: status, _headers: headers }); } else { resolve(response); }