Skip to content

Commit 4d327a8

Browse files
committed
Add baseline code
Add beforeEach() Improve test Fix comment Adding one more unit test
1 parent 136da6b commit 4d327a8

File tree

2 files changed

+446
-0
lines changed

2 files changed

+446
-0
lines changed

spec/SNSPushAdapter.spec.js

+249
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
var SNSPushAdapter = require('../src/Adapters/Push/SNSPushAdapter');
2+
describe('SNSPushAdapter', () => {
3+
4+
var pushConfig;
5+
var snsPushAdapter;
6+
7+
beforeEach(function() {
8+
pushConfig = {
9+
pushTypes: {
10+
ios: "APNS_ID",
11+
android: "GCM_ID"
12+
},
13+
accessKey: "accessKey",
14+
secretKey: "secretKey",
15+
region: "region"
16+
};
17+
snsPushAdapter = new SNSPushAdapter(pushConfig);
18+
});
19+
20+
it('can be initialized', (done) => {
21+
// Make mock config
22+
var arnMap = snsPushAdapter.arnMap;
23+
24+
expect(arnMap.ios).toEqual("APNS_ID");
25+
expect(arnMap.android).toEqual("GCM_ID");
26+
27+
done();
28+
});
29+
30+
it('can get valid push types', (done) => {
31+
expect(snsPushAdapter.getValidPushTypes()).toEqual(['ios', 'android']);
32+
done();
33+
});
34+
35+
it('can classify installation', (done) => {
36+
// Mock installations
37+
var validPushTypes = ['ios', 'android'];
38+
var installations = [
39+
{
40+
deviceType: 'android',
41+
deviceToken: 'androidToken'
42+
},
43+
{
44+
deviceType: 'ios',
45+
deviceToken: 'iosToken'
46+
},
47+
{
48+
deviceType: 'win',
49+
deviceToken: 'winToken'
50+
},
51+
{
52+
deviceType: 'android',
53+
deviceToken: undefined
54+
}
55+
];
56+
var deviceMap = SNSPushAdapter.classifyInstallations(installations, validPushTypes);
57+
expect(deviceMap['android']).toEqual([makeDevice('androidToken')]);
58+
expect(deviceMap['ios']).toEqual([makeDevice('iosToken')]);
59+
expect(deviceMap['win']).toBe(undefined);
60+
done();
61+
});
62+
63+
it('can send push notifications', (done) => {
64+
// Mock SNS sender
65+
var snsSender = jasmine.createSpyObj('sns', ['createPlatformEndpoint', 'publish']);
66+
snsPushAdapter.sns = snsSender;
67+
68+
// Mock android ios senders
69+
var androidSender = jasmine.createSpy('send')
70+
var iosSender = jasmine.createSpy('send')
71+
72+
var senderMap = {
73+
ios: iosSender,
74+
android: androidSender
75+
};
76+
snsPushAdapter.senderMap = senderMap;
77+
78+
// Mock installations
79+
var installations = [
80+
{
81+
deviceType: 'android',
82+
deviceToken: 'androidToken'
83+
},
84+
{
85+
deviceType: 'ios',
86+
deviceToken: 'iosToken'
87+
},
88+
{
89+
deviceType: 'win',
90+
deviceToken: 'winToken'
91+
},
92+
{
93+
deviceType: 'android',
94+
deviceToken: undefined
95+
}
96+
];
97+
var data = {};
98+
99+
snsPushAdapter.send(data, installations);
100+
// Check SNS sender
101+
expect(androidSender).toHaveBeenCalled();
102+
var args = androidSender.calls.first().args;
103+
expect(args[0]).toEqual(data);
104+
expect(args[1]).toEqual([
105+
makeDevice('androidToken')
106+
]);
107+
// Check ios sender
108+
expect(iosSender).toHaveBeenCalled();
109+
args = iosSender.calls.first().args;
110+
expect(args[0]).toEqual(data);
111+
expect(args[1]).toEqual([
112+
makeDevice('iosToken')
113+
]);
114+
done();
115+
});
116+
117+
it('can generate the right Android payload', (done) => {
118+
var data = {"action": "com.example.UPDATE_STATUS"};
119+
var pushId = '123';
120+
var timeStamp = 1456728000;
121+
122+
var returnedData = SNSPushAdapter.generateAndroidPayload(data, pushId, timeStamp);
123+
var expectedData = {GCM: '{"priority":"normal","data":{"time":"1970-01-17T20:38:48.000Z","push_id":"123"}}'};
124+
expect(returnedData).toEqual(expectedData)
125+
done();
126+
});
127+
128+
it('can generate the right iOS payload', (done) => {
129+
var data = {"aps": {"alert": "Check out these awesome deals!"}};
130+
var pushId = '123';
131+
var timeStamp = 1456728000;
132+
133+
var returnedData = SNSPushAdapter.generateiOSPayload(data);
134+
var expectedData = {APNS: '{"aps":{"alert":"Check out these awesome deals!"}}'};
135+
expect(returnedData).toEqual(expectedData)
136+
done();
137+
});
138+
139+
it('can exchange device tokens for an Amazon Resource Number (ARN)', (done) => {
140+
// Mock out Amazon SNS token exchange
141+
var snsSender = jasmine.createSpyObj('sns', ['createPlatformEndpoint']);
142+
snsPushAdapter.sns = snsSender;
143+
144+
// Mock installations
145+
var installations = [
146+
{
147+
deviceType: 'android',
148+
deviceToken: 'androidToken'
149+
}
150+
];
151+
152+
snsSender.createPlatformEndpoint.and.callFake(function(object, callback) {
153+
callback(null, {'EndpointArn' : 'ARN'});
154+
});
155+
156+
var promise = snsPushAdapter.exchangeTokenPromise(makeDevice("androidToken"), "android");
157+
158+
promise.then(function() {
159+
expect(snsSender.createPlatformEndpoint).toHaveBeenCalled();
160+
args = snsSender.createPlatformEndpoint.calls.first().args;
161+
expect(args[0].PlatformApplicationArn).toEqual("GCM_ID");
162+
expect(args[0].Token).toEqual("androidToken");
163+
done();
164+
});
165+
});
166+
167+
it('can send SNS Payload', (done) => {
168+
// Mock out Amazon SNS token exchange
169+
var snsSender = jasmine.createSpyObj('sns', ['publish'])
170+
snsSender.publish.and.callFake(function(object, callback) {
171+
callback(null, '123');
172+
});
173+
174+
snsPushAdapter.sns = snsSender;
175+
176+
// Mock installations
177+
var installations = [
178+
{
179+
deviceType: 'android',
180+
deviceToken: 'androidToken'
181+
}
182+
];
183+
184+
var promise = snsPushAdapter.sendSNSPayload("123", {"test": "hello"});
185+
186+
var callback = jasmine.createSpy();
187+
promise.then(function () {
188+
expect(snsSender.publish).toHaveBeenCalled();
189+
args = snsSender.publish.calls.first().args;
190+
expect(args[0].MessageStructure).toEqual("json");
191+
expect(args[0].TargetArn).toEqual("123");
192+
expect(args[0].Message).toEqual('{"test":"hello"}');
193+
done();
194+
});
195+
196+
it('can send SNS Payload to Android and iOS', (done) => {
197+
// Mock out Amazon SNS token exchange
198+
var snsSender = jasmine.createSpyObj('sns', ['publish', 'createPlatformEndpoint']);
199+
snsSender.publish.and.callFake(function (object, callback) {
200+
callback(null, '123');
201+
});
202+
snsSender.createPlatformEndpoint.and.callFake(function (object, callback) {
203+
callback(null, {'EndpointArn': 'ARN'});
204+
});
205+
206+
snsPushAdapter.sns = snsSender;
207+
208+
// Mock installations
209+
var installations = [
210+
{
211+
deviceType: 'android',
212+
deviceToken: 'androidToken'
213+
},
214+
{
215+
deviceType: 'ios',
216+
deviceToken: 'iosToken'
217+
}
218+
];
219+
220+
var promise = snsPushAdapter.sendSNSPayload("123", {"test": "hello"});
221+
222+
var callback = jasmine.createSpy();
223+
promise.then(function () {
224+
expect(snsSender.publish).toHaveBeenCalled();
225+
args = snsSender.publish.calls.first().args;
226+
227+
// Check Android
228+
expect(args[0].MessageStructure).toEqual("json");
229+
expect(args[0].TargetArn).toEqual("123");
230+
expect(args[0].Message).toEqual('{"test":"hello"}');
231+
232+
// Check iOS
233+
expect(args[1].MessageStructure).toEqual("json");
234+
expect(args[1].TargetArn).toEqual("123");
235+
expect(args[1].Message).toEqual('{"test":"hello"}');
236+
237+
done();
238+
});
239+
});
240+
});
241+
242+
function makeDevice(deviceToken, appIdentifier) {
243+
return {
244+
deviceToken: deviceToken,
245+
appIdentifier: appIdentifier
246+
};
247+
}
248+
249+
});

0 commit comments

Comments
 (0)