Skip to content

Commit ec5af2f

Browse files
committed
Adds tests over LiveQueryController to ensure data is correctly transmitted
1 parent 3e31d7f commit ec5af2f

File tree

1 file changed

+124
-80
lines changed

1 file changed

+124
-80
lines changed

spec/ParseLiveQueryServer.spec.js

Lines changed: 124 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var Parse = require('parse/node');
22
var ParseLiveQueryServer = require('../src/LiveQuery/ParseLiveQueryServer').ParseLiveQueryServer;
33
var ParseServer = require('../src/ParseServer').default;
4+
var LiveQueryController = require('../src/Controllers/LiveQueryController').LiveQueryController;
45

56
// Global mock info
67
var queryHashValue = 'hash';
@@ -146,86 +147,6 @@ describe('ParseLiveQueryServer', function() {
146147
parseServer.server.close(done);
147148
});
148149

149-
it('properly passes the CLP to afterSave/afterDelete hook', function(done) {
150-
function setPermissionsOnClass(className, permissions, doPut) {
151-
var request = require('request');
152-
let op = request.post;
153-
if (doPut)
154-
{
155-
op = request.put;
156-
}
157-
return new Promise((resolve, reject) => {
158-
op({
159-
url: Parse.serverURL + '/schemas/' + className,
160-
headers: {
161-
'X-Parse-Application-Id': Parse.applicationId,
162-
'X-Parse-Master-Key': Parse.masterKey,
163-
},
164-
json: true,
165-
body: {
166-
classLevelPermissions: permissions
167-
}
168-
}, (error, response, body) => {
169-
if (error) {
170-
return reject(error);
171-
}
172-
if (body.error) {
173-
return reject(body);
174-
}
175-
return resolve(body);
176-
})
177-
});
178-
}
179-
180-
let saveSpy;
181-
let deleteSpy;
182-
reconfigureServer({
183-
liveQuery: {
184-
classNames: ['Yolo']
185-
}
186-
}).then((parseServer) => {
187-
saveSpy = spyOn(parseServer.config.liveQueryController, 'onAfterSave');
188-
deleteSpy = spyOn(parseServer.config.liveQueryController, 'onAfterDelete');
189-
return setPermissionsOnClass('Yolo', {
190-
create: {'*': true},
191-
delete: {'*': true}
192-
})
193-
}).then(() => {
194-
const obj = new Parse.Object('Yolo');
195-
return obj.save();
196-
}).then((obj) => {
197-
return obj.destroy();
198-
}).then(() => {
199-
expect(saveSpy).toHaveBeenCalled();
200-
const saveArgs = saveSpy.calls.mostRecent().args;
201-
expect(saveArgs.length).toBe(4);
202-
expect(saveArgs[0]).toBe('Yolo');
203-
expect(saveArgs[3]).toEqual({
204-
get: {},
205-
addField: {},
206-
create: {'*': true},
207-
find: {},
208-
update: {},
209-
delete: {'*': true},
210-
});
211-
212-
expect(deleteSpy).toHaveBeenCalled();
213-
const deleteArgs = deleteSpy.calls.mostRecent().args;
214-
expect(deleteArgs.length).toBe(4);
215-
expect(deleteArgs[0]).toBe('Yolo');
216-
expect(deleteArgs[3]).toEqual({
217-
get: {},
218-
addField: {},
219-
create: {'*': true},
220-
find: {},
221-
update: {},
222-
delete: {'*': true},
223-
});
224-
done();
225-
}).catch(done.fail);
226-
});
227-
228-
229150
it('can handle connect command', function() {
230151
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
231152
var parseWebSocket = {
@@ -1431,3 +1352,126 @@ describe('ParseLiveQueryServer', function() {
14311352
return message;
14321353
}
14331354
});
1355+
1356+
describe('LiveQueryController', () => {
1357+
it('properly passes the CLP to afterSave/afterDelete hook', function(done) {
1358+
function setPermissionsOnClass(className, permissions, doPut) {
1359+
var request = require('request');
1360+
let op = request.post;
1361+
if (doPut)
1362+
{
1363+
op = request.put;
1364+
}
1365+
return new Promise((resolve, reject) => {
1366+
op({
1367+
url: Parse.serverURL + '/schemas/' + className,
1368+
headers: {
1369+
'X-Parse-Application-Id': Parse.applicationId,
1370+
'X-Parse-Master-Key': Parse.masterKey,
1371+
},
1372+
json: true,
1373+
body: {
1374+
classLevelPermissions: permissions
1375+
}
1376+
}, (error, response, body) => {
1377+
if (error) {
1378+
return reject(error);
1379+
}
1380+
if (body.error) {
1381+
return reject(body);
1382+
}
1383+
return resolve(body);
1384+
})
1385+
});
1386+
}
1387+
1388+
let saveSpy;
1389+
let deleteSpy;
1390+
reconfigureServer({
1391+
liveQuery: {
1392+
classNames: ['Yolo']
1393+
}
1394+
}).then((parseServer) => {
1395+
saveSpy = spyOn(parseServer.config.liveQueryController, 'onAfterSave').and.callThrough();
1396+
deleteSpy = spyOn(parseServer.config.liveQueryController, 'onAfterDelete').and.callThrough();
1397+
return setPermissionsOnClass('Yolo', {
1398+
create: {'*': true},
1399+
delete: {'*': true}
1400+
})
1401+
}).then(() => {
1402+
const obj = new Parse.Object('Yolo');
1403+
return obj.save();
1404+
}).then((obj) => {
1405+
return obj.destroy();
1406+
}).then(() => {
1407+
expect(saveSpy).toHaveBeenCalled();
1408+
const saveArgs = saveSpy.calls.mostRecent().args;
1409+
expect(saveArgs.length).toBe(4);
1410+
expect(saveArgs[0]).toBe('Yolo');
1411+
expect(saveArgs[3]).toEqual({
1412+
get: {},
1413+
addField: {},
1414+
create: {'*': true},
1415+
find: {},
1416+
update: {},
1417+
delete: {'*': true},
1418+
});
1419+
1420+
expect(deleteSpy).toHaveBeenCalled();
1421+
const deleteArgs = deleteSpy.calls.mostRecent().args;
1422+
expect(deleteArgs.length).toBe(4);
1423+
expect(deleteArgs[0]).toBe('Yolo');
1424+
expect(deleteArgs[3]).toEqual({
1425+
get: {},
1426+
addField: {},
1427+
create: {'*': true},
1428+
find: {},
1429+
update: {},
1430+
delete: {'*': true},
1431+
});
1432+
done();
1433+
}).catch(done.fail);
1434+
});
1435+
1436+
it('should properly pack message request on afterSave', () => {
1437+
const controller = new LiveQueryController({
1438+
classNames: ['Yolo'],
1439+
});
1440+
const spy = spyOn(controller.liveQueryPublisher, 'onCloudCodeAfterSave');
1441+
controller.onAfterSave('Yolo', {o: 1}, {o:2}, {yolo: true});
1442+
expect(spy).toHaveBeenCalled()
1443+
const args = spy.calls.mostRecent().args;
1444+
expect(args.length).toBe(1);
1445+
expect(args[0]).toEqual({
1446+
object: {o: 1},
1447+
original: {o: 2},
1448+
classLevelPermissions: {yolo: true}
1449+
})
1450+
});
1451+
1452+
it('should properly pack message request on afterDelete', () => {
1453+
const controller = new LiveQueryController({
1454+
classNames: ['Yolo'],
1455+
});
1456+
const spy = spyOn(controller.liveQueryPublisher, 'onCloudCodeAfterDelete');
1457+
controller.onAfterDelete('Yolo', {o: 1}, {o:2}, {yolo: true});
1458+
expect(spy).toHaveBeenCalled()
1459+
const args = spy.calls.mostRecent().args;
1460+
expect(args.length).toBe(1);
1461+
expect(args[0]).toEqual({
1462+
object: {o: 1},
1463+
original: {o: 2},
1464+
classLevelPermissions: {yolo: true}
1465+
})
1466+
});
1467+
1468+
it('should properly pack message request', () => {
1469+
const controller = new LiveQueryController({
1470+
classNames: ['Yolo'],
1471+
});
1472+
expect(controller._makePublisherRequest({})).toEqual({
1473+
object: {},
1474+
original: undefined,
1475+
});
1476+
});
1477+
});

0 commit comments

Comments
 (0)