1
1
const Parse = require ( 'parse/node' ) ;
2
2
const ParseLiveQueryServer = require ( '../src/LiveQuery/ParseLiveQueryServer' ) . ParseLiveQueryServer ;
3
3
const ParseServer = require ( '../src/ParseServer' ) . default ;
4
+ const LiveQueryController = require ( '../src/Controllers/LiveQueryController' ) . LiveQueryController ;
4
5
5
6
// Global mock info
6
7
const queryHashValue = 'hash' ;
@@ -141,86 +142,6 @@ describe('ParseLiveQueryServer', function() {
141
142
parseServer . server . close ( ( ) => done ( ) ) ;
142
143
} ) ;
143
144
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
-
224
145
it ( 'can handle connect command' , function ( ) {
225
146
const parseLiveQueryServer = new ParseLiveQueryServer ( 10 , 10 , { } ) ;
226
147
const parseWebSocket = {
@@ -1159,17 +1080,17 @@ describe('ParseLiveQueryServer', function() {
1159
1080
1160
1081
describe ( 'class level permissions' , ( ) => {
1161
1082
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 ( ) ;
1164
1085
acl . setReadAccess ( testUserId , true ) ;
1165
1086
// Mock sessionTokenCache will return false when sessionToken is undefined
1166
- var client = {
1087
+ const client = {
1167
1088
sessionToken : 'sessionToken' ,
1168
1089
getSubscriptionInfo : jasmine . createSpy ( 'getSubscriptionInfo' ) . and . returnValue ( {
1169
1090
sessionToken : undefined
1170
1091
} )
1171
1092
} ;
1172
- var requestId = 0 ;
1093
+ const requestId = 0 ;
1173
1094
1174
1095
parseLiveQueryServer . _matchesCLP ( {
1175
1096
find : { }
@@ -1180,17 +1101,17 @@ describe('ParseLiveQueryServer', function() {
1180
1101
} ) ;
1181
1102
1182
1103
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 ( ) ;
1185
1106
acl . setReadAccess ( testUserId , true ) ;
1186
1107
// Mock sessionTokenCache will return false when sessionToken is undefined
1187
- var client = {
1108
+ const client = {
1188
1109
sessionToken : 'sessionToken' ,
1189
1110
getSubscriptionInfo : jasmine . createSpy ( 'getSubscriptionInfo' ) . and . returnValue ( {
1190
1111
sessionToken : undefined
1191
1112
} )
1192
1113
} ;
1193
- var requestId = 0 ;
1114
+ const requestId = 0 ;
1194
1115
1195
1116
parseLiveQueryServer . _matchesCLP ( {
1196
1117
find : { '*' : true }
@@ -1201,17 +1122,17 @@ describe('ParseLiveQueryServer', function() {
1201
1122
} ) ;
1202
1123
1203
1124
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 ( ) ;
1206
1127
acl . setReadAccess ( testUserId , true ) ;
1207
1128
// Mock sessionTokenCache will return false when sessionToken is undefined
1208
- var client = {
1129
+ const client = {
1209
1130
sessionToken : 'sessionToken' ,
1210
1131
getSubscriptionInfo : jasmine . createSpy ( 'getSubscriptionInfo' ) . and . returnValue ( {
1211
1132
sessionToken : 'userId'
1212
1133
} )
1213
1134
} ;
1214
- var requestId = 0 ;
1135
+ const requestId = 0 ;
1215
1136
1216
1137
parseLiveQueryServer . _matchesCLP ( {
1217
1138
find : { 'userId' : true }
@@ -1222,17 +1143,17 @@ describe('ParseLiveQueryServer', function() {
1222
1143
} ) ;
1223
1144
1224
1145
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 ( ) ;
1227
1148
acl . setReadAccess ( testUserId , true ) ;
1228
1149
// Mock sessionTokenCache will return false when sessionToken is undefined
1229
- var client = {
1150
+ const client = {
1230
1151
sessionToken : 'sessionToken' ,
1231
1152
getSubscriptionInfo : jasmine . createSpy ( 'getSubscriptionInfo' ) . and . returnValue ( {
1232
1153
sessionToken : undefined
1233
1154
} )
1234
1155
} ;
1235
- var requestId = 0 ;
1156
+ const requestId = 0 ;
1236
1157
1237
1158
parseLiveQueryServer . _matchesCLP ( {
1238
1159
find : { 'userId' : true }
@@ -1450,3 +1371,126 @@ describe('ParseLiveQueryServer', function() {
1450
1371
return message ;
1451
1372
}
1452
1373
} ) ;
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