Skip to main content
Glama
prisma

Prisma MCP Server

Official
by prisma
basic-shaping.test.ts4.48 kB
import { describe, expect, it } from 'vitest' import { shapeQuery } from '../shape' describe('shapeQuery - basic transformations', () => { describe('example 1: scalars only, no relations', () => { it('returns just the arguments when selection is only $scalars and $composites', () => { const before = { arguments: { where: { id: 1 } }, selection: { $scalars: true, $composites: true, }, } const after = { where: { id: 1 }, } expect(shapeQuery(before)).toEqual(after) }) it('handles empty arguments', () => { const before = { arguments: {}, selection: { $scalars: true, $composites: true, }, } expect(shapeQuery(before)).toEqual({}) }) it('handles missing arguments', () => { const before = { selection: { $scalars: true, $composites: true, }, } expect(shapeQuery(before)).toEqual({}) }) }) describe('example 2: scalars with simple relation', () => { it('uses include with true for relation when parent has $scalars', () => { const before = { arguments: { where: { id: 1 } }, selection: { $scalars: true, $composites: true, posts: { $scalars: true, $composites: true, }, }, } const after = { where: { id: 1 }, include: { posts: true, }, } expect(shapeQuery(before)).toEqual(after) }) it('handles multiple simple relations', () => { const before = { arguments: { take: 10 }, selection: { $scalars: true, $composites: true, posts: { $scalars: true, $composites: true, }, profile: { $scalars: true, $composites: true, }, }, } const after = { take: 10, include: { posts: true, profile: true, }, } expect(shapeQuery(before)).toEqual(after) }) }) describe('example 3: scalars with relation having explicit field selection', () => { it('uses include with select for relation when relation selects specific fields', () => { const before = { arguments: { where: { id: 1 } }, selection: { $scalars: true, $composites: true, posts: { arguments: {}, selection: { title: true, }, }, }, } const after = { where: { id: 1 }, include: { posts: { select: { title: true, }, }, }, } expect(shapeQuery(before)).toEqual(after) }) }) describe('example 4: explicit field selection without $scalars', () => { it('uses select for both fields and relations when no $scalars', () => { const before = { arguments: { where: { active: true } }, selection: { name: true, posts: { arguments: {}, selection: { title: true, }, }, }, } const after = { where: { active: true }, select: { name: true, posts: { select: { title: true, }, }, }, } expect(shapeQuery(before)).toEqual(after) }) }) describe('example 5: explicit selection with boolean relation', () => { it('keeps boolean relation as true in select', () => { const before = { arguments: { skip: 5 }, selection: { name: true, posts: true, }, } const after = { skip: 5, select: { name: true, posts: true, }, } expect(shapeQuery(before)).toEqual(after) }) }) describe('preserving false in selections', () => { it('preserves false values in field selection', () => { const before = { arguments: {}, selection: { name: true, email: false, password: false, }, } const after = { select: { name: true, email: false, password: false, }, } expect(shapeQuery(before)).toEqual(after) }) }) })

Latest Blog Posts

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