Skip to content

Commit 18ee89f

Browse files
authored
chore: migrate client-engine-runtime to vitest (prisma#29234)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Migrated testing from Jest to Vitest across the package. * Updated test scripts and test files to use Vitest utilities. * Removed local Prettier and Jest configuration files and related dev dependencies. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent cb5e8a1 commit 18ee89f

11 files changed

Lines changed: 41 additions & 190 deletions

File tree

packages/client-engine-runtime/.prettierignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/client-engine-runtime/.prettierrc.yml

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/client-engine-runtime/jest.config.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/client-engine-runtime/package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,14 @@
3939
"devDependencies": {
4040
"@codspeed/benchmark.js-plugin": "4.0.0",
4141
"@types/benchmark": "2.1.5",
42-
"@types/jest": "29.5.14",
4342
"@types/node": "~20.19.24",
44-
"benchmark": "2.1.4",
45-
"jest": "29.7.0",
46-
"jest-junit": "16.0.0"
43+
"benchmark": "2.1.4"
4744
},
4845
"scripts": {
4946
"dev": "DEV=true tsx helpers/build.ts",
5047
"build": "tsx helpers/build.ts",
5148
"prepublishOnly": "pnpm run build",
52-
"test": "jest"
49+
"test": "vitest run"
5350
},
5451
"files": [
5552
"dist"

packages/client-engine-runtime/src/interpreter/generators.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { expect, test } from 'vitest'
2+
13
import { GeneratorRegistry } from './generators'
24

35
test('should always return the same time for a single snapshot', async () => {

packages/client-engine-runtime/src/interpreter/render-query.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { expect, test } from 'vitest'
2+
13
import type { PlaceholderFormat, QueryPlanDbQuery } from '../query-plan'
24
import { GeneratorRegistry } from './generators'
35
import { renderQuery } from './render-query'

packages/client-engine-runtime/src/interpreter/serialize-sql.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ColumnTypeEnum } from '@prisma/driver-adapter-utils'
2+
import { expect, test } from 'vitest'
23

34
import { serializeSql } from './serialize-sql'
45

packages/client-engine-runtime/src/json-protocol.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Decimal } from '@prisma/client-runtime-utils'
2+
import { describe, expect, test } from 'vitest'
23

34
import { deserializeJsonObject } from './json-protocol'
45

packages/client-engine-runtime/src/sql-commenter.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { SqlCommenterContext, SqlCommenterPlugin } from '@prisma/sqlcommenter'
2+
import { describe, expect, test, vi } from 'vitest'
23

34
import { appendSqlComment, applySqlCommenters, buildSqlComment, formatSqlComment } from './sql-commenter'
45

@@ -90,7 +91,7 @@ describe('applySqlCommenters', () => {
9091
})
9192

9293
test('calls plugin with context', () => {
93-
const plugin = jest.fn(() => ({ key: 'value' }))
94+
const plugin = vi.fn(() => ({ key: 'value' }))
9495
applySqlCommenters([plugin], mockSingleContext)
9596
expect(plugin).toHaveBeenCalledWith(mockSingleContext)
9697
})

packages/client-engine-runtime/src/transaction-manager/transaction-manager.test.ts

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import timers from 'node:timers/promises'
22

33
import type { SqlDriverAdapter, SqlQuery, SqlResultSet, Transaction } from '@prisma/driver-adapter-utils'
4+
import { expect, test, vi } from 'vitest'
45

56
import { noopTracingHelper } from '../tracing'
67
import { Options } from './transaction'
@@ -15,7 +16,7 @@ import {
1516
TransactionStartTimeoutError,
1617
} from './transaction-manager-error'
1718

18-
jest.useFakeTimers()
19+
vi.useFakeTimers()
1920

2021
const START_TRANSACTION_TIME = 200
2122
const 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

345346
test('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

379378
test('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

746745
test('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

Comments
 (0)