UNPKG

create-esmx

Version:

A scaffold tool for creating Esmx projects

151 lines (145 loc) 5.18 kB
import { describe, expect, it } from "vitest"; import { replaceTemplateVariables } from "./template.mjs"; describe("replaceTemplateVariables", () => { describe("basic functionality", () => { it("should replace single variable", () => { const content = "Hello {{name}}!"; const variables = { name: "World" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Hello World!"); }); it("should replace multiple different variables", () => { const content = "Project {{projectName}} version {{version}}"; const variables = { projectName: "my-app", version: "1.0.0" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Project my-app version 1.0.0"); }); it("should replace same variable multiple times", () => { const content = "{{greeting}} {{name}}, {{greeting}} again!"; const variables = { greeting: "Hello", name: "World" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Hello World, Hello again!"); }); }); describe("edge cases", () => { it("should handle content without variables", () => { const content = "No variables here"; const variables = { name: "World" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("No variables here"); }); it("should handle empty variables object", () => { const content = "Hello {{name}}!"; const variables = {}; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Hello {{name}}!"); }); it("should handle empty content", () => { const content = ""; const variables = { name: "World" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe(""); }); it("should handle variables with special characters", () => { const content = "Command: {{installCommand}}"; const variables = { installCommand: "npm install --save-dev" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Command: npm install --save-dev"); }); it("should handle variables with regex special characters", () => { const content = "Pattern: {{pattern}}"; const variables = { pattern: "[a-z]+.*$" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Pattern: [a-z]+.*$"); }); }); describe("real-world scenarios", () => { it("should handle all template variables from create-esmx", () => { const content = `# {{projectName}} Install dependencies: \`\`\`bash {{installCommand}} \`\`\` Start development: \`\`\`bash {{devCommand}} \`\`\` Build for production: \`\`\`bash {{buildCommand}} \`\`\` Start production server: \`\`\`bash {{startCommand}} \`\`\` Esmx version: {{esmxVersion}}`; const variables = { projectName: "my-awesome-app", installCommand: "pnpm install", devCommand: "pnpm dev", buildCommand: "pnpm build", startCommand: "pnpm start", esmxVersion: "3.0.0-rc.33" }; const result = replaceTemplateVariables(content, variables); expect(result).toContain("# my-awesome-app"); expect(result).toContain("pnpm install"); expect(result).toContain("pnpm dev"); expect(result).toContain("pnpm build"); expect(result).toContain("pnpm start"); expect(result).toContain("3.0.0-rc.33"); expect(result).not.toContain("{{"); expect(result).not.toContain("}}"); }); it("should handle package.json template", () => { const content = `{ "name": "{{projectName}}", "version": "1.0.0", "scripts": { "dev": "esmx dev", "build": "esmx build", "start": "esmx start" }, "dependencies": { "esmx": "{{esmxVersion}}" } }`; const variables = { projectName: "@scope/my-package", esmxVersion: "^3.0.0" }; const result = replaceTemplateVariables(content, variables); expect(result).toContain('"name": "@scope/my-package"'); expect(result).toContain('"esmx": "^3.0.0"'); }); }); describe("variable name validation", () => { it("should handle variables with underscores", () => { const content = "Command: {{install_command}}"; const variables = { install_command: "npm install" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Command: npm install"); }); it("should handle variables with numbers", () => { const content = "Node version: {{node18}}"; const variables = { node18: "v18.12.0" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Node version: v18.12.0"); }); it("should be case sensitive", () => { const content = "Hello {{Name}} and {{name}}!"; const variables = { Name: "Alice", name: "Bob" }; const result = replaceTemplateVariables(content, variables); expect(result).toBe("Hello Alice and Bob!"); }); }); });