Skip to main content
Glama

documcp

by tosin2013
guided-workflow-prompts.test.ts11.2 kB
import { generateTechnicalWriterPrompts } from "../../src/prompts/technical-writer-prompts.js"; import { promises as fs } from "fs"; import { join } from "path"; import { tmpdir } from "os"; describe("Guided Workflow Prompts", () => { let tempDir: string; beforeEach(async () => { tempDir = join( tmpdir(), `test-prompts-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, ); await fs.mkdir(tempDir, { recursive: true }); // Create a test project structure await fs.writeFile( join(tempDir, "package.json"), JSON.stringify({ name: "test-project", version: "1.0.0", dependencies: { react: "^18.0.0" }, scripts: { test: "jest", build: "webpack" }, }), ); await fs.writeFile( join(tempDir, "README.md"), "# Test Project\n\nThis is a test project.", ); await fs.mkdir(join(tempDir, "src")); await fs.writeFile(join(tempDir, "src/index.js"), 'console.log("hello");'); await fs.mkdir(join(tempDir, "tests")); await fs.writeFile( join(tempDir, "tests/index.test.js"), 'test("basic", () => {});', ); }); afterEach(async () => { try { await fs.rm(tempDir, { recursive: true }); } catch { // Ignore cleanup errors } }); describe("analyze-and-recommend prompt", () => { it("should generate comprehensive analysis and recommendation prompt", async () => { const messages = await generateTechnicalWriterPrompts( "analyze-and-recommend", tempDir, { analysis_depth: "standard", preferences: "performance and ease of use", }, ); expect(messages).toHaveLength(1); expect(messages[0]).toHaveProperty("role", "user"); expect(messages[0]).toHaveProperty("content"); expect(messages[0].content).toHaveProperty("type", "text"); expect(messages[0].content.text).toContain( "Execute a complete repository analysis", ); expect(messages[0].content.text).toContain("SSG recommendation workflow"); expect(messages[0].content.text).toContain("Analysis Depth: standard"); expect(messages[0].content.text).toContain( "Preferences: performance and ease of use", ); expect(messages[0].content.text).toContain("Repository Analysis"); expect(messages[0].content.text).toContain("Implementation Guidance"); expect(messages[0].content.text).toContain("Best Practices"); }); it("should use default values when optional parameters are not provided", async () => { const messages = await generateTechnicalWriterPrompts( "analyze-and-recommend", tempDir, {}, ); expect(messages[0].content.text).toContain("Analysis Depth: standard"); expect(messages[0].content.text).toContain( "balanced approach with good community support", ); }); it("should include project context information", async () => { const messages = await generateTechnicalWriterPrompts( "analyze-and-recommend", tempDir, { analysis_depth: "deep", }, ); expect(messages[0].content.text).toContain("Type: node_application"); expect(messages[0].content.text).toContain("Has Tests: true"); expect(messages[0].content.text).toContain("Package Manager: npm"); }); }); describe("setup-documentation prompt", () => { it("should generate comprehensive documentation setup prompt", async () => { const messages = await generateTechnicalWriterPrompts( "setup-documentation", tempDir, { ssg_type: "docusaurus", include_examples: true, }, ); expect(messages).toHaveLength(1); expect(messages[0]).toHaveProperty("role", "user"); expect(messages[0].content.text).toContain( "Create a comprehensive documentation structure", ); expect(messages[0].content.text).toContain("SSG Type: docusaurus"); expect(messages[0].content.text).toContain("Include Examples: true"); expect(messages[0].content.text).toContain( "Diataxis Framework Implementation", ); expect(messages[0].content.text).toContain( "Tutorials: Learning-oriented content", ); expect(messages[0].content.text).toContain( "How-to Guides: Problem-solving content", ); expect(messages[0].content.text).toContain( "Reference: Information-oriented content", ); expect(messages[0].content.text).toContain( "Explanations: Understanding-oriented content", ); expect(messages[0].content.text).toContain("Configuration Setup"); expect(messages[0].content.text).toContain("GitHub Pages deployment"); expect(messages[0].content.text).toContain("with examples"); }); it("should handle minimal configuration", async () => { const messages = await generateTechnicalWriterPrompts( "setup-documentation", tempDir, { include_examples: false, }, ); expect(messages[0].content.text).toContain( "SSG Type: recommended based on project analysis", ); expect(messages[0].content.text).toContain("Include Examples: false"); expect(messages[0].content.text).toContain("templates"); expect(messages[0].content.text).not.toContain("with examples"); }); it("should include current documentation gaps", async () => { const messages = await generateTechnicalWriterPrompts( "setup-documentation", tempDir, {}, ); expect(messages[0].content.text).toContain("Current Documentation Gaps:"); expect(messages[0].content.text).toContain("Development Integration"); expect(messages[0].content.text).toContain( "production-ready documentation system", ); }); }); describe("troubleshoot-deployment prompt", () => { it("should generate comprehensive troubleshooting prompt", async () => { const messages = await generateTechnicalWriterPrompts( "troubleshoot-deployment", tempDir, { repository: "owner/repo", deployment_url: "https://owner.github.io/repo", issue_description: "build failing on GitHub Actions", }, ); expect(messages).toHaveLength(1); expect(messages[0]).toHaveProperty("role", "user"); expect(messages[0].content.text).toContain( "Diagnose and fix GitHub Pages deployment issues", ); expect(messages[0].content.text).toContain("Repository: owner/repo"); expect(messages[0].content.text).toContain( "Expected URL: https://owner.github.io/repo", ); expect(messages[0].content.text).toContain( "Issue Description: build failing on GitHub Actions", ); expect(messages[0].content.text).toContain("Troubleshooting Checklist"); expect(messages[0].content.text).toContain("Repository Settings"); expect(messages[0].content.text).toContain("Build Configuration"); expect(messages[0].content.text).toContain("Content Issues"); expect(messages[0].content.text).toContain("Deployment Workflow"); expect(messages[0].content.text).toContain("Performance and Security"); expect(messages[0].content.text).toContain("Root cause analysis"); expect(messages[0].content.text).toContain("Systematic Testing"); }); it("should use default values for optional parameters", async () => { const messages = await generateTechnicalWriterPrompts( "troubleshoot-deployment", tempDir, { repository: "test/repo", }, ); expect(messages[0].content.text).toContain( "Expected URL: GitHub Pages URL", ); expect(messages[0].content.text).toContain( "Issue Description: deployment not working as expected", ); }); it("should include project context for troubleshooting", async () => { const messages = await generateTechnicalWriterPrompts( "troubleshoot-deployment", tempDir, { repository: "test/repo", }, ); expect(messages[0].content.text).toContain("Project Context"); expect(messages[0].content.text).toContain("Type: node_application"); expect(messages[0].content.text).toContain("Diagnostic Approach"); expect(messages[0].content.text).toContain("Systematic Testing"); }); }); describe("Error handling", () => { it("should throw error for unknown prompt type", async () => { await expect( generateTechnicalWriterPrompts("unknown-prompt-type", tempDir, {}), ).rejects.toThrow("Unknown prompt type: unknown-prompt-type"); }); it("should handle missing project directory gracefully", async () => { const nonExistentDir = join(tmpdir(), "non-existent-dir"); // Should not throw, but may have reduced context const messages = await generateTechnicalWriterPrompts( "analyze-and-recommend", nonExistentDir, {}, ); expect(messages).toHaveLength(1); expect(messages[0].content.text).toContain("repository analysis"); }); it("should handle malformed package.json gracefully", async () => { await fs.writeFile(join(tempDir, "package.json"), "invalid json content"); const messages = await generateTechnicalWriterPrompts( "setup-documentation", tempDir, {}, ); expect(messages).toHaveLength(1); expect(messages[0].content.text).toContain("documentation structure"); }); }); describe("Prompt content validation", () => { it("should generate prompts with consistent structure", async () => { const promptTypes = [ "analyze-and-recommend", "setup-documentation", "troubleshoot-deployment", ]; for (const promptType of promptTypes) { const args = promptType === "troubleshoot-deployment" ? { repository: "test/repo" } : {}; const messages = await generateTechnicalWriterPrompts( promptType, tempDir, args, ); expect(messages).toHaveLength(1); expect(messages[0]).toHaveProperty("role", "user"); expect(messages[0]).toHaveProperty("content"); expect(messages[0].content).toHaveProperty("type", "text"); expect(messages[0].content.text).toBeTruthy(); expect(messages[0].content.text.length).toBeGreaterThan(100); } }); it("should include project-specific information in all prompts", async () => { const promptTypes = ["analyze-and-recommend", "setup-documentation"]; for (const promptType of promptTypes) { const messages = await generateTechnicalWriterPrompts( promptType, tempDir, {}, ); expect(messages[0].content.text).toContain("Project Context"); expect(messages[0].content.text).toContain("Type:"); expect(messages[0].content.text).toContain("Languages:"); } }); }); });

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/tosin2013/documcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server