Full query support for badge Increment
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
"use strict";
|
||||||
var PushController = require('../src/Controllers/PushController').PushController;
|
var PushController = require('../src/Controllers/PushController').PushController;
|
||||||
|
|
||||||
var Config = require('../src/Config');
|
var Config = require('../src/Config');
|
||||||
@@ -220,5 +221,45 @@ describe('PushController', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should support full RESTQuery for increment', (done) => {
|
||||||
|
var payload = {data: {
|
||||||
|
alert: "Hello World!",
|
||||||
|
badge: 'Increment',
|
||||||
|
}}
|
||||||
|
|
||||||
|
var pushAdapter = {
|
||||||
|
send: function(body, installations) {
|
||||||
|
return Promise.resolve();
|
||||||
|
},
|
||||||
|
getValidPushTypes: function() {
|
||||||
|
return ["ios"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var config = new Config(Parse.applicationId);
|
||||||
|
var auth = {
|
||||||
|
isMaster: true
|
||||||
|
}
|
||||||
|
|
||||||
|
let where = {
|
||||||
|
'deviceToken': {
|
||||||
|
'$inQuery': {
|
||||||
|
'where': {
|
||||||
|
'deviceType': 'ios'
|
||||||
|
},
|
||||||
|
className: '_Installation'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var pushController = new PushController(pushAdapter, Parse.applicationId);
|
||||||
|
pushController.sendPush(payload, where, config, auth).then((result) => {
|
||||||
|
done();
|
||||||
|
}).catch((err) => {
|
||||||
|
fail('should not fail');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import AdaptableController from './AdaptableController';
|
|||||||
import { PushAdapter } from '../Adapters/Push/PushAdapter';
|
import { PushAdapter } from '../Adapters/Push/PushAdapter';
|
||||||
import deepcopy from 'deepcopy';
|
import deepcopy from 'deepcopy';
|
||||||
import features from '../features';
|
import features from '../features';
|
||||||
|
import RestQuery from '../RestQuery';
|
||||||
|
|
||||||
const FEATURE_NAME = 'push';
|
const FEATURE_NAME = 'push';
|
||||||
const UNSUPPORTED_BADGE_KEY = "unsupported";
|
const UNSUPPORTED_BADGE_KEY = "unsupported";
|
||||||
@@ -63,11 +64,21 @@ export class PushController extends AdaptableController {
|
|||||||
throw "Invalid value for badge, expected number or 'Increment'";
|
throw "Invalid value for badge, expected number or 'Increment'";
|
||||||
}
|
}
|
||||||
let updateWhere = deepcopy(where);
|
let updateWhere = deepcopy(where);
|
||||||
updateWhere.deviceType = 'ios'; // Only on iOS!
|
|
||||||
|
|
||||||
badgeUpdate = () => {
|
badgeUpdate = () => {
|
||||||
return config.database.adaptiveCollection("_Installation")
|
let badgeQuery = new RestQuery(config, auth, '_Installation', updateWhere);
|
||||||
.then(coll => coll.updateMany(updateWhere, op));
|
return badgeQuery.buildRestWhere().then(() => {
|
||||||
|
let restWhere = deepcopy(badgeQuery.restWhere);
|
||||||
|
// Force iOS only devices
|
||||||
|
if (!restWhere['$and']) {
|
||||||
|
restWhere['$and'] = [badgeQuery.restWhere];
|
||||||
|
}
|
||||||
|
restWhere['$and'].push({
|
||||||
|
'deviceType': 'ios'
|
||||||
|
});
|
||||||
|
return config.database.adaptiveCollection("_Installation")
|
||||||
|
.then(coll => coll.updateMany(restWhere, op));
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,20 @@ function RestQuery(config, auth, className, restWhere = {}, restOptions = {}) {
|
|||||||
// 'results' and 'count'.
|
// 'results' and 'count'.
|
||||||
// TODO: consolidate the replaceX functions
|
// TODO: consolidate the replaceX functions
|
||||||
RestQuery.prototype.execute = function() {
|
RestQuery.prototype.execute = function() {
|
||||||
|
return Promise.resolve().then(() => {
|
||||||
|
return this.buildRestWhere();
|
||||||
|
}).then(() => {
|
||||||
|
return this.runFind();
|
||||||
|
}).then(() => {
|
||||||
|
return this.runCount();
|
||||||
|
}).then(() => {
|
||||||
|
return this.handleInclude();
|
||||||
|
}).then(() => {
|
||||||
|
return this.response;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
RestQuery.prototype.buildRestWhere = function() {
|
||||||
return Promise.resolve().then(() => {
|
return Promise.resolve().then(() => {
|
||||||
return this.getUserAndRoleACL();
|
return this.getUserAndRoleACL();
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
@@ -125,16 +139,8 @@ RestQuery.prototype.execute = function() {
|
|||||||
return this.replaceInQuery();
|
return this.replaceInQuery();
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
return this.replaceNotInQuery();
|
return this.replaceNotInQuery();
|
||||||
}).then(() => {
|
|
||||||
return this.runFind();
|
|
||||||
}).then(() => {
|
|
||||||
return this.runCount();
|
|
||||||
}).then(() => {
|
|
||||||
return this.handleInclude();
|
|
||||||
}).then(() => {
|
|
||||||
return this.response;
|
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
// Uses the Auth object to get the list of roles, adds the user id
|
// Uses the Auth object to get the list of roles, adds the user id
|
||||||
RestQuery.prototype.getUserAndRoleACL = function() {
|
RestQuery.prototype.getUserAndRoleACL = function() {
|
||||||
|
|||||||
Reference in New Issue
Block a user