Files
better-auth/packages/cli/test/generate-all-db.test.ts
2025-09-03 13:40:54 -07:00

373 lines
7.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { generateDrizzleSchema } from "../src/generators/drizzle";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { twoFactor, username } from "better-auth/plugins";
import { passkey } from "better-auth/plugins/passkey";
import type { BetterAuthOptions } from "better-auth";
describe("generate drizzle schema for all databases", async () => {
it("should generate drizzle schema for MySQL", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
),
plugins: [twoFactor(), username()],
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-mysql.txt",
);
});
it("should generate drizzle schema for SQLite", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
),
plugins: [twoFactor(), username()],
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-sqlite.txt",
);
});
it("should generate drizzle schema for MySQL with number id", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
),
plugins: [twoFactor(), username()],
advanced: {
database: {
useNumberId: true,
},
},
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-mysql-number-id.txt",
);
});
it("should generate drizzle schema for SQLite with number id", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
),
plugins: [twoFactor(), username()],
advanced: {
database: {
useNumberId: true,
},
},
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-sqlite-number-id.txt",
);
});
});
describe("generate drizzle schema for all databases with passkey plugin", async () => {
it("should generate drizzle schema for MySQL with passkey plugin", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
),
plugins: [passkey()],
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-mysql-passkey.txt",
);
});
it("should generate drizzle schema for SQLite with passkey plugin", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
),
plugins: [passkey()],
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-sqlite-passkey.txt",
);
});
it("should generate drizzle schema for PostgreSQL with passkey plugin", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "pg",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "pg",
schema: {},
},
),
plugins: [passkey()],
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-pg-passkey.txt",
);
});
it("should generate drizzle schema for MySQL with passkey plugin and number id", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "mysql",
schema: {},
},
),
plugins: [passkey()],
advanced: {
database: {
useNumberId: true,
},
},
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-mysql-passkey-number-id.txt",
);
});
it("should generate drizzle schema for SQLite with passkey plugin and number id", async () => {
const schema = await generateDrizzleSchema({
file: "test.drizzle",
adapter: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
)({} as BetterAuthOptions),
options: {
database: drizzleAdapter(
{},
{
provider: "sqlite",
schema: {},
},
),
plugins: [passkey()],
advanced: {
database: {
useNumberId: true,
},
},
user: {
modelName: "custom_user",
},
account: {
modelName: "custom_account",
},
session: {
modelName: "custom_session",
},
verification: {
modelName: "custom_verification",
},
},
});
expect(schema.code).toMatchFileSnapshot(
"./__snapshots__/auth-schema-sqlite-passkey-number-id.txt",
);
});
});