Adds support for localized push notification in push payload (#4129)
* Adds support for localized push data keys - passign alert-[lang|locale] or title-[lang|locale] will inject the proper locale on the push body based on the installation * Better handling of the default cases * Updates changelog * nits * nits
This commit is contained in:
@@ -847,7 +847,7 @@ describe('PushController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should mark the _PushStatus as succeeded when audience has no deviceToken', (done) => {
|
||||
it('should mark the _PushStatus as failed when audience has no deviceToken', (done) => {
|
||||
var auth = {
|
||||
isMaster: true
|
||||
}
|
||||
@@ -913,4 +913,70 @@ describe('PushController', () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should support localized payload data', (done) => {
|
||||
var payload = {data: {
|
||||
alert: 'Hello!',
|
||||
'alert-fr': 'Bonjour',
|
||||
'alert-es': 'Ola'
|
||||
}}
|
||||
|
||||
var pushAdapter = {
|
||||
send: function(body, installations) {
|
||||
return successfulTransmissions(body, installations);
|
||||
},
|
||||
getValidPushTypes: function() {
|
||||
return ["ios"];
|
||||
}
|
||||
}
|
||||
|
||||
var config = new Config(Parse.applicationId);
|
||||
var auth = {
|
||||
isMaster: true
|
||||
}
|
||||
|
||||
const where = {
|
||||
'deviceType': 'ios'
|
||||
}
|
||||
spyOn(pushAdapter, 'send').and.callThrough();
|
||||
var pushController = new PushController();
|
||||
reconfigureServer({
|
||||
push: { adapter: pushAdapter }
|
||||
}).then(() => {
|
||||
var installations = [];
|
||||
while (installations.length != 5) {
|
||||
const installation = new Parse.Object("_Installation");
|
||||
installation.set("installationId", "installation_" + installations.length);
|
||||
installation.set("deviceToken", "device_token_" + installations.length)
|
||||
installation.set("badge", installations.length);
|
||||
installation.set("originalBadge", installations.length);
|
||||
installation.set("deviceType", "ios");
|
||||
installations.push(installation);
|
||||
}
|
||||
installations[0].set('localeIdentifier', 'fr-CA');
|
||||
installations[1].set('localeIdentifier', 'fr-FR');
|
||||
installations[2].set('localeIdentifier', 'en-US');
|
||||
return Parse.Object.saveAll(installations);
|
||||
}).then(() => {
|
||||
return pushController.sendPush(payload, where, config, auth)
|
||||
}).then(() => {
|
||||
// Wait so the push is completed.
|
||||
return new Promise((resolve) => { setTimeout(() => { resolve(); }, 1000); });
|
||||
}).then(() => {
|
||||
expect(pushAdapter.send.calls.count()).toBe(2);
|
||||
const firstCall = pushAdapter.send.calls.first();
|
||||
expect(firstCall.args[0].data).toEqual({
|
||||
alert: 'Hello!'
|
||||
});
|
||||
expect(firstCall.args[1].length).toBe(3); // 3 installations
|
||||
|
||||
const lastCall = pushAdapter.send.calls.mostRecent();
|
||||
expect(lastCall.args[0].data).toEqual({
|
||||
alert: 'Bonjour'
|
||||
});
|
||||
expect(lastCall.args[1].length).toBe(2); // 2 installations
|
||||
// No installation is in es so only 1 call for fr, and another for default
|
||||
done();
|
||||
}).catch(done.fail);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user