Adds X-Parse-Push-Status-Id header (#1412)

* Adds X-Parse-Push-Status-Id header

* Waits for _PushStatus to be stored
This commit is contained in:
Florent Vilmart
2016-04-07 18:08:09 -04:00
parent cedac3fda6
commit bc96f0beb1
5 changed files with 29 additions and 10 deletions

View File

@@ -67,7 +67,7 @@ describe('PushRouter', () => {
}).toThrow(); }).toThrow();
done(); done();
}); });
it('sends a push through REST', (done) => { it('sends a push through REST', (done) => {
request.post({ request.post({
url: Parse.serverURL+"/push", url: Parse.serverURL+"/push",
@@ -82,8 +82,11 @@ describe('PushRouter', () => {
'X-Parse-Master-Key': Parse.masterKey 'X-Parse-Master-Key': Parse.masterKey
} }
}, function(err, res, body){ }, function(err, res, body){
expect(res.headers['x-parse-push-status-id']).not.toBe(undefined);
expect(res.headers['x-parse-push-status-id'].length).toBe(10);
expect(res.headers[''])
expect(body.result).toBe(true); expect(body.result).toBe(true);
done(); done();
}); });
}); });
}); });

View File

@@ -38,7 +38,7 @@ export class PushController extends AdaptableController {
return !!this.adapter; return !!this.adapter;
} }
sendPush(body = {}, where = {}, config, auth, wait) { sendPush(body = {}, where = {}, config, auth, onPushStatusSaved = () => {}) {
var pushAdapter = this.adapter; var pushAdapter = this.adapter;
if (!this.pushIsAvailable) { if (!this.pushIsAvailable) {
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED, throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
@@ -84,6 +84,7 @@ export class PushController extends AdaptableController {
return Promise.resolve().then(() => { return Promise.resolve().then(() => {
return pushStatus.setInitial(body, where); return pushStatus.setInitial(body, where);
}).then(() => { }).then(() => {
onPushStatusSaved(pushStatus.objectId);
return badgeUpdate(); return badgeUpdate();
}).then(() => { }).then(() => {
return rest.find(config, auth, '_Installation', where); return rest.find(config, auth, '_Installation', where);

View File

@@ -178,6 +178,11 @@ function makeExpressHandler(promiseHandler) {
return res.send('Found. Redirecting to '+result.location); return res.send('Found. Redirecting to '+result.location);
} }
} }
if (result.headers) {
Object.keys(result.headers).forEach((header) => {
res.set(header, result.headers[header]);
})
}
res.json(result.response); res.json(result.response);
}, (e) => { }, (e) => {
log.verbose('error:', e); log.verbose('error:', e);

View File

@@ -15,12 +15,21 @@ export class PushRouter extends PromiseRouter {
} }
let where = PushRouter.getQueryCondition(req); let where = PushRouter.getQueryCondition(req);
pushController.sendPush(req.body, where, req.config, req.auth); let resolve;
return Promise.resolve({ let promise = new Promise((_resolve) => {
response: { resolve = _resolve;
'result': true
}
}); });
pushController.sendPush(req.body, where, req.config, req.auth, (pushStatusId) => {
resolve({
headers: {
'X-Parse-Push-Status-Id': pushStatusId
},
response: {
result: true
}
});
});
return promise;
} }
/** /**

View File

@@ -16,7 +16,7 @@ export default function pushStatusHandler(config) {
let initialPromise; let initialPromise;
let pushStatus; let pushStatus;
let objectId = newObjectId();
let collection = function() { let collection = function() {
return config.database.adaptiveCollection('_PushStatus'); return config.database.adaptiveCollection('_PushStatus');
} }
@@ -25,7 +25,7 @@ export default function pushStatusHandler(config) {
let now = new Date(); let now = new Date();
let data = body.data || {}; let data = body.data || {};
let object = { let object = {
objectId: newObjectId(), objectId,
pushTime: now.toISOString(), pushTime: now.toISOString(),
_created_at: now, _created_at: now,
query: JSON.stringify(where), query: JSON.stringify(where),
@@ -111,6 +111,7 @@ export default function pushStatusHandler(config) {
} }
return Object.freeze({ return Object.freeze({
objectId,
setInitial, setInitial,
setRunning, setRunning,
complete, complete,