mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
chore(cli): add tests (#576)
This commit is contained in:
237
apps/cli/test/database-orm.test.ts
Normal file
237
apps/cli/test/database-orm.test.ts
Normal file
@@ -0,0 +1,237 @@
|
||||
import { describe, it } from "vitest";
|
||||
import type { Database, ORM } from "../src/types";
|
||||
import {
|
||||
DATABASES,
|
||||
expectError,
|
||||
expectSuccess,
|
||||
runTRPCTest,
|
||||
} from "./test-utils";
|
||||
|
||||
describe("Database and ORM Combinations", () => {
|
||||
describe("Valid Database-ORM Combinations", () => {
|
||||
const validCombinations: Array<{ database: Database; orm: ORM }> = [
|
||||
// SQLite combinations
|
||||
{ database: "sqlite" as Database, orm: "drizzle" as ORM },
|
||||
{ database: "sqlite" as Database, orm: "prisma" as ORM },
|
||||
|
||||
// PostgreSQL combinations
|
||||
{ database: "postgres" as Database, orm: "drizzle" as ORM },
|
||||
{ database: "postgres" as Database, orm: "prisma" as ORM },
|
||||
|
||||
// MySQL combinations
|
||||
{ database: "mysql" as Database, orm: "drizzle" as ORM },
|
||||
{ database: "mysql" as Database, orm: "prisma" as ORM },
|
||||
|
||||
// MongoDB combinations
|
||||
{ database: "mongodb" as Database, orm: "mongoose" as ORM },
|
||||
{ database: "mongodb" as Database, orm: "prisma" as ORM },
|
||||
|
||||
// None combinations
|
||||
{ database: "none" as Database, orm: "none" as ORM },
|
||||
];
|
||||
|
||||
for (const { database, orm } of validCombinations) {
|
||||
it(`should work with ${database} + ${orm}`, async () => {
|
||||
const result = await runTRPCTest({
|
||||
projectName: `${database}-${orm}`,
|
||||
database,
|
||||
orm,
|
||||
backend: "hono",
|
||||
runtime: "bun",
|
||||
frontend: ["tanstack-router"],
|
||||
auth: "none",
|
||||
api: "trpc",
|
||||
addons: ["none"],
|
||||
examples: ["none"],
|
||||
dbSetup: "none",
|
||||
webDeploy: "none",
|
||||
serverDeploy: "none",
|
||||
install: false,
|
||||
});
|
||||
|
||||
expectSuccess(result);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe("Invalid Database-ORM Combinations", () => {
|
||||
const invalidCombinations: Array<{
|
||||
database: Database;
|
||||
orm: ORM;
|
||||
error: string;
|
||||
}> = [
|
||||
// MongoDB with Drizzle (not supported)
|
||||
{
|
||||
database: "mongodb" as Database,
|
||||
orm: "drizzle" as ORM,
|
||||
error: "Drizzle ORM does not support MongoDB",
|
||||
},
|
||||
|
||||
// Mongoose with non-MongoDB
|
||||
{
|
||||
database: "sqlite" as Database,
|
||||
orm: "mongoose" as ORM,
|
||||
error: "Mongoose ORM requires MongoDB database",
|
||||
},
|
||||
{
|
||||
database: "postgres" as Database,
|
||||
orm: "mongoose" as ORM,
|
||||
error: "Mongoose ORM requires MongoDB database",
|
||||
},
|
||||
{
|
||||
database: "mysql" as Database,
|
||||
orm: "mongoose" as ORM,
|
||||
error: "Mongoose ORM requires MongoDB database",
|
||||
},
|
||||
|
||||
// Database without ORM
|
||||
{
|
||||
database: "sqlite" as Database,
|
||||
orm: "none" as ORM,
|
||||
error: "Database selection requires an ORM",
|
||||
},
|
||||
{
|
||||
database: "postgres" as Database,
|
||||
orm: "none" as ORM,
|
||||
error: "Database selection requires an ORM",
|
||||
},
|
||||
|
||||
// ORM without database
|
||||
{
|
||||
database: "none" as Database,
|
||||
orm: "drizzle" as ORM,
|
||||
error: "ORM selection requires a database",
|
||||
},
|
||||
{
|
||||
database: "none" as Database,
|
||||
orm: "prisma" as ORM,
|
||||
error: "ORM selection requires a database",
|
||||
},
|
||||
];
|
||||
|
||||
for (const { database, orm, error } of invalidCombinations) {
|
||||
it(`should fail with ${database} + ${orm}`, async () => {
|
||||
const result = await runTRPCTest({
|
||||
projectName: `invalid-${database}-${orm}`,
|
||||
database,
|
||||
orm,
|
||||
backend: "hono",
|
||||
runtime: "bun",
|
||||
frontend: ["tanstack-router"],
|
||||
auth: "none",
|
||||
api: "trpc",
|
||||
addons: ["none"],
|
||||
examples: ["none"],
|
||||
dbSetup: "none",
|
||||
webDeploy: "none",
|
||||
serverDeploy: "none",
|
||||
expectError: true,
|
||||
});
|
||||
|
||||
expectError(result, error);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe("Database-ORM with Authentication", () => {
|
||||
it("should work with database + auth", async () => {
|
||||
const result = await runTRPCTest({
|
||||
projectName: "db-auth",
|
||||
database: "sqlite",
|
||||
orm: "drizzle",
|
||||
auth: "better-auth",
|
||||
backend: "hono",
|
||||
runtime: "bun",
|
||||
frontend: ["tanstack-router"],
|
||||
api: "trpc",
|
||||
addons: ["none"],
|
||||
examples: ["none"],
|
||||
dbSetup: "none",
|
||||
webDeploy: "none",
|
||||
serverDeploy: "none",
|
||||
install: false,
|
||||
});
|
||||
|
||||
expectSuccess(result);
|
||||
});
|
||||
|
||||
it("should fail with auth but no database (non-convex backend)", async () => {
|
||||
const result = await runTRPCTest({
|
||||
projectName: "auth-no-db",
|
||||
database: "none",
|
||||
orm: "none",
|
||||
auth: "better-auth",
|
||||
backend: "hono",
|
||||
runtime: "bun",
|
||||
frontend: ["tanstack-router"],
|
||||
api: "trpc",
|
||||
addons: ["none"],
|
||||
examples: ["none"],
|
||||
dbSetup: "none",
|
||||
webDeploy: "none",
|
||||
serverDeploy: "none",
|
||||
expectError: true,
|
||||
});
|
||||
|
||||
expectError(result, "Authentication requires a database");
|
||||
});
|
||||
|
||||
it("should work with auth but no database (convex backend)", async () => {
|
||||
const result = await runTRPCTest({
|
||||
projectName: "convex-auth-no-db",
|
||||
database: "none",
|
||||
orm: "none",
|
||||
auth: "none",
|
||||
backend: "convex",
|
||||
runtime: "none",
|
||||
frontend: ["tanstack-router"],
|
||||
api: "none",
|
||||
addons: ["none"],
|
||||
examples: ["none"],
|
||||
dbSetup: "none",
|
||||
webDeploy: "none",
|
||||
serverDeploy: "none",
|
||||
install: false,
|
||||
});
|
||||
|
||||
expectSuccess(result);
|
||||
});
|
||||
});
|
||||
|
||||
describe("All Database Types", () => {
|
||||
for (const database of DATABASES) {
|
||||
if (database === "none") continue;
|
||||
|
||||
it(`should have valid ORM options for ${database}`, async () => {
|
||||
// Test with the most compatible ORM for each database
|
||||
const ormMap = {
|
||||
sqlite: "drizzle",
|
||||
postgres: "drizzle",
|
||||
mysql: "drizzle",
|
||||
mongodb: "mongoose",
|
||||
};
|
||||
|
||||
const orm = ormMap[database as keyof typeof ormMap];
|
||||
|
||||
const result = await runTRPCTest({
|
||||
projectName: `test-${database}`,
|
||||
database: database as Database,
|
||||
orm: orm as ORM,
|
||||
backend: "hono",
|
||||
runtime: "bun",
|
||||
frontend: ["tanstack-router"],
|
||||
auth: "none",
|
||||
api: "trpc",
|
||||
addons: ["none"],
|
||||
examples: ["none"],
|
||||
dbSetup: "none",
|
||||
webDeploy: "none",
|
||||
serverDeploy: "none",
|
||||
install: false,
|
||||
});
|
||||
|
||||
expectSuccess(result);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user