@@ -20,9 +20,16 @@ import neo4j from "../../lib/v1";
20
20
21
21
describe ( 'transaction' , ( ) => {
22
22
23
- let driver , session , server ;
23
+ let driver ;
24
+ let session ;
25
+ let server ;
26
+ let originalTimeout ;
24
27
25
28
beforeEach ( done => {
29
+ // make jasmine timeout high enough to test unreachable bookmarks
30
+ originalTimeout = jasmine . DEFAULT_TIMEOUT_INTERVAL ;
31
+ jasmine . DEFAULT_TIMEOUT_INTERVAL = 60000 ;
32
+
26
33
driver = neo4j . driver ( "bolt://localhost" , neo4j . auth . basic ( "neo4j" , "neo4j" ) ) ;
27
34
driver . onCompleted = meta => {
28
35
server = meta [ 'server' ] ;
@@ -33,6 +40,7 @@ describe('transaction', () => {
33
40
} ) ;
34
41
35
42
afterEach ( ( ) => {
43
+ jasmine . DEFAULT_TIMEOUT_INTERVAL = originalTimeout ;
36
44
driver . close ( ) ;
37
45
} ) ;
38
46
@@ -281,6 +289,43 @@ describe('transaction', () => {
281
289
} ) ;
282
290
} ) ;
283
291
292
+ it ( 'should fail for invalid bookmark' , done => {
293
+ if ( neo4jVersionOlderThan31 ( done ) ) {
294
+ return ;
295
+ }
296
+
297
+ const invalidBookmark = 'hi, this is an invalid bookmark' ;
298
+ const tx = session . beginTransaction ( invalidBookmark ) ;
299
+ tx . run ( 'RETURN 1' ) . catch ( error => {
300
+ expect ( error . fields [ 0 ] . code ) . toBe ( 'Neo.ClientError.Transaction.InvalidBookmark' ) ;
301
+ done ( ) ;
302
+ } ) ;
303
+ } ) ;
304
+
305
+ it ( 'should fail to run query for unreachable bookmark' , done => {
306
+ if ( neo4jVersionOlderThan31 ( done ) ) {
307
+ return ;
308
+ }
309
+
310
+ const tx1 = session . beginTransaction ( ) ;
311
+ tx1 . run ( 'CREATE ()' ) . then ( result => {
312
+ expect ( result . summary . counters . nodesCreated ( ) ) . toBe ( 1 ) ;
313
+
314
+ tx1 . commit ( ) . then ( ( ) => {
315
+ expectValidLastBookmark ( session ) ;
316
+
317
+ const unreachableBookmark = session . lastBookmark ( ) + "0" ;
318
+ const tx2 = session . beginTransaction ( unreachableBookmark ) ;
319
+ tx2 . run ( 'CREATE ()' ) . catch ( error => {
320
+ const message = error . fields [ 0 ] . message ;
321
+ const expectedPrefix = message . indexOf ( 'Database not up to the requested version' ) === 0 ;
322
+ expect ( expectedPrefix ) . toBeTruthy ( ) ;
323
+ done ( ) ;
324
+ } ) ;
325
+ } ) . catch ( console . log ) ;
326
+ } ) . catch ( console . log ) ;
327
+ } ) ;
328
+
284
329
it ( 'should rollback when very first run fails' , done => {
285
330
const tx1 = session . beginTransaction ( ) ;
286
331
tx1 . run ( 'RETURN foo' ) . catch ( error => {
0 commit comments