Files
create-better-t-stack/apps/cli/test/basic-configurations.test.ts
2025-09-14 11:29:01 +05:30

177 lines
4.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
expectError,
expectSuccess,
PACKAGE_MANAGERS,
runTRPCTest,
} from "./test-utils";
describe("Basic Configurations", () => {
describe("Default Configuration", () => {
it("should create project with --yes flag (default config)", async () => {
const result = await runTRPCTest({
projectName: "default-app",
yes: true,
install: false,
});
expectSuccess(result);
expect(result.result?.projectConfig.projectName).toBe("default-app");
});
it("should create project with explicit default values", async () => {
const result = await runTRPCTest({
projectName: "explicit-defaults",
database: "sqlite",
orm: "drizzle",
backend: "hono",
runtime: "bun",
frontend: ["tanstack-router"],
auth: "better-auth",
api: "trpc",
addons: ["turborepo"],
examples: ["none"],
dbSetup: "none",
webDeploy: "none",
serverDeploy: "none",
install: false, // Skip installation for faster tests
});
expectSuccess(result);
expect(result.result?.projectConfig.projectName).toBe(
"explicit-defaults",
);
});
});
describe("Package Managers", () => {
for (const packageManager of PACKAGE_MANAGERS) {
it(`should work with ${packageManager}`, async () => {
const result = await runTRPCTest({
projectName: `${packageManager}-app`,
packageManager,
yes: true,
install: false,
});
expectSuccess(result);
expect(result.result?.projectConfig.packageManager).toBe(
packageManager,
);
});
}
});
describe("Git Options", () => {
it("should work with git enabled", async () => {
const result = await runTRPCTest({
projectName: "git-enabled",
yes: true,
git: true,
install: false,
});
expectSuccess(result);
expect(result.result?.projectConfig.git).toBe(true);
});
it("should work with git disabled", async () => {
const result = await runTRPCTest({
projectName: "git-disabled",
yes: true,
git: false,
install: false,
});
expectSuccess(result);
expect(result.result?.projectConfig.git).toBe(false);
});
});
describe("Installation Options", () => {
it("should work with install enabled", async () => {
const result = await runTRPCTest({
projectName: "install-enabled",
yes: true,
install: true,
});
expectSuccess(result);
expect(result.result?.projectConfig.install).toBe(true);
});
it("should work with install disabled", async () => {
const result = await runTRPCTest({
projectName: "install-disabled",
yes: true,
install: false,
});
expectSuccess(result);
expect(result.result?.projectConfig.install).toBe(false);
});
});
describe("YOLO Mode", () => {
it("should bypass validations with --yolo flag", async () => {
// This would normally fail validation but should pass with yolo
const result = await runTRPCTest({
projectName: "yolo-app",
yolo: true,
frontend: ["tanstack-router"],
backend: "hono",
runtime: "bun",
api: "trpc",
database: "mongodb",
orm: "drizzle", // Incompatible combination
auth: "better-auth",
addons: ["none"],
examples: ["none"],
dbSetup: "none",
webDeploy: "none",
serverDeploy: "none",
install: false,
});
expectSuccess(result);
expect(result.result?.projectConfig.projectName).toBe("yolo-app");
});
});
describe("Error Handling", () => {
it("should fail with invalid project name", async () => {
const result = await runTRPCTest({
projectName: "<invalid>",
expectError: true,
});
expectError(result, "invalid characters");
});
it("should fail when combining --yes with configuration flags", async () => {
const result = await runTRPCTest({
projectName: "yes-with-flags",
yes: true, // Explicitly set yes flag
database: "postgres",
orm: "drizzle",
backend: "hono",
runtime: "bun",
frontend: ["tanstack-router"],
auth: "better-auth",
api: "trpc",
addons: ["none"],
examples: ["none"],
dbSetup: "none",
webDeploy: "none",
serverDeploy: "none",
expectError: true,
});
expectError(
result,
"Cannot combine --yes with core stack configuration flags",
);
});
});
});