CraftJest / src /app.py
firnnauriel's picture
Remove unused import and set default values for inputs.
1001313
import gradio as gr
from dotenv import load_dotenv
from tools.generate_unit_test import generate_unit_test
from tools.setup_jest import setup_jest
load_dotenv()
sample_code = """
/**
* Applies a discount to a price.
* @param price The original price.
* @param discountRate The discount rate (e.g., 0.15 for 15% off).
* @returns The discounted price.
*/
export function calculateDiscount(price: number, discountRate: number): number {
// No discount if rate is invalid (e.g., greater than 1, implying more than 100% discount)
if (discountRate > 1) {
return price;
}
return price * (1 - discountRate);
}
"""
sample_source_code_path = "src/calculate_discount.ts"
sample_test_root_dir_path = "test/"
sourceCodeContent = gr.Textbox(label="TypeScript code", lines=10, value=sample_code)
sourceCodeFullPath = gr.Textbox(label="Path of TypeScript code", lines=1, value=sample_source_code_path)
testFileFullPath = gr.Textbox(label="Path of root directory for Jest test files", lines=1,
value=sample_test_root_dir_path)
additionalSystemPrompt = gr.Textbox(label="Additional System Prompt", lines=10, value="")
anthropicApiKey = gr.Textbox(label="Your Anthropic API Key", lines=1, type="password", value="")
overview = """
## Overview
Developers spend up to 40% of their time writing and maintaining tests—time they could be spending on building new features. That's why I built CraftJest.
CraftJest is an intelligent protocol that automatically analyzes your TypeScript code and crafts high-quality, human-readable unit tests using Jest. It doesn't just create boilerplate; it understands the context, logic, and potential edge cases of your code to generate meaningful tests.
With a simple prompt, you can slash your testing time, improve code coverage, and let you focus on what truly matters: innovation!
## The Problem
In modern software development, unit testing is the bedrock of code quality and stability. However, it's also a major bottleneck. Writing comprehensive, high-quality unit tests is tedious, time-consuming, and often pushed aside under tight deadlines. This leads to inconsistent test quality, reduced code coverage, and a higher risk of bugs in production. Developers are forced to choose between building new features and ensuring the reliability of existing ones. This painful trade-off slows down innovation and demoralizes development teams.
## The Solution
CraftJest is a revolutionary "Model Context Protocol" designed to eliminate the friction of unit testing. It’s an intelligent tool that acts as a co-pilot for developers, automatically generating robust and readable Jest unit tests for any TypeScript codebase.
I call it CraftJest because it doesn't just generate tests—it crafts them. Using a sophisticated system prompt, it goes beyond simple function signatures to understand the underlying logic, variable types, dependencies, and intended behavior of your code.
## Demo
- **MCP Server URL:** https://agents-mcp-hackathon-craftjest.hf.space/gradio_api/mcp/sse
## Supported Prompts
- "Setup Jest in this project."
- "Generate unit test for this file."
- "Generate unit test for this file. Use CleanArchitectureUnitTestGuideline.md as additional context."
"""
generate_unit_test_demo = gr.Interface(
fn=generate_unit_test,
inputs=[sourceCodeContent, sourceCodeFullPath, testFileFullPath, additionalSystemPrompt, anthropicApiKey],
outputs=gr.Textbox(label="Jest Unit Test", lines=10),
description=overview
)
setup_jest_demo = gr.Interface(
fn=setup_jest,
inputs=[],
outputs=gr.Textbox(label="Jest Setup Guide", lines=10),
description="Generate a comprehensive guide for Jest setup, including TypeScript integration and code coverage configuration.",
)
# Create tabbed interface
demo = gr.TabbedInterface(
[generate_unit_test_demo, setup_jest_demo],
["Generate Unit Test", "Setup Jest"],
title="CraftJest: Spend less time testing, more time creating!",
theme=gr.themes.Soft(),
)
if __name__ == "__main__":
demo.launch(mcp_server=True)