@@ -229,7 +229,7 @@ describe('batch', () => {
229
229
transaction : true ,
230
230
} ) ,
231
231
} ) . catch ( error => {
232
- expect ( error . data . error ) . toEqual ( 'Could not add field key' ) ;
232
+ expect ( error . data ) . toBeDefined ( ) ;
233
233
const query = new Parse . Query ( 'MyObject' ) ;
234
234
query . find ( ) . then ( results => {
235
235
expect ( results . length ) . toBe ( 0 ) ;
@@ -238,74 +238,46 @@ describe('batch', () => {
238
238
} ) ;
239
239
} ) ;
240
240
241
- xit ( 'should generate separate session for each call' , done => {
242
- let myObjectCalls = 0 ;
243
- //let myObjectTransactionalSession = null;
244
-
245
- Parse . Cloud . afterSave ( 'MyObject' , ( ) => {
246
- console . log ( 1 ) ;
247
- } ) ;
248
- Parse . Cloud . afterSave ( 'MyObject2' , ( ) => {
249
- console . log ( 2 ) ;
250
- } ) ;
251
- Parse . Cloud . afterSave ( 'MyObject3' , ( ) => {
252
- console . log ( 3 ) ;
253
- } ) ;
241
+ it ( 'should generate separate session for each call' , async ( ) => {
242
+ spyOn ( databaseAdapter , 'createObject' ) . and . callThrough ( ) ;
254
243
255
- Parse . Cloud . beforeSave ( 'MyObject' , ( /*{ database }*/ ) => {
244
+ let myObjectCalls = 0 ;
245
+ Parse . Cloud . beforeSave ( 'MyObject' , async ( ) => {
256
246
myObjectCalls ++ ;
257
- // expect(database._transactionalSession).not.toEqual(null);
258
- // if (myObjectTransactionalSession) {
259
- // expect(database._transactionalSession).toBe(
260
- // myObjectTransactionalSession
261
- // );
262
- // } else {
263
- // myObjectTransactionalSession =
264
- // database._transactionalSession;
265
- // }
266
-
267
- if ( myObjectCalls === 1 ) {
268
- return request ( {
269
- method : 'POST' ,
270
- headers : headers ,
271
- url : 'http://localhost:8378/1/batch' ,
272
- body : JSON . stringify ( {
273
- requests : [
274
- {
275
- method : 'POST' ,
276
- path : '/1/classes/MyObject2' ,
277
- body : { key : 'value1' } ,
278
- } ,
279
- {
280
- method : 'POST' ,
281
- path : '/1/classes/MyObject2' ,
282
- body : { key : 'value2' } ,
283
- } ,
284
- ] ,
285
- transaction : false ,
286
- } ) ,
287
- } ) . then ( response => {
288
- console . log ( response . data [ 0 ] . error ) ;
289
- return Promise . resolve ( ) ;
290
- } ) ;
247
+ if ( myObjectCalls === 2 ) {
248
+ try {
249
+ await request ( {
250
+ method : 'POST' ,
251
+ headers : headers ,
252
+ url : 'http://localhost:8378/1/batch' ,
253
+ body : JSON . stringify ( {
254
+ requests : [
255
+ {
256
+ method : 'POST' ,
257
+ path : '/1/classes/MyObject2' ,
258
+ body : { key : 'value1' } ,
259
+ } ,
260
+ {
261
+ method : 'POST' ,
262
+ path : '/1/classes/MyObject2' ,
263
+ body : { key : 10 } ,
264
+ } ,
265
+ ] ,
266
+ transaction : true ,
267
+ } ) ,
268
+ } ) ;
269
+ fail ( 'should fail' ) ;
270
+ } catch ( e ) {
271
+ expect ( e ) . toBeDefined ( ) ;
272
+ }
291
273
}
292
274
} ) ;
293
275
294
276
let myObject2Calls = 0 ;
295
- //let myObject2TransactionalSession = null;
296
- Parse . Cloud . beforeSave ( 'MyObject2' , ( /*{ database }*/ ) => {
277
+ Parse . Cloud . beforeSave ( 'MyObject2' , async ( ) => {
297
278
myObject2Calls ++ ;
298
- // expect(database._transactionalSession).not.toEqual(null);
299
- // if (myObject2TransactionalSession) {
300
- // expect(database._transactionalSession).toBe(
301
- // myObject2TransactionalSession
302
- // );
303
- // } else {
304
- // myObject2TransactionalSession =
305
- // database._transactionalSession;
306
- // }
307
- if ( myObject2Calls === 1 ) {
308
- return request ( {
279
+ if ( myObject2Calls === 2 ) {
280
+ await request ( {
309
281
method : 'POST' ,
310
282
headers : headers ,
311
283
url : 'http://localhost:8378/1/batch' ,
@@ -323,20 +295,11 @@ describe('batch', () => {
323
295
} ,
324
296
] ,
325
297
} ) ,
326
- } ) . then ( response => {
327
- console . log ( response . data ) ;
328
- return Promise . resolve ( ) ;
329
298
} ) ;
330
299
}
331
300
} ) ;
332
301
333
- let myObject3Calls = 0 ;
334
- Parse . Cloud . beforeSave ( 'MyObject3' , ( { database } ) => {
335
- myObject3Calls ++ ;
336
- expect ( database . _transactionalSession ) . toEqual ( null ) ;
337
- } ) ;
338
-
339
- request ( {
302
+ const response = await request ( {
340
303
method : 'POST' ,
341
304
headers : headers ,
342
305
url : 'http://localhost:8378/1/batch' ,
@@ -355,33 +318,68 @@ describe('batch', () => {
355
318
] ,
356
319
transaction : true ,
357
320
} ) ,
358
- } ) . then ( response => {
359
- console . log ( response . data ) ;
360
- const query = new Parse . Query ( 'MyObject' ) ;
361
- query . find ( ) . then ( results => {
362
- expect ( myObjectCalls ) . toBe ( 2 ) ;
363
- expect ( results . map ( result => result . get ( 'key' ) ) . sort ( ) ) . toEqual ( [
364
- 'value1' ,
365
- 'value2' ,
366
- ] ) ;
367
- const query = new Parse . Query ( 'MyObject2' ) ;
368
- query . find ( ) . then ( results => {
369
- expect ( myObject2Calls ) . toBe ( 2 ) ;
370
- expect ( results . map ( result => result . get ( 'key' ) ) . sort ( ) ) . toEqual ( [
371
- 'value1' ,
372
- 'value2' ,
373
- ] ) ;
374
- const query = new Parse . Query ( 'MyObject3' ) ;
375
- query . find ( ) . then ( results => {
376
- expect ( myObject3Calls ) . toBe ( 2 ) ;
377
- expect ( results . map ( result => result . get ( 'key' ) ) . sort ( ) ) . toEqual (
378
- [ 'value1' , 'value2' ]
379
- ) ;
380
- done ( ) ;
381
- } ) ;
382
- } ) ;
383
- } ) ;
384
321
} ) ;
322
+
323
+ expect ( response . data . length ) . toEqual ( 2 ) ;
324
+ expect ( response . data [ 0 ] . success . objectId ) . toBeDefined ( ) ;
325
+ expect ( response . data [ 0 ] . success . createdAt ) . toBeDefined ( ) ;
326
+ expect ( response . data [ 1 ] . success . objectId ) . toBeDefined ( ) ;
327
+ expect ( response . data [ 1 ] . success . createdAt ) . toBeDefined ( ) ;
328
+
329
+ const query = new Parse . Query ( 'MyObject' ) ;
330
+ const results = await query . find ( ) ;
331
+ expect ( results . map ( result => result . get ( 'key' ) ) . sort ( ) ) . toEqual ( [
332
+ 'value1' ,
333
+ 'value2' ,
334
+ ] ) ;
335
+
336
+ const query2 = new Parse . Query ( 'MyObject2' ) ;
337
+ const results2 = await query2 . find ( ) ;
338
+ expect ( results2 . length ) . toEqual ( 0 ) ;
339
+
340
+ const query3 = new Parse . Query ( 'MyObject3' ) ;
341
+ const results3 = await query3 . find ( ) ;
342
+ expect ( results3 . map ( result => result . get ( 'key' ) ) . sort ( ) ) . toEqual ( [
343
+ 'value1' ,
344
+ 'value2' ,
345
+ ] ) ;
346
+
347
+ expect ( databaseAdapter . createObject . calls . count ( ) ) . toBe ( 5 ) ;
348
+ let transactionalSession ;
349
+ let transactionalSession2 ;
350
+ let myObjectDBCalls = 0 ;
351
+ let myObject2DBCalls = 0 ;
352
+ let myObject3DBCalls = 0 ;
353
+ for ( let i = 0 ; i < 5 ; i ++ ) {
354
+ const args = databaseAdapter . createObject . calls . argsFor ( i ) ;
355
+ switch ( args [ 0 ] ) {
356
+ case 'MyObject' :
357
+ myObjectDBCalls ++ ;
358
+ if ( ! transactionalSession ) {
359
+ transactionalSession = args [ 3 ] ;
360
+ } else {
361
+ expect ( transactionalSession ) . toBe ( args [ 3 ] ) ;
362
+ }
363
+ if ( transactionalSession2 ) {
364
+ expect ( transactionalSession2 ) . not . toBe ( args [ 3 ] ) ;
365
+ }
366
+ break ;
367
+ case 'MyObject2' :
368
+ myObject2DBCalls ++ ;
369
+ transactionalSession2 = args [ 3 ] ;
370
+ if ( transactionalSession ) {
371
+ expect ( transactionalSession ) . not . toBe ( args [ 3 ] ) ;
372
+ }
373
+ break ;
374
+ case 'MyObject3' :
375
+ myObject3DBCalls ++ ;
376
+ expect ( args [ 3 ] ) . toEqual ( null ) ;
377
+ break ;
378
+ }
379
+ }
380
+ expect ( myObjectDBCalls ) . toEqual ( 2 ) ;
381
+ expect ( myObject2DBCalls ) . toEqual ( 1 ) ;
382
+ expect ( myObject3DBCalls ) . toEqual ( 2 ) ;
385
383
} ) ;
386
384
} ) ;
387
385
}
0 commit comments