Skip to content

Commit 9fda712

Browse files
committed
Add integration test.
1 parent 65e9c8c commit 9fda712

File tree

11 files changed

+169
-0
lines changed

11 files changed

+169
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

packages/node-integration-tests/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@
77
},
88
"private": true,
99
"scripts": {
10+
"clean": "rimraf -g **/node_modules",
11+
"prisma:init": "(cd suites/tracing/prisma-orm && yarn && yarn setup)",
1012
"lint": "run-s lint:prettier lint:eslint",
1113
"lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish",
1214
"lint:prettier": "prettier --check \"{suites,utils}/**/*.ts\"",
1315
"type-check": "tsc",
16+
"pretest": "run-s --silent prisma:init",
1417
"test": "jest --detectOpenHandles --runInBand --forceExit",
1518
"test:watch": "yarn test --watch"
1619
},
1720
"dependencies": {
21+
"@prisma/client": "^3.12.0",
1822
"@types/mongodb": "^3.6.20",
1923
"@types/mysql": "^2.15.21",
2024
"@types/pg": "^8.6.5",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: '3.9'
2+
3+
services:
4+
db:
5+
image: postgres:13
6+
restart: always
7+
container_name: integration-tests-prisma
8+
ports:
9+
- '5433:5432'
10+
environment:
11+
POSTGRES_USER: prisma
12+
POSTGRES_PASSWORD: prisma
13+
POSTGRES_DB: tests
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "sentry-prisma-test",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"db-up": "docker-compose up -d",
8+
"generate": "prisma generate",
9+
"migrate": "prisma migrate dev -n sentry-test",
10+
"setup": "run-s --silent db-up generate migrate"
11+
},
12+
"keywords": [],
13+
"author": "",
14+
"license": "ISC",
15+
"dependencies": {
16+
"@prisma/client": "3.12.0",
17+
"prisma": "^3.12.0"
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Please do not edit this file manually
2+
# It should be added in your version-control system (i.e. Git)
3+
provider = "postgresql"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-- CreateTable
2+
CREATE TABLE "User" (
3+
"id" SERIAL NOT NULL,
4+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
5+
"email" TEXT NOT NULL,
6+
"name" TEXT,
7+
8+
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
9+
);
10+
11+
-- CreateIndex
12+
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
datasource db {
2+
url = "postgresql://prisma:prisma@localhost:5433/tests"
3+
provider = "postgresql"
4+
}
5+
6+
generator client {
7+
provider = "prisma-client-js"
8+
}
9+
10+
model User {
11+
id Int @id @default(autoincrement())
12+
createdAt DateTime @default(now())
13+
email String @unique
14+
name String?
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
2+
import { PrismaClient } from '@prisma/client';
3+
import * as Sentry from '@sentry/node';
4+
import * as Tracing from '@sentry/tracing';
5+
import { randomBytes } from 'crypto';
6+
7+
const client = new PrismaClient();
8+
9+
Sentry.init({
10+
dsn: 'https://[email protected]/1337',
11+
release: '1.0',
12+
tracesSampleRate: 1.0,
13+
integrations: [new Tracing.Integrations.Prisma({ client })],
14+
});
15+
16+
async function run(): Promise<void> {
17+
const transaction = Sentry.startTransaction({
18+
name: 'Test Transaction',
19+
op: 'transaction',
20+
});
21+
22+
Sentry.configureScope(scope => {
23+
scope.setSpan(transaction);
24+
});
25+
26+
try {
27+
await client.user.create({
28+
data: {
29+
name: 'Tilda',
30+
email: `tilda_${randomBytes(4).toString('hex')}@sentry.io`,
31+
},
32+
});
33+
34+
await client.user.findMany();
35+
36+
await client.user.deleteMany({
37+
where: {
38+
email: {
39+
contains: 'sentry.io',
40+
},
41+
},
42+
});
43+
} finally {
44+
if (transaction) transaction.finish();
45+
}
46+
}
47+
48+
void run();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { assertSentryTransaction, getEnvelopeRequest, runServer } from '../../../utils';
2+
3+
test('should instrument Prisma ORM client for tracing.', async () => {
4+
const url = await runServer(__dirname);
5+
const envelope = await getEnvelopeRequest(url);
6+
7+
assertSentryTransaction(envelope[2], {
8+
transaction: 'Test Transaction',
9+
spans: [
10+
{ description: 'Action: create, Model: User', op: 'prisma' },
11+
{ description: 'Action: findMany, Model: User', op: 'prisma' },
12+
{ description: 'Action: deleteMany, Model: User', op: 'prisma' },
13+
],
14+
});
15+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1
3+
4+
5+
6+
version "3.12.0"
7+
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.12.0.tgz#a0eb49ffea5c128dd11dffb896d7139a60073d12"
8+
integrity sha512-4NEQjUcWja/NVBvfuDFscWSk1/rXg3+wj+TSkqXCb1tKlx/bsUE00rxsvOvGg7VZ6lw1JFpGkwjwmsOIc4zvQw==
9+
dependencies:
10+
"@prisma/engines-version" "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980"
11+
12+
"@prisma/engines-version@3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980":
13+
version "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980"
14+
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz#829ca3d9d0d92555f44644606d4edfd45b2f5886"
15+
integrity sha512-o+jo8d7ZEiVpcpNWUDh3fj2uPQpBxl79XE9ih9nkogJbhw6P33274SHnqheedZ7PyvPIK/mvU8MLNYgetgXPYw==
16+
17+
18+
version "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980"
19+
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz#e52e364084c4d05278f62768047b788665e64a45"
20+
integrity sha512-zULjkN8yhzS7B3yeEz4aIym4E2w1ChrV12i14pht3ePFufvsAvBSoZ+tuXMvfSoNTgBS5E4bolRzLbMmbwkkMQ==
21+
22+
prisma@^3.12.0:
23+
version "3.12.0"
24+
resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.12.0.tgz#9675e0e72407122759d3eadcb6d27cdccd3497bd"
25+
integrity sha512-ltCMZAx1i0i9xuPM692Srj8McC665h6E5RqJom999sjtVSccHSD8Z+HSdBN2183h9PJKvC5dapkn78dd0NWMBg==
26+
dependencies:
27+
"@prisma/engines" "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980"

yarn.lock

+12
Original file line numberDiff line numberDiff line change
@@ -3292,6 +3292,18 @@
32923292
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.12.tgz#431ec342a7195622f86688bbda82e3166ce8cb28"
32933293
integrity sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ==
32943294

3295+
"@prisma/client@^3.12.0":
3296+
version "3.12.0"
3297+
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.12.0.tgz#a0eb49ffea5c128dd11dffb896d7139a60073d12"
3298+
integrity sha512-4NEQjUcWja/NVBvfuDFscWSk1/rXg3+wj+TSkqXCb1tKlx/bsUE00rxsvOvGg7VZ6lw1JFpGkwjwmsOIc4zvQw==
3299+
dependencies:
3300+
"@prisma/engines-version" "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980"
3301+
3302+
"@prisma/engines-version@3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980":
3303+
version "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980"
3304+
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz#829ca3d9d0d92555f44644606d4edfd45b2f5886"
3305+
integrity sha512-o+jo8d7ZEiVpcpNWUDh3fj2uPQpBxl79XE9ih9nkogJbhw6P33274SHnqheedZ7PyvPIK/mvU8MLNYgetgXPYw==
3306+
32953307
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
32963308
version "1.1.2"
32973309
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"

0 commit comments

Comments
 (0)