Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions spec/Parse.Push.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

let request = require('request');

let delayPromise = (delay) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, delay);
});
}

describe('Parse.Push', () => {
var setup = function() {
var pushAdapter = {
Expand Down Expand Up @@ -63,6 +69,8 @@ describe('Parse.Push', () => {
alert: 'Hello world!'
}
}, {useMasterKey: true})
}).then(() => {
return delayPromise(500);
})
.then(() => {
done();
Expand All @@ -83,6 +91,8 @@ describe('Parse.Push', () => {
alert: 'Hello world!'
}
}, {useMasterKey: true})
}).then(() => {
return delayPromise(500);
}).then(() => {
done();
}).catch((err) => {
Expand Down
27 changes: 21 additions & 6 deletions src/StatusHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,16 @@ export function pushStatusHandler(config, objectId = newObjectId()) {
}

let setRunning = function(count) {
logger.verbose('sending push to %d installations', count);
logger.verbose(`_PushStatus ${objectId}: sending push to %d installations`, count);
return handler.update({status:"pending", objectId: objectId},
{status: "running", updatedAt: new Date(), count });
}

let trackSent = function(results) {
let update = {
updatedAt: new Date()
updatedAt: new Date(),
numSent: 0,
numFailed: 0
};
if (Array.isArray(results)) {
results = flatten(results);
Expand All @@ -165,15 +167,28 @@ export function pushStatusHandler(config, objectId = newObjectId()) {
let key = result.transmitted ? `sentPerType.${deviceType}` : `failedPerType.${deviceType}`;
memo[key] = incrementOp(memo, key);
if (result.transmitted) {
incrementOp(memo, 'numSent');
memo.numSent++;
} else {
incrementOp(memo, 'numFailed');
memo.numFailed++;
}
return memo;
}, update);
incrementOp(update, 'count', -results.length);
}
logger.verbose('sent push! %d success, %d failures', update.numSent, update.numFailed);

logger.verbose(`_PushStatus ${objectId}: sent push! %d success, %d failures`, update.numSent, update.numFailed);

['numSent', 'numFailed'].forEach((key) => {
if (update[key] > 0) {
update[key] = {
__op: 'Increment',
amount: update[key]
};
} else {
delete update[key];
}
});

return handler.update({ objectId }, update).then((res) => {
if (res && res.count === 0) {
return this.complete();
Expand All @@ -195,7 +210,7 @@ export function pushStatusHandler(config, objectId = newObjectId()) {
status: 'failed',
updatedAt: new Date()
}
logger.info('warning: error while sending push', err);
logger.warn(`_PushStatus ${objectId}: error while sending push`, err);
return handler.update({ objectId }, update);
}

Expand Down