Skip to content

Commit 02bbba7

Browse files
committed
Adds tests over LiveQueryController to ensure data is correctly transmitted
1 parent 7cf29bf commit 02bbba7

File tree

1 file changed

+140
-96
lines changed

1 file changed

+140
-96
lines changed

spec/ParseLiveQueryServer.spec.js

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

56
// Global mock info
67
const queryHashValue = 'hash';
@@ -141,86 +142,6 @@ describe('ParseLiveQueryServer', function() {
141142
parseServer.server.close(() => done());
142143
});
143144

144-
it('properly passes the CLP to afterSave/afterDelete hook', function(done) {
145-
function setPermissionsOnClass(className, permissions, doPut) {
146-
var request = require('request');
147-
let op = request.post;
148-
if (doPut)
149-
{
150-
op = request.put;
151-
}
152-
return new Promise((resolve, reject) => {
153-
op({
154-
url: Parse.serverURL + '/schemas/' + className,
155-
headers: {
156-
'X-Parse-Application-Id': Parse.applicationId,
157-
'X-Parse-Master-Key': Parse.masterKey,
158-
},
159-
json: true,
160-
body: {
161-
classLevelPermissions: permissions
162-
}
163-
}, (error, response, body) => {
164-
if (error) {
165-
return reject(error);
166-
}
167-
if (body.error) {
168-
return reject(body);
169-
}
170-
return resolve(body);
171-
})
172-
});
173-
}
174-
175-
let saveSpy;
176-
let deleteSpy;
177-
reconfigureServer({
178-
liveQuery: {
179-
classNames: ['Yolo']
180-
}
181-
}).then((parseServer) => {
182-
saveSpy = spyOn(parseServer.config.liveQueryController, 'onAfterSave');
183-
deleteSpy = spyOn(parseServer.config.liveQueryController, 'onAfterDelete');
184-
return setPermissionsOnClass('Yolo', {
185-
create: {'*': true},
186-
delete: {'*': true}
187-
})
188-
}).then(() => {
189-
const obj = new Parse.Object('Yolo');
190-
return obj.save();
191-
}).then((obj) => {
192-
return obj.destroy();
193-
}).then(() => {
194-
expect(saveSpy).toHaveBeenCalled();
195-
const saveArgs = saveSpy.calls.mostRecent().args;
196-
expect(saveArgs.length).toBe(4);
197-
expect(saveArgs[0]).toBe('Yolo');
198-
expect(saveArgs[3]).toEqual({
199-
get: {},
200-
addField: {},
201-
create: {'*': true},
202-
find: {},
203-
update: {},
204-
delete: {'*': true},
205-
});
206-
207-
expect(deleteSpy).toHaveBeenCalled();
208-
const deleteArgs = deleteSpy.calls.mostRecent().args;
209-
expect(deleteArgs.length).toBe(4);
210-
expect(deleteArgs[0]).toBe('Yolo');
211-
expect(deleteArgs[3]).toEqual({
212-
get: {},
213-
addField: {},
214-
create: {'*': true},
215-
find: {},
216-
update: {},
217-
delete: {'*': true},
218-
});
219-
done();
220-
}).catch(done.fail);
221-
});
222-
223-
224145
it('can handle connect command', function() {
225146
const parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
226147
const parseWebSocket = {
@@ -1159,17 +1080,17 @@ describe('ParseLiveQueryServer', function() {
11591080

11601081
describe('class level permissions', () => {
11611082
it('matches CLP when find is closed', (done) => {
1162-
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1163-
var acl = new Parse.ACL();
1083+
const parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1084+
const acl = new Parse.ACL();
11641085
acl.setReadAccess(testUserId, true);
11651086
// Mock sessionTokenCache will return false when sessionToken is undefined
1166-
var client = {
1087+
const client = {
11671088
sessionToken: 'sessionToken',
11681089
getSubscriptionInfo: jasmine.createSpy('getSubscriptionInfo').and.returnValue({
11691090
sessionToken: undefined
11701091
})
11711092
};
1172-
var requestId = 0;
1093+
const requestId = 0;
11731094

11741095
parseLiveQueryServer._matchesCLP({
11751096
find: {}
@@ -1180,17 +1101,17 @@ describe('ParseLiveQueryServer', function() {
11801101
});
11811102

11821103
it('matches CLP when find is open', (done) => {
1183-
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1184-
var acl = new Parse.ACL();
1104+
const parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1105+
const acl = new Parse.ACL();
11851106
acl.setReadAccess(testUserId, true);
11861107
// Mock sessionTokenCache will return false when sessionToken is undefined
1187-
var client = {
1108+
const client = {
11881109
sessionToken: 'sessionToken',
11891110
getSubscriptionInfo: jasmine.createSpy('getSubscriptionInfo').and.returnValue({
11901111
sessionToken: undefined
11911112
})
11921113
};
1193-
var requestId = 0;
1114+
const requestId = 0;
11941115

11951116
parseLiveQueryServer._matchesCLP({
11961117
find: { '*': true }
@@ -1201,17 +1122,17 @@ describe('ParseLiveQueryServer', function() {
12011122
});
12021123

12031124
it('matches CLP when find is restricted to userIds', (done) => {
1204-
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1205-
var acl = new Parse.ACL();
1125+
const parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1126+
const acl = new Parse.ACL();
12061127
acl.setReadAccess(testUserId, true);
12071128
// Mock sessionTokenCache will return false when sessionToken is undefined
1208-
var client = {
1129+
const client = {
12091130
sessionToken: 'sessionToken',
12101131
getSubscriptionInfo: jasmine.createSpy('getSubscriptionInfo').and.returnValue({
12111132
sessionToken: 'userId'
12121133
})
12131134
};
1214-
var requestId = 0;
1135+
const requestId = 0;
12151136

12161137
parseLiveQueryServer._matchesCLP({
12171138
find: { 'userId': true }
@@ -1222,17 +1143,17 @@ describe('ParseLiveQueryServer', function() {
12221143
});
12231144

12241145
it('matches CLP when find is restricted to userIds', (done) => {
1225-
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1226-
var acl = new Parse.ACL();
1146+
const parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
1147+
const acl = new Parse.ACL();
12271148
acl.setReadAccess(testUserId, true);
12281149
// Mock sessionTokenCache will return false when sessionToken is undefined
1229-
var client = {
1150+
const client = {
12301151
sessionToken: 'sessionToken',
12311152
getSubscriptionInfo: jasmine.createSpy('getSubscriptionInfo').and.returnValue({
12321153
sessionToken: undefined
12331154
})
12341155
};
1235-
var requestId = 0;
1156+
const requestId = 0;
12361157

12371158
parseLiveQueryServer._matchesCLP({
12381159
find: { 'userId': true }
@@ -1450,3 +1371,126 @@ describe('ParseLiveQueryServer', function() {
14501371
return message;
14511372
}
14521373
});
1374+
1375+
describe('LiveQueryController', () => {
1376+
it('properly passes the CLP to afterSave/afterDelete hook', function(done) {
1377+
function setPermissionsOnClass(className, permissions, doPut) {
1378+
const request = require('request');
1379+
let op = request.post;
1380+
if (doPut)
1381+
{
1382+
op = request.put;
1383+
}
1384+
return new Promise((resolve, reject) => {
1385+
op({
1386+
url: Parse.serverURL + '/schemas/' + className,
1387+
headers: {
1388+
'X-Parse-Application-Id': Parse.applicationId,
1389+
'X-Parse-Master-Key': Parse.masterKey,
1390+
},
1391+
json: true,
1392+
body: {
1393+
classLevelPermissions: permissions
1394+
}
1395+
}, (error, response, body) => {
1396+
if (error) {
1397+
return reject(error);
1398+
}
1399+
if (body.error) {
1400+
return reject(body);
1401+
}
1402+
return resolve(body);
1403+
})
1404+
});
1405+
}
1406+
1407+
let saveSpy;
1408+
let deleteSpy;
1409+
reconfigureServer({
1410+
liveQuery: {
1411+
classNames: ['Yolo']
1412+
}
1413+
}).then((parseServer) => {
1414+
saveSpy = spyOn(parseServer.config.liveQueryController, 'onAfterSave').and.callThrough();
1415+
deleteSpy = spyOn(parseServer.config.liveQueryController, 'onAfterDelete').and.callThrough();
1416+
return setPermissionsOnClass('Yolo', {
1417+
create: {'*': true},
1418+
delete: {'*': true}
1419+
})
1420+
}).then(() => {
1421+
const obj = new Parse.Object('Yolo');
1422+
return obj.save();
1423+
}).then((obj) => {
1424+
return obj.destroy();
1425+
}).then(() => {
1426+
expect(saveSpy).toHaveBeenCalled();
1427+
const saveArgs = saveSpy.calls.mostRecent().args;
1428+
expect(saveArgs.length).toBe(4);
1429+
expect(saveArgs[0]).toBe('Yolo');
1430+
expect(saveArgs[3]).toEqual({
1431+
get: {},
1432+
addField: {},
1433+
create: {'*': true},
1434+
find: {},
1435+
update: {},
1436+
delete: {'*': true},
1437+
});
1438+
1439+
expect(deleteSpy).toHaveBeenCalled();
1440+
const deleteArgs = deleteSpy.calls.mostRecent().args;
1441+
expect(deleteArgs.length).toBe(4);
1442+
expect(deleteArgs[0]).toBe('Yolo');
1443+
expect(deleteArgs[3]).toEqual({
1444+
get: {},
1445+
addField: {},
1446+
create: {'*': true},
1447+
find: {},
1448+
update: {},
1449+
delete: {'*': true},
1450+
});
1451+
done();
1452+
}).catch(done.fail);
1453+
});
1454+
1455+
it('should properly pack message request on afterSave', () => {
1456+
const controller = new LiveQueryController({
1457+
classNames: ['Yolo'],
1458+
});
1459+
const spy = spyOn(controller.liveQueryPublisher, 'onCloudCodeAfterSave');
1460+
controller.onAfterSave('Yolo', {o: 1}, {o:2}, {yolo: true});
1461+
expect(spy).toHaveBeenCalled()
1462+
const args = spy.calls.mostRecent().args;
1463+
expect(args.length).toBe(1);
1464+
expect(args[0]).toEqual({
1465+
object: {o: 1},
1466+
original: {o: 2},
1467+
classLevelPermissions: {yolo: true}
1468+
})
1469+
});
1470+
1471+
it('should properly pack message request on afterDelete', () => {
1472+
const controller = new LiveQueryController({
1473+
classNames: ['Yolo'],
1474+
});
1475+
const spy = spyOn(controller.liveQueryPublisher, 'onCloudCodeAfterDelete');
1476+
controller.onAfterDelete('Yolo', {o: 1}, {o:2}, {yolo: true});
1477+
expect(spy).toHaveBeenCalled()
1478+
const args = spy.calls.mostRecent().args;
1479+
expect(args.length).toBe(1);
1480+
expect(args[0]).toEqual({
1481+
object: {o: 1},
1482+
original: {o: 2},
1483+
classLevelPermissions: {yolo: true}
1484+
})
1485+
});
1486+
1487+
it('should properly pack message request', () => {
1488+
const controller = new LiveQueryController({
1489+
classNames: ['Yolo'],
1490+
});
1491+
expect(controller._makePublisherRequest({})).toEqual({
1492+
object: {},
1493+
original: undefined,
1494+
});
1495+
});
1496+
});

0 commit comments

Comments
 (0)