Skip to content

Commit 2ff6eff

Browse files
committed
Added OneSignalPushAdapter spec and fix a bug in OneSignalPushAdapter.
1 parent 5a62851 commit 2ff6eff

File tree

2 files changed

+238
-5
lines changed

2 files changed

+238
-5
lines changed

spec/OneSignalPushAdapter.spec.js

Lines changed: 234 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,234 @@
1-
//todo
1+
2+
var OneSignalPushAdapter = require('../src/Adapters/Push/OneSignalPushAdapter');
3+
4+
describe('OneSignalPushAdapter', () => {
5+
it('can be initialized', (done) => {
6+
// Make mock config
7+
var pushConfig = {
8+
oneSignalAppId:"APP ID",
9+
oneSignalApiKey:"API KEY"
10+
};
11+
12+
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
13+
14+
var senderMap = oneSignalPushAdapter.senderMap;
15+
16+
expect(senderMap.ios instanceof Function).toBe(true);
17+
expect(senderMap.android instanceof Function).toBe(true);
18+
done();
19+
});
20+
21+
it('can get valid push types', (done) => {
22+
var oneSignalPushAdapter = new OneSignalPushAdapter();
23+
24+
expect(oneSignalPushAdapter.getValidPushTypes()).toEqual(['ios', 'android']);
25+
done();
26+
});
27+
28+
it('can classify installation', (done) => {
29+
// Mock installations
30+
var validPushTypes = ['ios', 'android'];
31+
var installations = [
32+
{
33+
deviceType: 'android',
34+
deviceToken: 'androidToken'
35+
},
36+
{
37+
deviceType: 'ios',
38+
deviceToken: 'iosToken'
39+
},
40+
{
41+
deviceType: 'win',
42+
deviceToken: 'winToken'
43+
},
44+
{
45+
deviceType: 'android',
46+
deviceToken: undefined
47+
}
48+
];
49+
50+
var deviceMap = OneSignalPushAdapter.classifyInstallation(installations, validPushTypes);
51+
expect(deviceMap['android']).toEqual([makeDevice('androidToken')]);
52+
expect(deviceMap['ios']).toEqual([makeDevice('iosToken')]);
53+
expect(deviceMap['win']).toBe(undefined);
54+
done();
55+
});
56+
57+
58+
it('can send push notifications', (done) => {
59+
var oneSignalPushAdapter = new OneSignalPushAdapter();
60+
61+
// Mock android ios senders
62+
var androidSender = jasmine.createSpy('send')
63+
var iosSender = jasmine.createSpy('send')
64+
65+
var senderMap = {
66+
ios: iosSender,
67+
android: androidSender
68+
};
69+
oneSignalPushAdapter.senderMap = senderMap;
70+
71+
// Mock installations
72+
var installations = [
73+
{
74+
deviceType: 'android',
75+
deviceToken: 'androidToken'
76+
},
77+
{
78+
deviceType: 'ios',
79+
deviceToken: 'iosToken'
80+
},
81+
{
82+
deviceType: 'win',
83+
deviceToken: 'winToken'
84+
},
85+
{
86+
deviceType: 'android',
87+
deviceToken: undefined
88+
}
89+
];
90+
var data = {};
91+
92+
oneSignalPushAdapter.send(data, installations);
93+
// Check android sender
94+
expect(androidSender).toHaveBeenCalled();
95+
var args = androidSender.calls.first().args;
96+
expect(args[0]).toEqual(data);
97+
expect(args[1]).toEqual([
98+
makeDevice('androidToken')
99+
]);
100+
// Check ios sender
101+
expect(iosSender).toHaveBeenCalled();
102+
args = iosSender.calls.first().args;
103+
expect(args[0]).toEqual(data);
104+
expect(args[1]).toEqual([
105+
makeDevice('iosToken')
106+
]);
107+
done();
108+
});
109+
110+
it("can send iOS notifications", (done) => {
111+
var oneSignalPushAdapter = new OneSignalPushAdapter();
112+
var sendToOneSignal = jasmine.createSpy('sendToOneSignal');
113+
oneSignalPushAdapter.sendToOneSignal = sendToOneSignal;
114+
115+
oneSignalPushAdapter.sendToAPNS({'data':{
116+
'badge': 1,
117+
'alert': "Example content",
118+
'sound': "Example sound",
119+
'content-available': 1,
120+
'misc-data': 'Example Data'
121+
}},[{'deviceToken':'iosToken1'},{'deviceToken':'iosToken2'}])
122+
123+
expect(sendToOneSignal).toHaveBeenCalled();
124+
var args = sendToOneSignal.calls.first().args;
125+
expect(args[0]).toEqual({
126+
'ios_badgeType':'SetTo',
127+
'ios_badgeCount':1,
128+
'contents': { 'en':'Example content'},
129+
'ios_sound': 'Example sound',
130+
'content_available':true,
131+
'data':{'misc-data':'Example Data'},
132+
'include_ios_tokens':['iosToken1','iosToken2']
133+
})
134+
done();
135+
});
136+
137+
it("can send Android notifications", (done) => {
138+
var oneSignalPushAdapter = new OneSignalPushAdapter();
139+
var sendToOneSignal = jasmine.createSpy('sendToOneSignal');
140+
oneSignalPushAdapter.sendToOneSignal = sendToOneSignal;
141+
142+
oneSignalPushAdapter.sendToGCM({'data':{
143+
'title': 'Example title',
144+
'alert': 'Example content',
145+
'misc-data': 'Example Data'
146+
}},[{'deviceToken':'androidToken1'},{'deviceToken':'androidToken2'}])
147+
148+
expect(sendToOneSignal).toHaveBeenCalled();
149+
var args = sendToOneSignal.calls.first().args;
150+
expect(args[0]).toEqual({
151+
'contents': { 'en':'Example content'},
152+
'title': {'en':'Example title'},
153+
'data':{'misc-data':'Example Data'},
154+
'include_android_reg_ids': ['androidToken1','androidToken2']
155+
})
156+
done();
157+
});
158+
159+
it("can post the correct data", (done) => {
160+
var pushConfig = {
161+
oneSignalAppId:"APP ID",
162+
oneSignalApiKey:"API KEY"
163+
};
164+
var oneSignalPushAdapter = new OneSignalPushAdapter(pushConfig);
165+
166+
var write = jasmine.createSpy('write');
167+
oneSignalPushAdapter.https = {
168+
'request': function(a,b) {
169+
return {
170+
'end':function(){},
171+
'on':function(a,b){},
172+
'write':write
173+
}
174+
}
175+
};
176+
177+
var installations = [
178+
{
179+
deviceType: 'android',
180+
deviceToken: 'androidToken'
181+
},
182+
{
183+
deviceType: 'ios',
184+
deviceToken: 'iosToken'
185+
},
186+
{
187+
deviceType: 'win',
188+
deviceToken: 'winToken'
189+
},
190+
{
191+
deviceType: 'android',
192+
deviceToken: undefined
193+
}
194+
];
195+
196+
oneSignalPushAdapter.send({'data':{
197+
'title': 'Example title',
198+
'alert': 'Example content',
199+
'content-available':1,
200+
'misc-data': 'Example Data'
201+
}}, installations);
202+
203+
expect(write).toHaveBeenCalled();
204+
205+
// iOS
206+
args = write.calls.first().args;
207+
expect(args[0]).toEqual(JSON.stringify({
208+
'contents': { 'en':'Example content'},
209+
'content_available':true,
210+
'data':{'title':'Example title','misc-data':'Example Data'},
211+
'include_ios_tokens':['iosToken'],
212+
'app_id':'APP ID'
213+
}));
214+
215+
// Android
216+
args = write.calls.mostRecent().args;
217+
expect(args[0]).toEqual(JSON.stringify({
218+
'contents': { 'en':'Example content'},
219+
'title': {'en':'Example title'},
220+
'data':{"content-available":1,'misc-data':'Example Data'},
221+
'include_android_reg_ids':['androidToken'],
222+
'app_id':'APP ID'
223+
}));
224+
225+
done();
226+
});
227+
228+
function makeDevice(deviceToken, appIdentifier) {
229+
return {
230+
deviceToken: deviceToken
231+
};
232+
}
233+
234+
});

src/Adapters/Push/OneSignalPushAdapter.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
// for ios push.
55

66
const Parse = require('parse/node').Parse;
7+
var deepcopy = require('deepcopy');
78

89
function OneSignalPushAdapter(pushConfig) {
910
this.https = require('https');
1011

11-
this.validPushTypes = ['ios', 'gcm','android'];
12+
this.validPushTypes = ['ios', 'android'];
1213
this.senderMap = {};
1314

1415
pushConfig = pushConfig || {};
@@ -17,7 +18,6 @@ function OneSignalPushAdapter(pushConfig) {
1718
this.OneSignalConfig['apiKey'] = pushConfig['oneSignalApiKey'];
1819

1920
this.senderMap['ios'] = this.sendToAPNS.bind(this);
20-
this.senderMap['gcm'] = this.sendToGCM.bind(this);
2121
this.senderMap['android'] = this.sendToGCM.bind(this);
2222
}
2323

@@ -51,7 +51,7 @@ OneSignalPushAdapter.prototype.send = function(data, installations) {
5151

5252
OneSignalPushAdapter.prototype.sendToAPNS = function(data,tokens) {
5353

54-
data= data['data']
54+
data= deepcopy(data['data']);
5555

5656
var post = {};
5757
if(data['badge']) {
@@ -111,7 +111,7 @@ OneSignalPushAdapter.prototype.sendToAPNS = function(data,tokens) {
111111
}
112112

113113
OneSignalPushAdapter.prototype.sendToGCM = function(data,tokens) {
114-
data= data['data']
114+
data= deepcopy(data['data']);
115115

116116
var post = {};
117117

0 commit comments

Comments
 (0)