244 lines
6.4 KiB
JavaScript
244 lines
6.4 KiB
JavaScript
'use strict';
|
||
|
||
var OneSignalPushAdapter = require('../src/Adapters/Push/OneSignalPushAdapter');
|
||
var classifyInstallations = require('../src/Adapters/Push/PushAdapterUtils').classifyInstallations;
|
||
|
||
// Make mock config
|
||
var pushConfig = {
|
||
oneSignalAppId:"APP ID",
|
||
oneSignalApiKey:"API KEY"
|
||
};
|
||
|
||
describe('OneSignalPushAdapter', () => {
|
||
it('can be initialized', (done) => {
|
||
|
||
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
|
||
|
||
var senderMap = oneSignalPushAdapter.senderMap;
|
||
|
||
expect(senderMap.ios instanceof Function).toBe(true);
|
||
expect(senderMap.android instanceof Function).toBe(true);
|
||
done();
|
||
});
|
||
|
||
it('cannot be initialized if options are missing', (done) => {
|
||
|
||
expect(() => {
|
||
new OneSignalPushAdapter();
|
||
}).toThrow("Trying to initialize OneSignalPushAdapter without oneSignalAppId or oneSignalApiKey");
|
||
done();
|
||
});
|
||
|
||
it('can get valid push types', (done) => {
|
||
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
|
||
|
||
expect(oneSignalPushAdapter.getValidPushTypes()).toEqual(['ios', 'android']);
|
||
done();
|
||
});
|
||
|
||
it('can classify installation', (done) => {
|
||
// Mock installations
|
||
var validPushTypes = ['ios', 'android'];
|
||
var installations = [
|
||
{
|
||
deviceType: 'android',
|
||
deviceToken: 'androidToken'
|
||
},
|
||
{
|
||
deviceType: 'ios',
|
||
deviceToken: 'iosToken'
|
||
},
|
||
{
|
||
deviceType: 'win',
|
||
deviceToken: 'winToken'
|
||
},
|
||
{
|
||
deviceType: 'android',
|
||
deviceToken: undefined
|
||
}
|
||
];
|
||
|
||
var deviceMap = OneSignalPushAdapter.classifyInstallations(installations, validPushTypes);
|
||
expect(deviceMap['android']).toEqual([makeDevice('androidToken')]);
|
||
expect(deviceMap['ios']).toEqual([makeDevice('iosToken')]);
|
||
expect(deviceMap['win']).toBe(undefined);
|
||
done();
|
||
});
|
||
|
||
|
||
it('can send push notifications', (done) => {
|
||
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
|
||
|
||
// Mock android ios senders
|
||
var androidSender = jasmine.createSpy('send')
|
||
var iosSender = jasmine.createSpy('send')
|
||
|
||
var senderMap = {
|
||
ios: iosSender,
|
||
android: androidSender
|
||
};
|
||
oneSignalPushAdapter.senderMap = senderMap;
|
||
|
||
// Mock installations
|
||
var installations = [
|
||
{
|
||
deviceType: 'android',
|
||
deviceToken: 'androidToken'
|
||
},
|
||
{
|
||
deviceType: 'ios',
|
||
deviceToken: 'iosToken'
|
||
},
|
||
{
|
||
deviceType: 'win',
|
||
deviceToken: 'winToken'
|
||
},
|
||
{
|
||
deviceType: 'android',
|
||
deviceToken: undefined
|
||
}
|
||
];
|
||
var data = {};
|
||
|
||
oneSignalPushAdapter.send(data, installations);
|
||
// Check android sender
|
||
expect(androidSender).toHaveBeenCalled();
|
||
var args = androidSender.calls.first().args;
|
||
expect(args[0]).toEqual(data);
|
||
expect(args[1]).toEqual([
|
||
makeDevice('androidToken')
|
||
]);
|
||
// Check ios sender
|
||
expect(iosSender).toHaveBeenCalled();
|
||
args = iosSender.calls.first().args;
|
||
expect(args[0]).toEqual(data);
|
||
expect(args[1]).toEqual([
|
||
makeDevice('iosToken')
|
||
]);
|
||
done();
|
||
});
|
||
|
||
it("can send iOS notifications", (done) => {
|
||
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
|
||
var sendToOneSignal = jasmine.createSpy('sendToOneSignal');
|
||
oneSignalPushAdapter.sendToOneSignal = sendToOneSignal;
|
||
|
||
oneSignalPushAdapter.sendToAPNS({'data':{
|
||
'badge': 1,
|
||
'alert': "Example content",
|
||
'sound': "Example sound",
|
||
'content-available': 1,
|
||
'misc-data': 'Example Data'
|
||
}},[{'deviceToken':'iosToken1'},{'deviceToken':'iosToken2'}])
|
||
|
||
expect(sendToOneSignal).toHaveBeenCalled();
|
||
var args = sendToOneSignal.calls.first().args;
|
||
expect(args[0]).toEqual({
|
||
'ios_badgeType':'SetTo',
|
||
'ios_badgeCount':1,
|
||
'contents': { 'en':'Example content'},
|
||
'ios_sound': 'Example sound',
|
||
'content_available':true,
|
||
'data':{'misc-data':'Example Data'},
|
||
'include_ios_tokens':['iosToken1','iosToken2']
|
||
})
|
||
done();
|
||
});
|
||
|
||
it("can send Android notifications", (done) => {
|
||
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
|
||
var sendToOneSignal = jasmine.createSpy('sendToOneSignal');
|
||
oneSignalPushAdapter.sendToOneSignal = sendToOneSignal;
|
||
|
||
oneSignalPushAdapter.sendToGCM({'data':{
|
||
'title': 'Example title',
|
||
'alert': 'Example content',
|
||
'misc-data': 'Example Data'
|
||
}},[{'deviceToken':'androidToken1'},{'deviceToken':'androidToken2'}])
|
||
|
||
expect(sendToOneSignal).toHaveBeenCalled();
|
||
var args = sendToOneSignal.calls.first().args;
|
||
expect(args[0]).toEqual({
|
||
'contents': { 'en':'Example content'},
|
||
'title': {'en':'Example title'},
|
||
'data':{'misc-data':'Example Data'},
|
||
'include_android_reg_ids': ['androidToken1','androidToken2']
|
||
})
|
||
done();
|
||
});
|
||
|
||
it("can post the correct data", (done) => {
|
||
|
||
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
|
||
|
||
var write = jasmine.createSpy('write');
|
||
oneSignalPushAdapter.https = {
|
||
'request': function(a,b) {
|
||
return {
|
||
'end':function(){},
|
||
'on':function(a,b){},
|
||
'write':write
|
||
}
|
||
}
|
||
};
|
||
|
||
var installations = [
|
||
{
|
||
deviceType: 'android',
|
||
deviceToken: 'androidToken'
|
||
},
|
||
{
|
||
deviceType: 'ios',
|
||
deviceToken: 'iosToken'
|
||
},
|
||
{
|
||
deviceType: 'win',
|
||
deviceToken: 'winToken'
|
||
},
|
||
{
|
||
deviceType: 'android',
|
||
deviceToken: undefined
|
||
}
|
||
];
|
||
|
||
oneSignalPushAdapter.send({'data':{
|
||
'title': 'Example title',
|
||
'alert': 'Example content',
|
||
'content-available':1,
|
||
'misc-data': 'Example Data'
|
||
}}, installations);
|
||
|
||
expect(write).toHaveBeenCalled();
|
||
|
||
// iOS
|
||
let args = write.calls.first().args;
|
||
expect(args[0]).toEqual(JSON.stringify({
|
||
'contents': { 'en':'Example content'},
|
||
'content_available':true,
|
||
'data':{'title':'Example title','misc-data':'Example Data'},
|
||
'include_ios_tokens':['iosToken'],
|
||
'app_id':'APP ID'
|
||
}));
|
||
|
||
// Android
|
||
args = write.calls.mostRecent().args;
|
||
expect(args[0]).toEqual(JSON.stringify({
|
||
'contents': { 'en':'Example content'},
|
||
'title': {'en':'Example title'},
|
||
'data':{"content-available":1,'misc-data':'Example Data'},
|
||
'include_android_reg_ids':['androidToken'],
|
||
'app_id':'APP ID'
|
||
}));
|
||
|
||
done();
|
||
});
|
||
|
||
function makeDevice(deviceToken, appIdentifier) {
|
||
return {
|
||
deviceToken: deviceToken,
|
||
appIdentifier: appIdentifier
|
||
};
|
||
}
|
||
|
||
});
|