Skip to content

Commit b703ec8

Browse files
authored
Fix for #4194 - me no likey much (#4198)
* Adds failing test for #4194 * Use the rest module instad of the Parse._request - Some users have an invalid serverUrl passed in the options * removes console.logs, fixes tests that leveraged Parse._request
1 parent 70ca7bd commit b703ec8

File tree

3 files changed

+96
-52
lines changed

3 files changed

+96
-52
lines changed

spec/PushController.spec.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,62 @@ describe('PushController', () => {
503503
.then(done).catch(done.fail);
504504
});
505505

506+
it('properly creates _PushStatus without serverURL', (done) => {
507+
const pushStatusAfterSave = {
508+
handler: function() {}
509+
};
510+
Parse.Cloud.afterSave('_PushStatus', pushStatusAfterSave.handler);
511+
const installation = new Parse.Object("_Installation");
512+
installation.set("installationId", "installation");
513+
installation.set("deviceToken","device_token")
514+
installation.set("badge", 0);
515+
installation.set("originalBadge", 0);
516+
installation.set("deviceType", "ios");
517+
518+
var payload = {data: {
519+
alert: "Hello World!",
520+
badge: 1,
521+
}}
522+
523+
var pushAdapter = {
524+
send: function(body, installations) {
525+
return successfulIOS(body, installations);
526+
},
527+
getValidPushTypes: function() {
528+
return ["ios"];
529+
}
530+
}
531+
532+
var config = new Config(Parse.applicationId);
533+
var auth = {
534+
isMaster: true
535+
}
536+
var pushController = new PushController();
537+
return installation.save().then(() => {
538+
return reconfigureServer({
539+
serverURL: 'http://localhost:8378/', // server with borked URL
540+
push: { adapter: pushAdapter }
541+
})
542+
})
543+
.then(() => {
544+
return pushController.sendPush(payload, {}, config, auth);
545+
}).then(() => {
546+
// it is enqueued so it can take time
547+
return new Promise((resolve) => {
548+
setTimeout(() => {
549+
resolve();
550+
}, 1000);
551+
});
552+
}).then(() => {
553+
Parse.serverURL = 'http://localhost:8378/1'; // GOOD url
554+
const query = new Parse.Query('_PushStatus');
555+
return query.find({useMasterKey: true});
556+
}).then((results) => {
557+
expect(results.length).toBe(1);
558+
})
559+
.then(done).catch(done.fail);
560+
});
561+
506562
it('should properly report failures in _PushStatus', (done) => {
507563
var pushAdapter = {
508564
send: function(body, installations) {

spec/PushWorker.spec.js

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var PushWorker = require('../src').PushWorker;
22
var PushUtils = require('../src/Push/utils');
33
var Config = require('../src/Config');
44
var { pushStatusHandler } = require('../src/StatusHandler');
5+
var rest = require('../src/rest');
56

67
describe('PushWorker', () => {
78
it('should run with small batch', (done) => {
@@ -245,7 +246,7 @@ describe('PushWorker', () => {
245246
it('tracks push status per UTC offsets', (done) => {
246247
const config = new Config('test');
247248
const handler = pushStatusHandler(config);
248-
const spy = spyOn(Parse, "_request").and.callThrough();
249+
const spy = spyOn(rest, "update").and.callThrough();
249250
const UTCOffset = 1;
250251
handler.setInitial().then(() => {
251252
return handler.trackSent([
@@ -267,9 +268,8 @@ describe('PushWorker', () => {
267268
}).then(() => {
268269
expect(spy).toHaveBeenCalled();
269270
const lastCall = spy.calls.mostRecent();
270-
expect(lastCall.args[0]).toBe('PUT');
271-
expect(lastCall.args[1]).toBe(`classes/_PushStatus/${handler.objectId}`);
272-
expect(lastCall.args[2]).toEqual({
271+
expect(lastCall.args[2]).toBe(`_PushStatus`);
272+
expect(lastCall.args[4]).toEqual({
273273
numSent: { __op: 'Increment', amount: 1 },
274274
numFailed: { __op: 'Increment', amount: 1 },
275275
'sentPerType.ios': { __op: 'Increment', amount: 1 },
@@ -322,35 +322,32 @@ describe('PushWorker', () => {
322322
it('tracks push status per UTC offsets with negative offsets', (done) => {
323323
const config = new Config('test');
324324
const handler = pushStatusHandler(config);
325-
spyOn(config.database, "create").and.callFake(() => {
326-
return Promise.resolve();
327-
});
328-
const spy = spyOn(Parse, "_request").and.callFake(() => {
329-
return Promise.resolve();
330-
});
325+
const spy = spyOn(rest, "update").and.callThrough();
331326
const UTCOffset = -6;
332-
handler.trackSent([
333-
{
334-
transmitted: false,
335-
device: {
336-
deviceToken: 1,
337-
deviceType: 'ios',
327+
handler.setInitial().then(() => {
328+
return handler.trackSent([
329+
{
330+
transmitted: false,
331+
device: {
332+
deviceToken: 1,
333+
deviceType: 'ios',
334+
},
335+
response: { error: 'Unregistered' }
338336
},
339-
response: { error: 'Unregistered' }
340-
},
341-
{
342-
transmitted: true,
343-
device: {
344-
deviceToken: 1,
345-
deviceType: 'ios',
337+
{
338+
transmitted: true,
339+
device: {
340+
deviceToken: 1,
341+
deviceType: 'ios',
342+
},
343+
response: { error: 'Unregistered' }
346344
},
347-
response: { error: 'Unregistered' }
348-
},
349-
], UTCOffset).then(() => {
345+
], UTCOffset);
346+
}).then(() => {
350347
expect(spy).toHaveBeenCalled();
351348
const lastCall = spy.calls.mostRecent();
352-
expect(lastCall.args[1]).toBe(`classes/_PushStatus/${handler.objectId}`);
353-
expect(lastCall.args[2]).toEqual({
349+
expect(lastCall.args[2]).toBe('_PushStatus');
350+
expect(lastCall.args[4]).toEqual({
354351
numSent: { __op: 'Increment', amount: 1 },
355352
numFailed: { __op: 'Increment', amount: 1 },
356353
'sentPerType.ios': { __op: 'Increment', amount: 1 },

src/StatusHandler.js

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { md5Hash, newObjectId } from './cryptoUtils';
22
import { logger } from './logger';
3-
import Parse from 'parse/node';
3+
import rest from './rest';
4+
import Auth from './Auth';
45

56
const PUSH_STATUS_COLLECTION = '_PushStatus';
67
const JOB_STATUS_COLLECTION = '_JobStatus';
@@ -51,37 +52,28 @@ function statusHandler(className, database) {
5152
})
5253
}
5354

54-
function restStatusHandler(className) {
55+
function restStatusHandler(className, config) {
5556
let lastPromise = Promise.resolve();
56-
57+
const auth = Auth.master(config);
5758
function create(object) {
5859
lastPromise = lastPromise.then(() => {
59-
return Parse._request(
60-
'POST',
61-
`classes/${className}`,
62-
object,
63-
{ useMasterKey: true }
64-
).then((result) => {
65-
// merge the objects
66-
const response = Object.assign({}, object, result);
67-
return Promise.resolve(response);
68-
});
60+
return rest.create(config, auth, className, object)
61+
.then(({ response }) => {
62+
// merge the objects
63+
return Promise.resolve(Object.assign({}, object, response));
64+
});
6965
});
7066
return lastPromise;
7167
}
7268

7369
function update(where, object) {
7470
// TODO: when we have updateWhere, use that for proper interfacing
7571
lastPromise = lastPromise.then(() => {
76-
return Parse._request(
77-
'PUT',
78-
`classes/${className}/${where.objectId}`,
79-
object,
80-
{ useMasterKey: true }).then((result) => {
81-
// merge the objects
82-
const response = Object.assign({}, object, result);
83-
return Promise.resolve(response);
84-
});
72+
return rest.update(config, auth, className, { objectId: where.objectId }, object)
73+
.then(({ response }) => {
74+
// merge the objects
75+
return Promise.resolve(Object.assign({}, object, response));
76+
});
8577
});
8678
return lastPromise;
8779
}
@@ -149,7 +141,7 @@ export function pushStatusHandler(config, existingObjectId) {
149141

150142
let pushStatus;
151143
const database = config.database;
152-
const handler = restStatusHandler(PUSH_STATUS_COLLECTION);
144+
const handler = restStatusHandler(PUSH_STATUS_COLLECTION, config);
153145
let objectId = existingObjectId;
154146
const setInitial = function(body = {}, where, options = {source: 'rest'}) {
155147
const now = new Date();
@@ -188,7 +180,6 @@ export function pushStatusHandler(config, existingObjectId) {
188180
// lockdown!
189181
ACL: {}
190182
}
191-
192183
return handler.create(object).then((result) => {
193184
objectId = result.objectId;
194185
pushStatus = {

0 commit comments

Comments
 (0)