-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
tests.ts
105 lines (89 loc) · 2.88 KB
/
tests.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import { faker } from '@faker-js/faker'
// @ts-ignore
import type { PrismaClient } from '@prisma/client'
import { LogEvent } from '../../../src/runtime/getPrismaClient'
import { NewPrismaClient } from '../_utils/types'
import testMatrix from './_matrix'
let prisma: PrismaClient<{ log: [{ emit: 'event'; level: 'error' }] }>
declare let newPrismaClient: NewPrismaClient<typeof PrismaClient>
const email = faker.internet.email()
testMatrix.setupTestSuite(
() => {
const errors: LogEvent[] = []
beforeAll(() => {
prisma = newPrismaClient({ log: [{ emit: 'event', level: 'error' }] })
prisma.$on('error', (e) => errors.push(e))
})
afterEach(() => {
errors.length = 0
})
test('findUniqueOrThrown when error thrown', async () => {
await expect(() =>
prisma.user.findUniqueOrThrow({
where: {
email,
},
}),
).rejects.toThrowError('No User found')
expect(errors).toHaveLength(1)
const errorEvent = errors[0]
expect(errorEvent.message).toContain(
'An operation failed because it depends on one or more records that were required but not found. Expected a record, found none.',
)
expect(errorEvent.target).toContain('user.findUniqueOrThrow')
})
test('findFirstOrThrow when error thrown', async () => {
await expect(() =>
prisma.user.findFirstOrThrow({
where: {
email,
},
}),
).rejects.toThrowError('No User found')
expect(errors).toHaveLength(1)
const errorEvent = errors[0]
expect(errorEvent.message).toContain(
'An operation failed because it depends on one or more records that were required but not found. Expected a record, found none.',
)
expect(errorEvent.target).toContain('user.findFirstOrThrow')
})
// Test for https://github.com/prisma/prisma/issues/16354
test('middleware captures errors', async () => {
prisma = newPrismaClient()
prisma.$use(async (params, next) => {
try {
return await next(params)
} catch (error) {
expect(params.action).toEqual('findFirstOrThrow')
throw new Error('Middleware error')
}
})
await expect(() =>
prisma.user.findFirstOrThrow({
where: {
email,
},
}),
).rejects.toThrowError('Middleware error')
prisma = newPrismaClient()
prisma.$use(async (params, next) => {
try {
return await next(params)
} catch (error) {
expect(params.action).toEqual('findUniqueOrThrow')
throw new Error('Middleware error')
}
})
await expect(() =>
prisma.user.findUniqueOrThrow({
where: {
email,
},
}),
).rejects.toThrowError('Middleware error')
})
},
{
skipDefaultClientInstance: true,
},
)