Skip to content

Commit 65f7fa6

Browse files
nick13jaremekigznicolasjaremek
authored andcommitted
Updated push platform logic and tests to use push request body middleware.
1 parent 8bac313 commit 65f7fa6

11 files changed

+85
-37
lines changed

Diff for: cucumber/test_files/push/gcm_only_push_one.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
"identities" : ["01f0000000000000003f0002", "01f0000000000000003f0003"],
33
"channels": ["friends"],
44
"content": {
5-
"gcm": "This is a GCM Push Notification message"
5+
"gcm": {
6+
"message": "This is a GCM Push Notification message"
7+
}
68
}
79
}

Diff for: cucumber/test_files/push/gcm_only_push_two.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
"identities" : ["01f0000000000000003f0002", "01f0000000000000003f0003"],
33
"channels": [],
44
"content": {
5-
"gcm": "This is a GCM Push Notification message"
5+
"gcm": {
6+
"message": "This is a GCM Push Notification message"
7+
}
68
}
79
}

Diff for: lib/middleware/check_channel.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ module.exports = function() {
1111
return next(new errors.BadRequestError('Missing channel object'));
1212
}
1313

14-
if (!channelObj.name || _.isEmpty(channelObj.name)) {
15-
return next(new errors.ConflictError('Missing \'name\' property in channel object'));
14+
if (_.isEmpty(channelObj.name) || !_.isString(channelObj.name)) {
15+
return next(new errors.BadRequestError('Missing \'name\' String property in channel object'));
1616
}
1717

1818
return next();

Diff for: lib/middleware/check_email.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ module.exports = function() {
1111
emailObj.subject = emailObj.subject || 'New echo';
1212

1313
if (_.isEmpty(emailObj.from)) {
14-
1514
log.error('Missing \'from\' property in parameters', emailObj);
1615
return next(new errors.BadRequestError('Missing \'from\' property in parameters'));
1716
}
1817

19-
if (_.isEmpty(emailObj.message)) {
20-
21-
log.error('Missing \'message\' property in parameters', emailObj);
22-
return next(new errors.BadRequestError('Missing \'message\' property in parameters'));
18+
if (_.isEmpty(emailObj.message) || !_.isString(emailObj.message)) {
19+
log.error('Missing \'message\' String property in request body \'content\' object', emailObj);
20+
return next(new errors.BadRequestError('Missing \'message\' String property in request body \'content\' object'));
2321
}
2422

2523
return next();

Diff for: lib/middleware/check_push_notification.js

+5-13
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,14 @@ var errors = require('../util/errors');
66
module.exports = function() {
77
return function checkEmail(req, res, next) {
88

9-
var reqBody = req.body;
109
var notificationObj = req.body.content;
1110

12-
if (_.isEmpty(notificationObj)) {
13-
log.error('Missing notification parameters', notificationObj);
14-
return next(new errors.BadRequestError('Missing notification parameters'));
15-
}
16-
17-
if ((!reqBody.identities && !reqBody.channels) || (_.isEmpty(reqBody.identities) && _.isEmpty(reqBody.channels)) ) {
18-
19-
log.error('The request body must contain at least one target channel or identity', notificationObj);
20-
return next(new errors.BadRequestError('The request body must contain at least one target channel or identity'));
21-
}
11+
var isValidAPN = (!_.isEmpty(notificationObj.apn) && _.isObject(notificationObj.apn));
12+
var isValidGCM = (!_.isEmpty(notificationObj.gcm) && _.isObject(notificationObj.gcm));
2213

23-
if ((!notificationObj.apn && !notificationObj.gcm) || (_.isEmpty(notificationObj.apn) && _.isEmpty(notificationObj.gcm))) {
24-
return next(new errors.BadRequestError('The request body must contain and \'apn\' or a \'gcm\' object'));
14+
if (!isValidAPN && !isValidGCM) {
15+
log.error('The request body must contain and \'apn\' OR a \'gcm\' non-empty object', notificationObj);
16+
return next(new errors.BadRequestError('The request body must contain and \'apn\' OR a \'gcm\' non-empty object'));
2517
}
2618

2719
return next();

Diff for: lib/middleware/check_sms.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,16 @@ module.exports = function() {
1111
var smsObj = req.body.content;
1212

1313
if (_.isEmpty(smsObj.from)) {
14-
1514
log.error('Missing \'from\' property in parameters', smsObj);
1615
return next(new errors.BadRequestError('Missing \'from\' property in parameters'));
1716
}
1817

19-
if (_.isEmpty(smsObj.message)) {
20-
21-
log.error('Missing \'message\' property in parameters', smsObj);
22-
return next(new errors.BadRequestError('Missing \'message\' property in parameters'));
18+
if (_.isEmpty(smsObj.message) || !_.isString(smsObj.message)) {
19+
log.error('Missing \'message\' String property in request body \'content\' object', smsObj);
20+
return next(new errors.BadRequestError('Missing \'message\' String property in request body \'content\' object'));
2321
}
2422

2523
if (smsObj.message.length > MAX_TWILIO_SMS_LENGTH) {
26-
2724
log.error('Message cannot be longer than ' + MAX_TWILIO_SMS_LENGTH + ' characters', smsObj);
2825
return next(new errors.BadRequestError('Message cannot be longer than ' + MAX_TWILIO_SMS_LENGTH + ' characters'));
2926
}

Diff for: lib/middleware/validate_push_request.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ var errors = require('../util/errors');
44
module.exports = function() {
55

66
return function(req, res, next) {
7-
console.log('Start');
8-
if (!req.body) {
7+
8+
if (_.isEmpty(req.body)) {
99
return next(new errors.BadRequestError('Missing request body'));
1010
}
1111

@@ -21,7 +21,6 @@ module.exports = function() {
2121
if (_.isEmpty(body.content)) {
2222
return next(new errors.BadRequestError('The request body must contain a non-empty \'content\' object'));
2323
}
24-
console.log('Passing validations');
2524

2625
return next();
2726
};

Diff for: lib/platforms/push.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function sendGcmPush(identities, body, callback) {
3131
return identityItem.devices.gcm;
3232
}));
3333

34-
var data = body.content.gcm;
34+
var data = body.content.gcm.message;
3535

3636
gcm.sendGCM(gcmDevices, data, {}, callback);
3737
}

Diff for: test/middlewares/check_channel.js

+27-3
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,33 @@ describe('Channel middleware', function() {
7070
request.method = endpoint.method;
7171

7272
var next = function(error) {
73-
expect(error.statusCode).to.equal(409);
74-
expect(error.body.code).to.equal('ConflictError');
75-
expect(error.body.message).to.equal('Missing \'name\' property in channel object');
73+
expect(error.statusCode).to.equal(400);
74+
expect(error.body.code).to.equal('BadRequestError');
75+
expect(error.body.message).to.equal('Missing \'name\' String property in channel object');
76+
};
77+
78+
checkChannel()(request, res, next);
79+
});
80+
81+
done();
82+
});
83+
84+
it('returns a BadRequestError for a non-String \'name\' field', function(done) {
85+
86+
channelObj.name = [channelObj.name];
87+
request.body = channelObj;
88+
89+
_.forEach(channelEndpoints, function(endpoint) {
90+
91+
var res = {};
92+
93+
request.url = endpoint.url;
94+
request.method = endpoint.method;
95+
96+
var next = function(error) {
97+
expect(error.statusCode).to.equal(400);
98+
expect(error.body.code).to.equal('BadRequestError');
99+
expect(error.body.message).to.equal('Missing \'name\' String property in channel object');
76100
};
77101

78102
checkChannel()(request, res, next);

Diff for: test/middlewares/check_email.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,24 @@ describe('Email middleware', function() {
5959
var next = function(error) {
6060
expect(error.statusCode).to.equal(400);
6161
expect(error.body.code).to.equal('BadRequestError');
62-
expect(error.body.message).to.equal('Missing \'message\' property in parameters');
62+
expect(error.body.message).to.equal('Missing \'message\' String property in request body \'content\' object');
63+
done();
64+
};
65+
66+
checkEmail()(request, res, next);
67+
});
68+
69+
it('returns a BadRequestError for a non-String \'message\' field', function(done) {
70+
71+
emailObj.content.message = [emailObj.content.message];
72+
request.body = emailObj;
73+
74+
var res = {};
75+
76+
var next = function(error) {
77+
expect(error.statusCode).to.equal(400);
78+
expect(error.body.code).to.equal('BadRequestError');
79+
expect(error.body.message).to.equal('Missing \'message\' String property in request body \'content\' object');
6380
done();
6481
};
6582

Diff for: test/middlewares/check_sms.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,24 @@ describe('SMS middleware', function() {
6262
var next = function(error) {
6363
expect(error.statusCode).to.equal(400);
6464
expect(error.body.code).to.equal('BadRequestError');
65-
expect(error.body.message).to.equal('Missing \'message\' property in parameters');
65+
expect(error.body.message).to.equal('Missing \'message\' String property in request body \'content\' object');
66+
done();
67+
};
68+
69+
checkSms()(request, res, next);
70+
});
71+
72+
it('returns a BadRequestError for a non-String \'message\' field', function(done) {
73+
74+
smsObj.content.message = [smsObj.content.message];
75+
request.body = smsObj;
76+
77+
var res = {};
78+
79+
var next = function(error) {
80+
expect(error.statusCode).to.equal(400);
81+
expect(error.body.code).to.equal('BadRequestError');
82+
expect(error.body.message).to.equal('Missing \'message\' String property in request body \'content\' object');
6683
done();
6784
};
6885

0 commit comments

Comments
 (0)