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();
done();
});
it('sends a push through REST', (done) => {
request.post({
url: Parse.serverURL+"/push",
@@ -82,8 +82,11 @@ describe('PushRouter', () => {
'X-Parse-Master-Key': Parse.masterKey
}
}, 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);
done();
});
});
});
});

View File

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

View File

@@ -178,6 +178,11 @@ function makeExpressHandler(promiseHandler) {
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);
}, (e) => {
log.verbose('error:', e);

View File

@@ -15,12 +15,21 @@ export class PushRouter extends PromiseRouter {
}
let where = PushRouter.getQueryCondition(req);
pushController.sendPush(req.body, where, req.config, req.auth);
return Promise.resolve({
response: {
'result': true
}
let resolve;
let promise = new Promise((_resolve) => {
resolve = _resolve;
});
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 pushStatus;
let objectId = newObjectId();
let collection = function() {
return config.database.adaptiveCollection('_PushStatus');
}
@@ -25,7 +25,7 @@ export default function pushStatusHandler(config) {
let now = new Date();
let data = body.data || {};
let object = {
objectId: newObjectId(),
objectId,
pushTime: now.toISOString(),
_created_at: now,
query: JSON.stringify(where),
@@ -111,6 +111,7 @@ export default function pushStatusHandler(config) {
}
return Object.freeze({
objectId,
setInitial,
setRunning,
complete,