Skip to main content
Glama

Prisma MCP Server

Official
by prisma
Apache 2.0
4
44,213
  • Linux
  • Apple
tests.ts6.89 kB
import { faker } from '@faker-js/faker' import { Providers } from '../_utils/providers' import testMatrix from './_matrix' // @ts-ignore import type { PrismaClient } from './generated/prisma/client' declare let prisma: PrismaClient testMatrix.setupTestSuite((suiteConfig, _suiteMeta, clientMeta, cliMeta) => { test('should create a user and update that field on that user', async () => { const email = faker.internet.email() const name = faker.person.firstName() const newEmail = faker.internet.email() await prisma.user.create({ data: { email, name, }, }) const user = await prisma.user.findUnique({ where: { email, }, }) const response = await prisma.user.update({ where: { id: user?.id as string, }, select: { email: true, }, data: { email: newEmail, }, }) expect(response.email).toEqual(newEmail) }) test('should create a user and post and connect them together', async () => { const email = faker.internet.email() const name = faker.person.firstName() const title = faker.lorem.slug() const published = true const user = await prisma.user.create({ data: { email, name, }, select: { id: true, email: true, name: true, }, }) const post = await prisma.post.create({ data: { title, published, }, select: { id: true, title: true, published: true, }, }) const response = await prisma.user.update({ where: { id: user!.id, }, select: { id: true, name: true, email: true, posts: { select: { id: true, title: true, published: true, }, }, }, data: { posts: { connect: { id: post!.id, }, }, }, }) expect(response).toMatchObject({ ...user, posts: [post], }) }) test('should create a user and post and disconnect them', async () => { const email = faker.internet.email() const name = faker.person.firstName() const title = faker.lorem.slug() const published = true const user = await prisma.user.create({ data: { email, name, posts: { create: [ { title, published, }, ], }, }, select: { id: true, email: true, name: true, posts: { select: { id: true, title: true, published: true, }, }, }, }) const response = await prisma.user.update({ where: { id: user?.id as string, }, select: { id: true, name: true, email: true, posts: { select: { id: true, title: true, published: true, }, }, }, data: { posts: { disconnect: { id: user!.posts![0]!.id, }, }, }, }) expect(response).toMatchObject({ ...user, posts: [], }) }) // TODO: broken with pg and neon adapters with relationJoins preview features // because of <https://github.com/prisma/team-orm/issues/683>. // Fails with `called `Option::unwrap()` on a `None` value`. const shouldSkip = suiteConfig.provider === Providers.POSTGRESQL && clientMeta.driverAdapter && cliMeta.previewFeatures.includes('relationJoins') skipTestIf(shouldSkip)( 'should create a user with posts and a profile and update itself and nested connections setting fields to null', async () => { const someDate = new Date('2020-01-01T00:00:00.348Z') const email = faker.internet.email() const name = faker.person.firstName() const newEmail = faker.internet.email() const title = faker.lorem.slug() const content = faker.lorem.sentence() const optional = faker.lorem.sentence() const bio = faker.lorem.sentence() const notrequired = faker.lorem.word() await prisma.user.create({ data: { email, name, wakesUpAt: someDate, lastLoginAt: someDate, posts: { create: new Array(5).fill(undefined).map(() => ({ published: true, title, content, optional, lastReviewedAt: someDate, lastPublishedAt: someDate, })), }, profile: { create: { bio, notrequired, goesToBedAt: someDate, goesToOfficeAt: someDate, }, }, }, }) const user = await prisma.user.findUnique({ where: { email, }, }) const response = await prisma.user.update({ where: { id: user?.id as string, }, select: { email: true, name: true, wakesUpAt: true, lastLoginAt: true, profile: { select: { bio: true, goesToBedAt: true, }, }, posts: { select: { content: true, title: true, published: true, optional: true, }, }, }, data: { email: newEmail, name: null, wakesUpAt: null, lastLoginAt: { set: null, }, profile: { update: { notrequired: null, bio: { set: null, }, goesToBedAt: null, goesToOfficeAt: { set: null, }, }, }, posts: { updateMany: { data: { content: null, optional: { set: null, }, lastReviewedAt: null, lastPublishedAt: { set: null, }, }, where: {}, }, }, }, }) expect(response.email).toEqual(newEmail) expect(response.name).toEqual(null) expect(response.lastLoginAt).toEqual(null) expect(response.wakesUpAt).toEqual(null) response.posts.forEach((post) => { expect(post).toMatchObject({ content: null, optional: null, published: true, title, }) }) expect(response.profile).toMatchObject({ bio: null, goesToBedAt: null, }) }, ) })

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/prisma/prisma'

If you have feedback or need assistance with the MCP directory API, please join our Discord server