@@ -138,6 +138,11 @@ describe('Session', () => {
138
138
await session . abortTransaction ( ) ;
139
139
expect ( serviceProviderSession . abortTransaction ) . to . have . been . calledOnceWith ( ) ;
140
140
} ) ;
141
+ it ( 'withTransaction' , async ( ) => {
142
+ serviceProviderSession . withTransaction . resolves ( ) ;
143
+ await session . withTransaction ( ( ) => { } ) ;
144
+ expect ( serviceProviderSession . withTransaction ) . to . have . been . calledOnce ;
145
+ } ) ;
141
146
} ) ;
142
147
describe ( 'integration' , ( ) => {
143
148
const [ srv0 ] = startTestCluster ( [ '--replicaset' ] ) ;
@@ -286,6 +291,42 @@ describe('Session', () => {
286
291
await session . abortTransaction ( ) ;
287
292
expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 0 ) ;
288
293
} ) ;
294
+ it ( 'can run withTransaction in the success case' , async ( ) => {
295
+ const doc = { value : 'test' , count : 0 } ;
296
+ const testColl = mongo . getDB ( databaseName ) . getCollection ( 'coll' ) ;
297
+ await testColl . drop ( ) ;
298
+ await testColl . insertOne ( doc ) ;
299
+ expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 0 ) ;
300
+ session = mongo . startSession ( ) ;
301
+ await session . withTransaction ( async ( ) => {
302
+ const sessionColl = session . getDatabase ( databaseName ) . getCollection ( 'coll' ) ;
303
+ expect ( ( await sessionColl . updateOne (
304
+ { value : 'test' } ,
305
+ { $inc : { count : 1 } }
306
+ ) ) . acknowledged ) . to . be . true ;
307
+ expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 0 ) ;
308
+ } ) ;
309
+ expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 1 ) ;
310
+ } ) ;
311
+ it ( 'can run withTransaction in the failure case' , async ( ) => {
312
+ const doc = { value : 'test' , count : 0 } ;
313
+ const testColl = mongo . getDB ( databaseName ) . getCollection ( 'coll' ) ;
314
+ await testColl . drop ( ) ;
315
+ await testColl . insertOne ( doc ) ;
316
+ expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 0 ) ;
317
+ session = mongo . startSession ( ) ;
318
+ const { err } = await session . withTransaction ( async ( ) => {
319
+ const sessionColl = session . getDatabase ( databaseName ) . getCollection ( 'coll' ) ;
320
+ expect ( ( await sessionColl . updateOne (
321
+ { value : 'test' } ,
322
+ { $inc : { count : 1 } }
323
+ ) ) . acknowledged ) . to . be . true ;
324
+ expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 0 ) ;
325
+ throw new Error ( 'fails' ) ;
326
+ } ) . catch ( err => ( { err } ) ) ;
327
+ expect ( err . message ) . to . equal ( 'fails' ) ;
328
+ expect ( ( await testColl . findOne ( { value : 'test' } ) ) . count ) . to . equal ( 0 ) ;
329
+ } ) ;
289
330
} ) ;
290
331
describe ( 'after resetting connection will error with expired session' , ( ) => {
291
332
skipIfApiStrict ( ) ;
0 commit comments