Skip to main content
Glama
prisma

Prisma MCP Server

Official
by prisma
logical-operators.test.ts9.23 kB
import { describe, expect, it } from 'vitest' import { PARAM_PLACEHOLDER, parameterizeQuery } from '../parameterize' describe('parameterizeQuery - logical operators', () => { describe('AND operator', () => { it('handles AND operator with array', () => { const query = { arguments: { where: { AND: [{ email: 'a@example.com' }, { name: 'Test' }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { AND: [{ email: PARAM_PLACEHOLDER }, { name: PARAM_PLACEHOLDER }], }, }, selection: { $scalars: true }, }) }) it('handles AND operator with single object', () => { const query = { arguments: { where: { AND: { email: 'a@example.com', name: 'Test' }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { AND: { email: PARAM_PLACEHOLDER, name: PARAM_PLACEHOLDER }, }, }, selection: { $scalars: true }, }) }) it('handles nested AND operators', () => { const query = { arguments: { where: { AND: [{ AND: [{ field1: 'value1' }, { field2: 'value2' }] }, { field3: 'value3' }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { AND: [ { AND: [{ field1: PARAM_PLACEHOLDER }, { field2: PARAM_PLACEHOLDER }] }, { field3: PARAM_PLACEHOLDER }, ], }, }, selection: { $scalars: true }, }) }) }) describe('OR operator', () => { it('handles OR operator with array', () => { const query = { arguments: { where: { OR: [{ status: 'ACTIVE' }, { status: 'PENDING' }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { OR: [{ status: PARAM_PLACEHOLDER }, { status: PARAM_PLACEHOLDER }], }, }, selection: { $scalars: true }, }) }) it('handles OR operator with complex conditions', () => { const query = { arguments: { where: { OR: [{ email: { contains: '@company.com' } }, { role: 'ADMIN' }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { OR: [{ email: { contains: PARAM_PLACEHOLDER } }, { role: PARAM_PLACEHOLDER }], }, }, selection: { $scalars: true }, }) }) }) describe('NOT operator', () => { it('handles NOT operator with single object', () => { const query = { arguments: { where: { NOT: { email: 'admin@example.com' }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { NOT: { email: PARAM_PLACEHOLDER }, }, }, selection: { $scalars: true }, }) }) it('handles NOT operator as array', () => { const query = { arguments: { where: { NOT: [{ email: 'admin@example.com' }, { role: 'SYSTEM' }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { NOT: [{ email: PARAM_PLACEHOLDER }, { role: PARAM_PLACEHOLDER }], }, }, selection: { $scalars: true }, }) }) it('handles NOT operator with nested conditions', () => { const query = { arguments: { where: { NOT: { OR: [{ status: 'DELETED' }, { status: 'ARCHIVED' }], }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { NOT: { OR: [{ status: PARAM_PLACEHOLDER }, { status: PARAM_PLACEHOLDER }], }, }, }, selection: { $scalars: true }, }) }) }) describe('is/isNot operators (nullable relations)', () => { it('handles is operator with null', () => { const query = { arguments: { where: { profile: { is: null }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { profile: { is: null }, }, }, selection: { $scalars: true }, }) }) it('handles is operator with nested conditions', () => { const query = { arguments: { where: { profile: { is: { bio: 'Developer' } }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { profile: { is: { bio: PARAM_PLACEHOLDER } }, }, }, selection: { $scalars: true }, }) }) it('handles isNot operator with null', () => { const query = { arguments: { where: { profile: { isNot: null }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { profile: { isNot: null }, }, }, selection: { $scalars: true }, }) }) it('handles isNot operator with nested conditions', () => { const query = { arguments: { where: { profile: { isNot: { verified: false } }, }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { profile: { isNot: { verified: PARAM_PLACEHOLDER } }, }, }, selection: { $scalars: true }, }) }) }) describe('combined logical operators', () => { it('handles AND with OR', () => { const query = { arguments: { where: { AND: [ { email: { contains: '@company.com' } }, { OR: [{ role: 'ADMIN' }, { role: 'MODERATOR' }], }, ], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { AND: [ { email: { contains: PARAM_PLACEHOLDER } }, { OR: [{ role: PARAM_PLACEHOLDER }, { role: PARAM_PLACEHOLDER }], }, ], }, }, selection: { $scalars: true }, }) }) it('handles AND with NOT', () => { const query = { arguments: { where: { AND: [{ isActive: true }, { NOT: { role: 'BANNED' } }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { AND: [{ isActive: PARAM_PLACEHOLDER }, { NOT: { role: PARAM_PLACEHOLDER } }], }, }, selection: { $scalars: true }, }) }) it('handles OR with NOT', () => { const query = { arguments: { where: { OR: [{ status: 'ACTIVE' }, { NOT: { deletedAt: null } }], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { OR: [{ status: PARAM_PLACEHOLDER }, { NOT: { deletedAt: null } }], }, }, selection: { $scalars: true }, }) }) it('handles complex nested logical operators', () => { const query = { arguments: { where: { AND: [ { OR: [{ email: { endsWith: '@company.com' } }, { AND: [{ role: 'ADMIN' }, { verified: true }] }], }, { NOT: { OR: [{ status: 'BANNED' }, { status: 'SUSPENDED' }], }, }, ], }, }, selection: { $scalars: true }, } expect(parameterizeQuery(query)).toEqual({ arguments: { where: { AND: [ { OR: [ { email: { endsWith: PARAM_PLACEHOLDER } }, { AND: [{ role: PARAM_PLACEHOLDER }, { verified: PARAM_PLACEHOLDER }] }, ], }, { NOT: { OR: [{ status: PARAM_PLACEHOLDER }, { status: PARAM_PLACEHOLDER }], }, }, ], }, }, selection: { $scalars: true }, }) }) }) })

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