Skip to main content
Glama

Prisma MCP Server

Official
by prisma
Init.test.ts21.1 kB
import { defaultTestConfig } from '@prisma/config' import { jestConsoleContext, jestContext } from '@prisma/get-platform' import fs from 'fs' import { join } from 'path' import stripAnsi from 'strip-ansi' import { defaultEnv, defaultSchema, Init } from '../Init' const ctx = jestContext.new().add(jestConsoleContext()).assemble() test('is schema and env written on disk replace', async () => { const recordedStdout = (await Init.new().parse([], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch(defaultSchema()) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatch(await defaultEnv(undefined)) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('prisma/schema.prisma') expect(config).toMatchInlineSnapshot(` "// This file was generated by Prisma and assumes you have installed the following: // npm install --save-dev prisma dotenv import "dotenv/config"; import { defineConfig, env } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: env("DATABASE_URL"), }, }); " `) }) test('works with url param', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--url', 'file:dev.db'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'sqlite', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="file:dev.db"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('url: env("DATABASE_URL")') expect(config).toMatchInlineSnapshot(` "// This file was generated by Prisma and assumes you have installed the following: // npm install --save-dev prisma dotenv import "dotenv/config"; import { defineConfig, env } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: env("DATABASE_URL"), }, }); " `) }) test('works with provider param - postgresql', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse(['--datasource-provider', 'postgresql'], defaultTestConfig()) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'postgresql', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('url: env("DATABASE_URL")') expect(config).toMatchInlineSnapshot(` "// This file was generated by Prisma and assumes you have installed the following: // npm install --save-dev prisma dotenv import "dotenv/config"; import { defineConfig, env } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: env("DATABASE_URL"), }, }); " `) }) test('works with provider param - cockroachdb', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse(['--datasource-provider', 'cockroachdb'], defaultTestConfig()) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'cockroachdb', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="postgresql://johndoe:randompassword@localhost:26257/mydb?schema=public"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with provider and url params - cockroachdb', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse( ['--datasource-provider', 'cockroachdb', '--url', 'postgres://prisma@localhost:26257/defaultdb'], defaultTestConfig(), ) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'cockroachdb', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="postgresql://johndoe:randompassword@localhost:26257/mydb?schema=public"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('url: env("DATABASE_URL")') expect(config).toMatchSnapshot() }) test('works with provider param - mysql', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--datasource-provider', 'mysql'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'mysql', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="mysql://johndoe:randompassword@localhost:3306/mydb"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with provider param - SQLITE', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--datasource-provider', 'SQLITE'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'sqlite', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="file:./dev.db"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with provider param - SqlServer', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse(['--datasource-provider', 'SqlServer'], defaultTestConfig()) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'sqlserver', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="sqlserver://localhost:1433;database=mydb;user=SA;password=randompassword;"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with provider param - MongoDB', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--datasource-provider', 'MongoDB'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ datasourceProvider: 'mongodb', }), ) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatchInlineSnapshot(` "# Environment variables declared in this file are NOT automatically loaded by Prisma. # Please add \`import "dotenv/config";\` to your \`prisma.config.ts\` file, or use the Prisma CLI with Bun # to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="mongodb+srv://root:randompassword@cluster0.ab1cd.mongodb.net/mydb?retryWrites=true&w=majority"" `) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('errors with invalid provider param', async () => { ctx.fixture('init') await expect(Init.new().parse(['--datasource-provider', 'INVALID'], defaultTestConfig())).rejects.toThrow() }) test('works with --with-model param postgresql', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--with-model'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch(defaultSchema({ withModel: true, datasourceProvider: 'postgresql' })) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with --with-model param mongodb', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse(['--with-model', '--datasource-provider', 'MongoDB'], defaultTestConfig()) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch(defaultSchema({ withModel: true, datasourceProvider: 'mongodb' })) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with --with-model param cockroachdb', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse(['--with-model', '--datasource-provider', 'CockroachDB'], defaultTestConfig()) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch(defaultSchema({ withModel: true, datasourceProvider: 'cockroachdb' })) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with generator param - `go run github.com/steebchen/prisma-client-go`', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse( ['--generator-provider', 'go run github.com/steebchen/prisma-client-go'], defaultTestConfig(), ) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ generatorProvider: 'go run github.com/steebchen/prisma-client-go', }), ) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with preview features - mock test', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--preview-feature', 'mock-123'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ previewFeatures: ['mock-123'], }), ) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with preview features - multiple', async () => { ctx.fixture('init') const recordedStdout = ( await Init.new().parse(['--preview-feature', 'mock-123', '--preview-feature', 'mock-456'], defaultTestConfig()) ).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ previewFeatures: ['mock-123', 'mock-456'], }), ) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('works with custom output', async () => { ctx.fixture('init') const recordedStdout = (await Init.new().parse(['--output', './db'], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch( defaultSchema({ output: './db', }), ) expect(schema).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('warns when DATABASE_URL present in .env ', async () => { fs.writeFileSync(join(ctx.tmpDir, '.env'), `DATABASE_URL="postgres://dont:overwrite@me:5432/tests"`) const recordedStdout = (await Init.new().parse([], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch(defaultSchema()) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatch(`DATABASE_URL="postgres://dont:overwrite@me:5432/tests"`) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('appends when .env present', async () => { fs.writeFileSync(join(ctx.tmpDir, '.env'), `SOMETHING="is here"`) const recordedStdout = (await Init.new().parse([], defaultTestConfig())).toString() expect(stripAnsi(recordedStdout)).toMatchSnapshot() const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toMatch(defaultSchema()) expect(schema).toMatchSnapshot() const env = fs.readFileSync(join(ctx.tmpDir, '.env'), 'utf-8') expect(env).toMatch(/SOMETHING="is here"/) expect(env).toMatch(/DATABASE_URL="prisma\+postgres:\/\/localhost:(\d+)\/\?api_key=eyJk.*TAifQ"/) const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('writes a minimal .gitignore file', async () => { ctx.fixture('init') await Init.new().parse([], defaultTestConfig()) const gitignore = fs.readFileSync(join(ctx.tmpDir, '.gitignore'), 'utf-8') expect(gitignore).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('do not replace .gitignore file if already present', async () => { ctx.fixture('init') const gitignorePath = join(ctx.tmpDir, '.gitignore') fs.writeFileSync(gitignorePath, `# This should not be overridden`) fs.readFileSync(gitignorePath, 'utf-8') await Init.new().parse([], defaultTestConfig()) const gitignoreAfter = fs.readFileSync(gitignorePath, 'utf-8') expect(gitignoreAfter).toMatchSnapshot() const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() }) test('uses determineClientOutputPath when no output is specified', async () => { ctx.fixture('client-output-path/with-lib') await Init.new().parse([], defaultTestConfig()) const schema = fs.readFileSync(join(ctx.tmpDir, 'prisma', 'schema.prisma'), 'utf-8') expect(schema).toContain('output = "../lib/generated/prisma"') const config = fs.readFileSync(join(ctx.tmpDir, 'prisma.config.ts'), 'utf-8') expect(config).toContain('defineConfig') expect(config).toMatchSnapshot() })

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