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:
@@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user