11import timers from 'node:timers/promises'
22
33import type { SqlDriverAdapter , SqlQuery , SqlResultSet , Transaction } from '@prisma/driver-adapter-utils'
4+ import { expect , test , vi } from 'vitest'
45
56import { noopTracingHelper } from '../tracing'
67import { Options } from './transaction'
@@ -15,7 +16,7 @@ import {
1516 TransactionStartTimeoutError ,
1617} from './transaction-manager-error'
1718
18- jest . useFakeTimers ( )
19+ vi . useFakeTimers ( )
1920
2021const START_TRANSACTION_TIME = 200
2122const TRANSACTION_EXECUTION_TIMEOUT = 500
@@ -34,9 +35,9 @@ class MockDriverAdapter implements SqlDriverAdapter {
3435 private readonly rollbackToSavepoint : Transaction [ 'rollbackToSavepoint' ]
3536 private readonly releaseSavepoint : Transaction [ 'releaseSavepoint' ]
3637
37- executeRawMock : jest . MockedFn < ( params : SqlQuery ) => Promise < number > > = jest . fn ( ) . mockResolvedValue ( 1 )
38- commitMock : jest . MockedFn < ( ) => Promise < void > > = jest . fn ( ) . mockResolvedValue ( undefined )
39- rollbackMock : jest . MockedFn < ( ) => Promise < void > > = jest . fn ( ) . mockResolvedValue ( undefined )
38+ executeRawMock = vi . fn ( ) . mockResolvedValue ( 1 )
39+ commitMock = vi . fn ( ) . mockResolvedValue ( undefined )
40+ rollbackMock = vi . fn ( ) . mockResolvedValue ( undefined )
4041
4142 constructor (
4243 options : {
@@ -104,7 +105,7 @@ class MockDriverAdapter implements SqlDriverAdapter {
104105 adapterName : 'mock-adapter' ,
105106 provider,
106107 options : { usePhantomQuery } ,
107- queryRaw : jest . fn ( ) . mockRejectedValue ( 'Not implemented for test' ) ,
108+ queryRaw : vi . fn ( ) . mockRejectedValue ( 'Not implemented for test' ) ,
108109 executeRaw : executeRawMock ,
109110 commit : commitMock ,
110111 rollback : rollbackMock ,
@@ -128,7 +129,7 @@ async function startTransaction(transactionManager: TransactionManager, options:
128129 maxWait : START_TRANSACTION_TIME * 2 ,
129130 ...options ,
130131 } ) ,
131- jest . advanceTimersByTimeAsync ( START_TRANSACTION_TIME + 100 ) ,
132+ vi . advanceTimersByTimeAsync ( START_TRANSACTION_TIME + 100 ) ,
132133 ] )
133134 return id
134135}
@@ -343,11 +344,9 @@ test('nested savepoints use sqlite syntax', async () => {
343344} )
344345
345346test ( 'nested savepoints use adapter-provided methods when available' , async ( ) => {
346- const createSavepoint = jest . fn < ReturnType < NonNullable < Transaction [ 'createSavepoint' ] > > , [ string ] > ( async ( ) => { } )
347- const rollbackToSavepoint = jest . fn < ReturnType < NonNullable < Transaction [ 'rollbackToSavepoint' ] > > , [ string ] > (
348- async ( ) => { } ,
349- )
350- const releaseSavepoint = jest . fn < ReturnType < NonNullable < Transaction [ 'releaseSavepoint' ] > > , [ string ] > ( async ( ) => { } )
347+ const createSavepoint = vi . fn ( async ( _name : string ) => { } )
348+ const rollbackToSavepoint = vi . fn ( async ( _name : string ) => { } )
349+ const releaseSavepoint = vi . fn ( async ( _name : string ) => { } )
351350
352351 const driverAdapter = new MockDriverAdapter ( {
353352 provider : 'postgres' ,
@@ -377,7 +376,7 @@ test('nested savepoints use adapter-provided methods when available', async () =
377376} )
378377
379378test ( 'nested savepoint release can be omitted by adapter' , async ( ) => {
380- const createSavepoint = jest . fn < ReturnType < NonNullable < Transaction [ 'createSavepoint' ] > > , [ string ] > ( async ( ) => { } )
379+ const createSavepoint = vi . fn ( async ( ) => { } )
381380
382381 const driverAdapter = new MockDriverAdapter ( {
383382 provider : 'postgres' ,
@@ -474,7 +473,7 @@ test('commitTransaction during a rollback caused by a time out raises a Transact
474473 const timeout = 200
475474 const rollbackDelay = 200
476475
477- driverAdapter . rollbackMock = jest . fn ( ) . mockImplementation ( ( ) => timers . setTimeout ( rollbackDelay ) )
476+ driverAdapter . rollbackMock = vi . fn ( ) . mockImplementation ( ( ) => timers . setTimeout ( rollbackDelay ) )
478477
479478 const transactionManager = new TransactionManager ( {
480479 driverAdapter,
@@ -483,11 +482,11 @@ test('commitTransaction during a rollback caused by a time out raises a Transact
483482 } )
484483
485484 const txPromise = transactionManager . startTransaction ( )
486- await jest . advanceTimersByTimeAsync ( START_TRANSACTION_TIME + timeout )
485+ await vi . advanceTimersByTimeAsync ( START_TRANSACTION_TIME + timeout )
487486 const tx = await txPromise
488487 const commitPromise = transactionManager . commitTransaction ( tx . id )
489488
490- await expect ( Promise . all ( [ jest . advanceTimersByTimeAsync ( rollbackDelay ) , commitPromise ] ) ) . rejects . toEqual (
489+ await expect ( Promise . all ( [ vi . advanceTimersByTimeAsync ( rollbackDelay ) , commitPromise ] ) ) . rejects . toEqual (
491490 new TransactionExecutionTimeoutError ( 'commit' , {
492491 timeout,
493492 timeTaken : START_TRANSACTION_TIME + timeout + rollbackDelay ,
@@ -594,7 +593,7 @@ test('transaction times out during starting', async () => {
594593 expect ( driverAdapter . rollbackMock ) . not . toHaveBeenCalled ( )
595594
596595 // Now let the startTransaction promise resolve
597- await jest . advanceTimersByTimeAsync ( START_TRANSACTION_TIME )
596+ await vi . advanceTimersByTimeAsync ( START_TRANSACTION_TIME )
598597
599598 // The transaction that was started in the background should now be rolled back
600599 // to release the connection back to the pool.
@@ -610,16 +609,16 @@ test('transaction start timeout cleans up connection if transaction eventually s
610609 const TIME_PAST_MAX_WAIT = MAX_WAIT + 50
611610 const REMAINING_TIME_FOR_START = SLOW_START_TRANSACTION_TIME - TIME_PAST_MAX_WAIT
612611
613- const rollbackMock = jest . fn ( ) . mockResolvedValue ( undefined )
612+ const rollbackMock = vi . fn ( ) . mockResolvedValue ( undefined )
614613
615614 const driverAdapter = {
616615 adapterName : 'slow-adapter' ,
617616 provider : 'postgres' as const ,
618- executeRaw : jest . fn ( ) . mockResolvedValue ( 1 ) ,
619- queryRaw : jest . fn ( ) ,
620- executeScript : jest . fn ( ) ,
621- dispose : jest . fn ( ) ,
622- startTransaction : jest . fn ( ) . mockImplementation (
617+ executeRaw : vi . fn ( ) . mockResolvedValue ( 1 ) ,
618+ queryRaw : vi . fn ( ) ,
619+ executeScript : vi . fn ( ) ,
620+ dispose : vi . fn ( ) ,
621+ startTransaction : vi . fn ( ) . mockImplementation (
623622 ( ) =>
624623 new Promise ( ( resolve ) =>
625624 setTimeout (
@@ -628,9 +627,9 @@ test('transaction start timeout cleans up connection if transaction eventually s
628627 adapterName : 'slow-adapter' ,
629628 provider : 'postgres' ,
630629 options : { usePhantomQuery : false } ,
631- queryRaw : jest . fn ( ) ,
632- executeRaw : jest . fn ( ) ,
633- commit : jest . fn ( ) ,
630+ queryRaw : vi . fn ( ) ,
631+ executeRaw : vi . fn ( ) ,
632+ commit : vi . fn ( ) ,
634633 rollback : rollbackMock ,
635634 } ) ,
636635 SLOW_START_TRANSACTION_TIME ,
@@ -648,7 +647,7 @@ test('transaction start timeout cleans up connection if transaction eventually s
648647 // Start a transaction with a maxWait shorter than the actual connection time
649648 // Use Promise.all to advance timers and wait for the rejection simultaneously
650649 const [ , txResult ] = await Promise . all ( [
651- jest . advanceTimersByTimeAsync ( TIME_PAST_MAX_WAIT ) ,
650+ vi . advanceTimersByTimeAsync ( TIME_PAST_MAX_WAIT ) ,
652651 transactionManager . startTransaction ( ) . catch ( ( e ) => e ) ,
653652 ] )
654653
@@ -659,7 +658,7 @@ test('transaction start timeout cleans up connection if transaction eventually s
659658 expect ( rollbackMock ) . not . toHaveBeenCalled ( )
660659
661660 // Now advance time to let the startTransaction promise resolve
662- await jest . advanceTimersByTimeAsync ( REMAINING_TIME_FOR_START )
661+ await vi . advanceTimersByTimeAsync ( REMAINING_TIME_FOR_START )
663662
664663 // After the background startTransaction completes, rollback should be called
665664 // to release the connection and avoid pool exhaustion
@@ -676,7 +675,7 @@ test('transaction times out during execution', async () => {
676675
677676 const id = await startTransaction ( transactionManager )
678677
679- await jest . advanceTimersByTimeAsync ( TRANSACTION_EXECUTION_TIMEOUT + 100 )
678+ await vi . advanceTimersByTimeAsync ( TRANSACTION_EXECUTION_TIMEOUT + 100 )
680679
681680 await expect ( transactionManager . commitTransaction ( id ) ) . rejects . toBeInstanceOf ( TransactionExecutionTimeoutError )
682681 await expect ( transactionManager . rollbackTransaction ( id ) ) . rejects . toBeInstanceOf ( TransactionExecutionTimeoutError )
@@ -692,7 +691,7 @@ test('internal transaction does not apply the default start timeout', async () =
692691
693692 const [ tx ] = await Promise . all ( [
694693 transactionManager . startInternalTransaction ( ) ,
695- jest . advanceTimersByTimeAsync ( START_TRANSACTION_TIME ) ,
694+ vi . advanceTimersByTimeAsync ( START_TRANSACTION_TIME ) ,
696695 ] )
697696 await transactionManager . commitTransaction ( tx . id )
698697
@@ -710,9 +709,9 @@ test('internal transaction does not apply the default execution timeout', async
710709
711710 const [ tx ] = await Promise . all ( [
712711 transactionManager . startInternalTransaction ( ) ,
713- jest . advanceTimersByTimeAsync ( START_TRANSACTION_TIME ) ,
712+ vi . advanceTimersByTimeAsync ( START_TRANSACTION_TIME ) ,
714713 ] )
715- await jest . advanceTimersByTimeAsync ( TRANSACTION_EXECUTION_TIMEOUT )
714+ await vi . advanceTimersByTimeAsync ( TRANSACTION_EXECUTION_TIMEOUT )
716715 await transactionManager . commitTransaction ( tx . id )
717716
718717 expect ( driverAdapter . commitMock ) . toHaveBeenCalled ( )
@@ -745,7 +744,7 @@ test('TransactionManagerErrors have common structure', () => {
745744
746745test ( 'startTransaction works when setTimeout returns a timer without unref (workerd environment)' , async ( ) => {
747746 const originalSetTimeout = global . setTimeout
748- const setTimeoutSpy = jest
747+ const setTimeoutSpy = vi
749748 . spyOn ( global , 'setTimeout' )
750749 . mockImplementation ( ( callback : ( ...args : any [ ] ) => void , ms ?: number , ...args : any [ ] ) => {
751750 const timer = originalSetTimeout ( callback , ms , ...args )
0 commit comments