36
36
import org .neo4j .driver .util .DatabaseExtension ;
37
37
import org .neo4j .driver .util .ParallelizableIT ;
38
38
39
+ import static java .util .Collections .EMPTY_LIST ;
39
40
import static java .util .Collections .emptyList ;
40
41
import static java .util .Collections .singletonList ;
41
42
import static org .hamcrest .CoreMatchers .containsString ;
@@ -302,6 +303,154 @@ void shouldStreamCorrectRecordsBackBeforeError()
302
303
.verify ();
303
304
}
304
305
306
+ @ Test
307
+ void shouldErrorToAccessRecordAfterSessionClose ()
308
+ {
309
+ // Given
310
+ RxSession session = neo4j .driver ().rxSession ();
311
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
312
+
313
+ // When
314
+ StepVerifier .create ( Flux .from ( session .close () ).thenMany ( result .records () ) ).expectErrorSatisfies ( error -> {
315
+ assertThat ( error .getMessage (), containsString ( "session is already closed" ) );
316
+ } ).verify ();
317
+ }
318
+
319
+ @ Test
320
+ void shouldErrorToAccessKeysAfterSessionClose ()
321
+ {
322
+ // Given
323
+ RxSession session = neo4j .driver ().rxSession ();
324
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
325
+
326
+ // When
327
+ StepVerifier .create ( Flux .from ( session .close () ).thenMany ( result .keys () ) ).expectErrorSatisfies ( error -> {
328
+ assertThat ( error .getMessage (), containsString ( "session is already closed" ) );
329
+ } ).verify ();
330
+ }
331
+
332
+ @ Test
333
+ void shouldErrorToAccessSummaryAfterSessionClose ()
334
+ {
335
+ // Given
336
+ RxSession session = neo4j .driver ().rxSession ();
337
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
338
+
339
+ // When
340
+ StepVerifier .create ( Flux .from ( session .close () ).thenMany ( result .consume () ) ).expectErrorSatisfies ( error -> {
341
+ assertThat ( error .getMessage (), containsString ( "session is already closed" ) );
342
+ } ).verify ();
343
+ }
344
+
345
+ @ Test
346
+ void shouldErrorToAccessRecordAfterTxClose ()
347
+ {
348
+ // Given
349
+ RxSession session = neo4j .driver ().rxSession ();
350
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
351
+
352
+ // When
353
+ StepVerifier .create (
354
+ Flux .from ( session .beginTransaction () ).single ()
355
+ .flatMap ( tx -> Flux .from ( tx .rollback () ).singleOrEmpty ().thenReturn ( tx ) )
356
+ .flatMapMany ( tx -> tx .run ( "UNWIND [1,2] AS a RETURN a" ).records () ) )
357
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Cannot run more statements" ) ) )
358
+ .verify ();
359
+ }
360
+
361
+ @ Test
362
+ void shouldErrorToAccessKeysAfterTxClose ()
363
+ {
364
+ // Given
365
+ RxSession session = neo4j .driver ().rxSession ();
366
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
367
+
368
+ // When
369
+ StepVerifier .create (
370
+ Flux .from ( session .beginTransaction () ).single ()
371
+ .flatMap ( tx -> Flux .from ( tx .rollback () ).singleOrEmpty ().thenReturn ( tx ) )
372
+ .flatMapMany ( tx -> tx .run ( "UNWIND [1,2] AS a RETURN a" ).keys () ) )
373
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Cannot run more statements" ) ) )
374
+ .verify ();
375
+ }
376
+
377
+ @ Test
378
+ void shouldErrorToAccessSummaryAfterTxClose ()
379
+ {
380
+ // Given
381
+ RxSession session = neo4j .driver ().rxSession ();
382
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
383
+
384
+ // When
385
+ StepVerifier .create (
386
+ Flux .from ( session .beginTransaction () ).single ()
387
+ .flatMap ( tx -> Flux .from ( tx .rollback () ).singleOrEmpty ().thenReturn ( tx ) )
388
+ .flatMapMany ( tx -> tx .run ( "UNWIND [1,2] AS a RETURN a" ).consume () ) )
389
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Cannot run more statements" ) ) )
390
+ .verify ();
391
+ }
392
+
393
+ @ Test
394
+ void throwErrorAfterKeys ()
395
+ {
396
+ // Given
397
+ RxSession session = neo4j .driver ().rxSession ();
398
+ RxStatementResult result = session .run ( "UNWIND [1,2] AS a RETURN a" );
399
+
400
+ // When
401
+ StepVerifier .create (
402
+ Flux .from ( session .beginTransaction () ).single ()
403
+ .flatMap ( tx -> Flux .from ( tx .rollback () ).singleOrEmpty ().thenReturn ( tx ) )
404
+ .flatMapMany ( tx -> tx .run ( "UNWIND [1,2] AS a RETURN a" ).consume () ) )
405
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Cannot run more statements" ) ) )
406
+ .verify ();
407
+ }
408
+
409
+ @ Test
410
+ void throwTheSameErrorWhenCallingConsumeMultipleTimes ()
411
+ {
412
+ // Given
413
+ RxSession session = neo4j .driver ().rxSession ();
414
+ RxStatementResult result = session .run ( "Invalid" );
415
+
416
+ // When
417
+ StepVerifier .create ( Flux .from ( result .consume () ) )
418
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Invalid" ) ) )
419
+ .verify ();
420
+
421
+ StepVerifier .create ( Flux .from ( result .consume () ) )
422
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Invalid" ) ) )
423
+ .verify ();
424
+ }
425
+
426
+ @ Test
427
+ void keysShouldNotReportRunError ()
428
+ {
429
+ // Given
430
+ RxSession session = neo4j .driver ().rxSession ();
431
+ RxStatementResult result = session .run ( "Invalid" );
432
+
433
+ // When
434
+ StepVerifier .create ( Flux .from ( result .keys () ) ).expectNext ( EMPTY_LIST ).verifyComplete ();
435
+ StepVerifier .create ( Flux .from ( result .keys () ) ).expectNext ( EMPTY_LIST ).verifyComplete ();
436
+ }
437
+
438
+ @ Test
439
+ void throwResultConsumedErrorWhenCallingRecordsMultipleTimes ()
440
+ {
441
+ // Given
442
+ RxSession session = neo4j .driver ().rxSession ();
443
+ RxStatementResult result = session .run ( "Invalid" );
444
+
445
+ // When
446
+ StepVerifier .create ( Flux .from ( result .records () ) )
447
+ .expectErrorSatisfies ( error -> assertThat ( error .getMessage (), containsString ( "Invalid" ) ) )
448
+ .verify ();
449
+
450
+ verifyRecordsAlreadyDiscarded ( result );
451
+ verifyRecordsAlreadyDiscarded ( result );
452
+ }
453
+
305
454
private void verifyCanAccessSummary ( RxStatementResult res )
306
455
{
307
456
StepVerifier .create ( res .consume () ).assertNext ( summary -> {
@@ -313,8 +462,8 @@ private void verifyCanAccessSummary( RxStatementResult res )
313
462
314
463
private void verifyRecordsAlreadyDiscarded ( RxStatementResult res )
315
464
{
316
- StepVerifier .create ( Flux .from ( res .records () ). map ( r -> r . get ( "a" ). asInt () ) )
317
- .expectComplete ( )
465
+ StepVerifier .create ( Flux .from ( res .records () ) )
466
+ .expectErrorSatisfies ( error -> assertThat ( error . getMessage (), containsString ( "has already been consumed" ) ) )
318
467
.verify ();
319
468
}
320
469
0 commit comments