Add support for push
This commit is contained in:
237
spec/ParsePushAdapter.spec.js
Normal file
237
spec/ParsePushAdapter.spec.js
Normal file
@@ -0,0 +1,237 @@
|
||||
var ParsePushAdapter = require('../src/Adapters/Push/ParsePushAdapter');
|
||||
|
||||
describe('ParsePushAdapter', () => {
|
||||
it('can be initialized', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
|
||||
expect(parsePushAdapter.validPushTypes).toEqual(['ios', 'android']);
|
||||
done();
|
||||
});
|
||||
|
||||
it('can initialize', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
// Make mock config
|
||||
var pushConfig = {
|
||||
android: {
|
||||
senderId: 'senderId',
|
||||
apiKey: 'apiKey'
|
||||
},
|
||||
ios: [
|
||||
{
|
||||
cert: 'prodCert.pem',
|
||||
key: 'prodKey.pem',
|
||||
production: true
|
||||
},
|
||||
{
|
||||
cert: 'devCert.pem',
|
||||
key: 'devKey.pem',
|
||||
production: false
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
parsePushAdapter.initialize(pushConfig);
|
||||
// Check ios
|
||||
var iosSenders = parsePushAdapter.senders['ios'];
|
||||
expect(iosSenders.length).toBe(2);
|
||||
// TODO: Remove this checking onec we inject APNS
|
||||
var prodApnsOptions = iosSenders[0].sender.options;
|
||||
expect(prodApnsOptions.cert).toBe(pushConfig.ios[0].cert);
|
||||
expect(prodApnsOptions.key).toBe(pushConfig.ios[0].key);
|
||||
expect(prodApnsOptions.production).toBe(pushConfig.ios[0].production);
|
||||
var devApnsOptions = iosSenders[1].sender.options;
|
||||
expect(devApnsOptions.cert).toBe(pushConfig.ios[1].cert);
|
||||
expect(devApnsOptions.key).toBe(pushConfig.ios[1].key);
|
||||
expect(devApnsOptions.production).toBe(pushConfig.ios[1].production);
|
||||
// Check android
|
||||
var androidSenders = parsePushAdapter.senders['android'];
|
||||
expect(androidSenders.length).toBe(1);
|
||||
var androidSender = androidSenders[0];
|
||||
// TODO: Remove this checking onec we inject GCM
|
||||
expect(androidSender.sender.key).toBe(pushConfig.android.apiKey);
|
||||
done();
|
||||
});
|
||||
|
||||
it('can throw on initializing with unsupported push type', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
// Make mock config
|
||||
var pushConfig = {
|
||||
win: {
|
||||
senderId: 'senderId',
|
||||
apiKey: 'apiKey'
|
||||
}
|
||||
};
|
||||
|
||||
expect(function() {
|
||||
parsePushAdapter.initialize(pushConfig)
|
||||
}).toThrow();
|
||||
done();
|
||||
});
|
||||
|
||||
it('can throw on initializing with invalid pushConfig', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
// Make mock config
|
||||
var pushConfig = {
|
||||
android: 123
|
||||
};
|
||||
|
||||
expect(function() {
|
||||
parsePushAdapter.initialize(pushConfig)
|
||||
}).toThrow();
|
||||
done();
|
||||
});
|
||||
|
||||
it('can get push senders', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
// Mock push senders
|
||||
var androidSender = {};
|
||||
var iosSender = {};
|
||||
var iosSenderAgain = {};
|
||||
parsePushAdapter.senders = {
|
||||
android: [
|
||||
androidSender
|
||||
],
|
||||
ios: [
|
||||
iosSender,
|
||||
iosSenderAgain
|
||||
]
|
||||
};
|
||||
|
||||
expect(parsePushAdapter.getPushSenders('android')).toEqual([androidSender]);
|
||||
expect(parsePushAdapter.getPushSenders('ios')).toEqual([iosSender, iosSenderAgain]);
|
||||
done();
|
||||
});
|
||||
|
||||
it('can get empty push senders', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
|
||||
expect(parsePushAdapter.getPushSenders('android')).toEqual([]);
|
||||
done();
|
||||
});
|
||||
|
||||
it('can get valid push types', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
|
||||
expect(parsePushAdapter.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 deviceTokenMap = ParsePushAdapter.classifyInstallation(installations, validPushTypes);
|
||||
expect(deviceTokenMap['android']).toEqual([makeDevice('androidToken')]);
|
||||
expect(deviceTokenMap['ios']).toEqual([makeDevice('iosToken')]);
|
||||
expect(deviceTokenMap['win']).toBe(undefined);
|
||||
done();
|
||||
});
|
||||
|
||||
it('can slice ios devices', (done) => {
|
||||
// Mock devices
|
||||
var devices = [makeDevice(1), makeDevice(2), makeDevice(3), makeDevice(4)];
|
||||
|
||||
var chunkDevices = ParsePushAdapter.sliceDevices('ios', devices, 2);
|
||||
expect(chunkDevices).toEqual([devices]);
|
||||
done();
|
||||
});
|
||||
|
||||
it('can slice android devices', (done) => {
|
||||
// Mock devices
|
||||
var devices = [makeDevice(1), makeDevice(2), makeDevice(3), makeDevice(4)];
|
||||
|
||||
var chunkDevices = ParsePushAdapter.sliceDevices('android', devices, 3);
|
||||
expect(chunkDevices).toEqual([
|
||||
[makeDevice(1), makeDevice(2), makeDevice(3)],
|
||||
[makeDevice(4)]
|
||||
]);
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('can send push notifications', (done) => {
|
||||
var parsePushAdapter = new ParsePushAdapter();
|
||||
// Mock android ios senders
|
||||
var androidSender = {
|
||||
send: jasmine.createSpy('send')
|
||||
};
|
||||
var iosSender = {
|
||||
send: jasmine.createSpy('send')
|
||||
};
|
||||
var iosSenderAgain = {
|
||||
send: jasmine.createSpy('send')
|
||||
};
|
||||
var senders = {
|
||||
ios: [iosSender, iosSenderAgain],
|
||||
android: [androidSender]
|
||||
};
|
||||
parsePushAdapter.senders = senders;
|
||||
// Mock installations
|
||||
var installations = [
|
||||
{
|
||||
deviceType: 'android',
|
||||
deviceToken: 'androidToken'
|
||||
},
|
||||
{
|
||||
deviceType: 'ios',
|
||||
deviceToken: 'iosToken'
|
||||
},
|
||||
{
|
||||
deviceType: 'win',
|
||||
deviceToken: 'winToken'
|
||||
},
|
||||
{
|
||||
deviceType: 'android',
|
||||
deviceToken: undefined
|
||||
}
|
||||
];
|
||||
var data = {};
|
||||
|
||||
parsePushAdapter.send(data, installations);
|
||||
// Check android sender
|
||||
expect(androidSender.send).toHaveBeenCalled();
|
||||
var args = androidSender.send.calls.first().args;
|
||||
expect(args[0]).toEqual(data);
|
||||
expect(args[1]).toEqual([
|
||||
makeDevice('androidToken')
|
||||
]);
|
||||
// Check ios sender
|
||||
expect(iosSender.send).toHaveBeenCalled();
|
||||
args = iosSender.send.calls.first().args;
|
||||
expect(args[0]).toEqual(data);
|
||||
expect(args[1]).toEqual([
|
||||
makeDevice('iosToken')
|
||||
]);
|
||||
expect(iosSenderAgain.send).toHaveBeenCalled();
|
||||
args = iosSenderAgain.send.calls.first().args;
|
||||
expect(args[0]).toEqual(data);
|
||||
expect(args[1]).toEqual([
|
||||
makeDevice('iosToken')
|
||||
]);
|
||||
done();
|
||||
});
|
||||
|
||||
function makeDevice(deviceToken) {
|
||||
return {
|
||||
deviceToken: deviceToken
|
||||
};
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user