diff --git a/spec/Parse.Push.spec.js b/spec/Parse.Push.spec.js index 7dc02d43c8..5507b0f300 100644 --- a/spec/Parse.Push.spec.js +++ b/spec/Parse.Push.spec.js @@ -1,28 +1,32 @@ 'use strict'; + + describe('Parse.Push', () => { - it('should properly send push', (done) => { - var pushAdapter = { - send: function(body, installations) { - var badge = body.data.badge; - let promises = installations.map((installation) => { - if (installation.deviceType == "ios") { - expect(installation.badge).toEqual(badge); - expect(installation.originalBadge+1).toEqual(installation.badge); - } else { - expect(installation.badge).toBeUndefined(); - } - return Promise.resolve({ - err: null, - deviceType: installation.deviceType, - result: true - }) - }); - return Promise.all(promises) - }, - getValidPushTypes: function() { - return ["ios", "android"]; - } + + var setup = function() { + var pushAdapter = { + send: function(body, installations) { + var badge = body.data.badge; + let promises = installations.map((installation) => { + if (installation.deviceType == "ios") { + expect(installation.badge).toEqual(badge); + expect(installation.originalBadge+1).toEqual(installation.badge); + } else { + expect(installation.badge).toBeUndefined(); + } + return Promise.resolve({ + err: null, + deviceType: installation.deviceType, + result: true + }) + }); + return Promise.all(promises); + }, + getValidPushTypes: function() { + return ["ios", "android"]; } + } + setServerConfiguration({ appId: Parse.applicationId, masterKey: Parse.masterKey, @@ -31,6 +35,7 @@ describe('Parse.Push', () => { adapter: pushAdapter } }); + var installations = []; while(installations.length != 10) { var installation = new Parse.Object("_Installation"); @@ -41,21 +46,46 @@ describe('Parse.Push', () => { installation.set("deviceType", "ios"); installations.push(installation); } - Parse.Object.saveAll(installations).then(() => { + return Parse.Object.saveAll(installations); + } + + it('should properly send push', (done) => { + return setup().then(() => { return Parse.Push.send({ - where: { - deviceType: 'ios' - }, - data: { - badge: 'Increment', - alert: 'Hello world!' - } - }, {useMasterKey: true}); + where: { + deviceType: 'ios' + }, + data: { + badge: 'Increment', + alert: 'Hello world!' + } + }, {useMasterKey: true}) }) .then(() => { done(); }, (err) => { - console.error(err); + console.error(); + fail('should not fail sending push') + done(); + }); + }); + + it('should properly send push with lowercaseIncrement', (done) => { + return setup().then(() => { + return Parse.Push.send({ + where: { + deviceType: 'ios' + }, + data: { + badge: 'increment', + alert: 'Hello world!' + } + }, {useMasterKey: true}) + }).then(() => { + done(); + }, (err) => { + console.error(); + fail('should not fail sending push') done(); }); }); diff --git a/src/Controllers/PushController.js b/src/Controllers/PushController.js index 4553783088..2272a708ad 100644 --- a/src/Controllers/PushController.js +++ b/src/Controllers/PushController.js @@ -56,7 +56,7 @@ export class PushController extends AdaptableController { if (body.data && body.data.badge) { let badge = body.data.badge; let op = {}; - if (badge == "Increment") { + if (typeof badge == 'string' && badge.toLowerCase() === 'increment') { op = { $inc: { badge: 1 } } } else if (Number(badge)) { op = { $set: { badge: badge } } @@ -97,7 +97,7 @@ export class PushController extends AdaptableController { } sendToAdapter(body, installations, pushStatus, config) { - if (body.data && body.data.badge && body.data.badge == "Increment") { + if (body.data && body.data.badge && typeof body.data.badge == 'string' && body.data.badge.toLowerCase() == "increment") { // Collect the badges to reduce the # of calls let badgeInstallationsMap = installations.reduce((map, installation) => { let badge = installation.badge;