Skip to content

Commit 5a167a9

Browse files
author
Francis Lessard
committed
Merge remote-tracking branch 'ParsePlatform/master' into user-roles
2 parents 5b40a58 + eace10f commit 5a167a9

File tree

9 files changed

+544
-34
lines changed

9 files changed

+544
-34
lines changed

spec/OneSignalPushAdapter.spec.js

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
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+
});

spec/ParseAPI.spec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,22 @@ describe('miscellaneous', function() {
129129
});
130130
});
131131

132+
it('query without limit get default 100 records', function(done) {
133+
var objects = [];
134+
for (var i = 0; i < 150; i++) {
135+
objects.push(new TestObject({name: 'name' + i}));
136+
}
137+
Parse.Object.saveAll(objects).then(() => {
138+
return new Parse.Query(TestObject).find();
139+
}).then((results) => {
140+
expect(results.length).toEqual(100);
141+
done();
142+
}, (error) => {
143+
fail(error);
144+
done();
145+
});
146+
});
147+
132148
it('basic saveAll', function(done) {
133149
var alpha = new TestObject({ letter: 'alpha' });
134150
var beta = new TestObject({ letter: 'beta' });
@@ -571,6 +587,35 @@ describe('miscellaneous', function() {
571587
done();
572588
});
573589
});
590+
591+
it('test cloud function query parameters', (done) => {
592+
Parse.Cloud.define('echoParams', (req, res) => {
593+
res.success(req.params);
594+
});
595+
var headers = {
596+
'Content-Type': 'application/json',
597+
'X-Parse-Application-Id': 'test',
598+
'X-Parse-Javascript-Key': 'test'
599+
};
600+
request.post({
601+
headers: headers,
602+
url: 'http://localhost:8378/1/functions/echoParams', //?option=1&other=2
603+
qs: {
604+
option: 1,
605+
other: 2
606+
},
607+
body: '{"foo":"bar", "other": 1}'
608+
}, (error, response, body) => {
609+
expect(error).toBe(null);
610+
var res = JSON.parse(body).result;
611+
expect(res.option).toEqual('1');
612+
// Make sure query string params override body params
613+
expect(res.other).toEqual('2');
614+
expect(res.foo).toEqual("bar");
615+
delete Parse.Cloud.Functions['echoParams'];
616+
done();
617+
});
618+
});
574619

575620
it('test cloud function parameter validation success', (done) => {
576621
// Register a function with validation

spec/ParseInstallation.spec.js

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -133,26 +133,6 @@ describe('Installations', () => {
133133
});
134134
});
135135

136-
it('fails for android with device token', (done) => {
137-
var installId = '12345678-abcd-abcd-abcd-123456789abc';
138-
var t = '11433856eed2f1285fb3aa11136718c1198ed5647875096952c66bf8cb976306';
139-
var device = 'android';
140-
var input = {
141-
'installationId': installId,
142-
'deviceType': device,
143-
'deviceToken': t,
144-
'channels': ['foo', 'bar']
145-
};
146-
rest.create(config, auth.nobody(config), '_Installation', input)
147-
.then(() => {
148-
fail('Should not have been able to create an Installation.');
149-
done();
150-
}).catch((error) => {
151-
expect(error.code).toEqual(114);
152-
done();
153-
});
154-
});
155-
156136
it('fails for android with missing type', (done) => {
157137
var installId = '12345678-abcd-abcd-abcd-123456789abc';
158138
var input = {

spec/ParseUser.spec.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1606,7 +1606,30 @@ describe('Parse.User testing', () => {
16061606
}).then(function(newUser) {
16071607
fail('Session should have been invalidated');
16081608
done();
1609-
}, function() {
1609+
}, function(err) {
1610+
expect(err.code).toBe(Parse.Error.INVALID_SESSION_TOKEN);
1611+
expect(err.message).toBe('invalid session token');
1612+
done();
1613+
});
1614+
});
1615+
1616+
it('test parse user become', (done) => {
1617+
var sessionToken = null;
1618+
Parse.Promise.as().then(function() {
1619+
return Parse.User.signUp("flessard", "folo",{'foo':1});
1620+
}).then(function(newUser) {
1621+
equal(Parse.User.current(), newUser);
1622+
sessionToken = newUser.getSessionToken();
1623+
ok(sessionToken);
1624+
newUser.set('foo',2);
1625+
return newUser.save();
1626+
}).then(function() {
1627+
return Parse.User.become(sessionToken);
1628+
}).then(function(newUser) {
1629+
equal(newUser.get('foo'), 2);
1630+
done();
1631+
}, function(e) {
1632+
fail('The session should still be valid');
16101633
done();
16111634
});
16121635
});

0 commit comments

Comments
 (0)