Splits Push handling in Router and Controller

- Improves tests and coverage, fix bugs
This commit is contained in:
Florent Vilmart
2016-02-20 10:49:32 -05:00
parent eb0340585f
commit b490688652
6 changed files with 298 additions and 225 deletions

View File

@@ -3,103 +3,28 @@ var PushController = require('../src/Controllers/PushController').PushController
describe('PushController', () => {
it('can check valid master key of request', (done) => {
// Make mock request
var request = {
info: {
masterKey: 'masterKey'
},
config: {
masterKey: 'masterKey'
}
var auth = {
isMaster: true
}
expect(() => {
PushController.validateMasterKey(request);
PushController.validateMasterKey(auth);
}).not.toThrow();
done();
});
it('can check invalid master key of request', (done) => {
// Make mock request
var request = {
info: {
masterKey: 'masterKey'
},
config: {
masterKey: 'masterKeyAgain'
}
var auth = {
isMaster: false
}
expect(() => {
PushController.validateMasterKey(request);
PushController.validateMasterKey(auth);
}).toThrow();
done();
});
it('can get query condition when channels is set', (done) => {
// Make mock request
var request = {
body: {
channels: ['Giants', 'Mets']
}
}
var where = PushController.getQueryCondition(request);
expect(where).toEqual({
'channels': {
'$in': ['Giants', 'Mets']
}
});
done();
});
it('can get query condition when where is set', (done) => {
// Make mock request
var request = {
body: {
'where': {
'injuryReports': true
}
}
}
var where = PushController.getQueryCondition(request);
expect(where).toEqual({
'injuryReports': true
});
done();
});
it('can get query condition when nothing is set', (done) => {
// Make mock request
var request = {
body: {
}
}
expect(function() {
PushController.getQueryCondition(request);
}).toThrow();
done();
});
it('can throw on getQueryCondition when channels and where are set', (done) => {
// Make mock request
var request = {
body: {
'channels': {
'$in': ['Giants', 'Mets']
},
'where': {
'injuryReports': true
}
}
}
expect(function() {
PushController.getQueryCondition(request);
}).toThrow();
done();
});
it('can validate device type when no device type is set', (done) => {
// Make query condition
@@ -170,13 +95,11 @@ describe('PushController', () => {
it('can get expiration time in string format', (done) => {
// Make mock request
var timeStr = '2015-03-19T22:05:08Z';
var request = {
body: {
var body = {
'expiration_time': timeStr
}
}
}
var time = PushController.getExpirationTime(request);
var time = PushController.getExpirationTime(body);
expect(time).toEqual(new Date(timeStr).valueOf());
done();
});
@@ -184,28 +107,25 @@ describe('PushController', () => {
it('can get expiration time in number format', (done) => {
// Make mock request
var timeNumber = 1426802708;
var request = {
body: {
'expiration_time': timeNumber
}
var body = {
'expiration_time': timeNumber
}
var time = PushController.getExpirationTime(request);
var time = PushController.getExpirationTime(body);
expect(time).toEqual(timeNumber * 1000);
done();
});
it('can throw on getExpirationTime in invalid format', (done) => {
// Make mock request
var request = {
body: {
'expiration_time': 'abcd'
}
var body = {
'expiration_time': 'abcd'
}
expect(function(){
PushController.getExpirationTime(request);
PushController.getExpirationTime(body);
}).toThrow();
done();
});
});

123
spec/PushRouter.spec.js Normal file
View File

@@ -0,0 +1,123 @@
var PushRouter = require('../src/Routers/PushRouter').PushRouter;
var request = require('request');
describe('PushRouter', () => {
it('can check valid master key of request', (done) => {
// Make mock request
var request = {
info: {
masterKey: 'masterKey'
},
config: {
masterKey: 'masterKey'
}
}
expect(() => {
PushRouter.validateMasterKey(request);
}).not.toThrow();
done();
});
it('can check invalid master key of request', (done) => {
// Make mock request
var request = {
info: {
masterKey: 'masterKey'
},
config: {
masterKey: 'masterKeyAgain'
}
}
expect(() => {
PushRouter.validateMasterKey(request);
}).toThrow();
done();
});
it('can get query condition when channels is set', (done) => {
// Make mock request
var request = {
body: {
channels: ['Giants', 'Mets']
}
}
var where = PushRouter.getQueryCondition(request);
expect(where).toEqual({
'channels': {
'$in': ['Giants', 'Mets']
}
});
done();
});
it('can get query condition when where is set', (done) => {
// Make mock request
var request = {
body: {
'where': {
'injuryReports': true
}
}
}
var where = PushRouter.getQueryCondition(request);
expect(where).toEqual({
'injuryReports': true
});
done();
});
it('can get query condition when nothing is set', (done) => {
// Make mock request
var request = {
body: {
}
}
expect(function() {
PushRouter.getQueryCondition(request);
}).toThrow();
done();
});
it('can throw on getQueryCondition when channels and where are set', (done) => {
// Make mock request
var request = {
body: {
'channels': {
'$in': ['Giants', 'Mets']
},
'where': {
'injuryReports': true
}
}
}
expect(function() {
PushRouter.getQueryCondition(request);
}).toThrow();
done();
});
it('sends a push through REST', (done) => {
request.post({
url: Parse.serverURL+"/push",
json: true,
body: {
'channels': {
'$in': ['Giants', 'Mets']
}
},
headers: {
'X-Parse-Application-Id': Parse.applicationId,
'X-Parse-Master-Key': Parse.masterKey
}
}, function(err, res, body){
expect(body.result).toBe(true);
done();
});
});
});

View File

@@ -26,6 +26,14 @@ var defaultConfiguration = {
masterKey: 'test',
collectionPrefix: 'test_',
fileKey: 'test',
push: {
'ios': {
cert: 'prodCert.pem',
key: 'prodKey.pem',
production: true,
bundleId: 'bundleId'
}
},
oauth: { // Override the facebook provider
facebook: mockFacebook(),
myoauth: {