---
description: Create and execute comprehensive tests for implemented features
argument-hint: <instance-name> <feature name or description>
---

# /eg:test

You are tasked with creating and executing comprehensive tests for implemented features, including unit tests, integration tests, and end-to-end tests based on the feature definition and implementation.

Input: `$ARGUMENTS`

## Step 1: Parse Arguments and Gather Context

Parse the arguments to extract:
- Instance name (first word before space)
- Feature name or description (everything after first space)

Gather context:
- Read feature definition from `.eg/{instance-name}/feature-definition.md` if it exists
- Review implementation to understand what needs testing
- Identify testing framework from the project

## Step 2: Generate Comprehensive Tests

Use the Task tool to create tests:

```
Task(
  description="Create comprehensive test suite",
  prompt=`
    Create comprehensive tests for: {feature-description}
    
    Context:
    - Feature definition: @.eg/{instance-name}/feature-definition.md (if exists)
    - Implementation to test: Review recent code changes
    
    Create tests including:
    1. Unit tests for individual functions/methods
    2. Integration tests for component interactions  
    3. End-to-end tests for user scenarios (use playwright-mcp if applicable)
    4. Edge case tests based on boundary conditions
    5. Error handling tests
    6. Performance tests where relevant
    
    Focus on:
    - Acceptance criteria from feature definition
    - Happy path scenarios
    - Edge cases and boundary conditions
    - Error conditions and exception handling
    - Security-related test cases
    - Performance and load considerations
    
    Follow project testing conventions and framework.
    Use descriptive test names that explain what is being tested.
    Ensure tests are maintainable, fast, and provide clear failure messages.
  `,
  subagent_type="tester"
)
```

## Step 3: Execute Tests

Run the generated tests:

```
# Detect and run appropriate test command
!if [ -f "package.json" ]; then
  npm test || yarn test || pnpm test
elif [ -f "requirements.txt" ] || [ -f "pyproject.toml" ]; then
  pytest || python -m pytest
elif [ -f "go.mod" ]; then
  go test ./...
elif [ -f "Cargo.toml" ]; then
  cargo test
else
  echo "Could not detect test framework"
fi
```

## Step 4: Analyze Results

Capture and analyze test results:
- Number of tests created
- Pass/fail statistics  
- Coverage percentage (if available)
- Any failures or issues

If tests fail:
- Analyze failure reasons
- Determine if it's a test issue or code issue
- Fix and re-run as needed

## Step 5: Report Summary

Document test results using the template:

```
Task(
  description="Document test results",
  prompt=`
    Create a comprehensive test report for the executed tests.
    
    Use the test results template from .claude/templates/test-results.template.md
    
    Include:
    - Test summary with pass/fail counts by type
    - Coverage metrics (line, branch, function)
    - Detailed results for each test category
    - Failed test analysis with root causes
    - Performance metrics
    - Recommendations for improvement
    
    Save the report to: .eg/{instance-name}/test-results.md
  `,
  subagent_type="summarizer"
)
```
- Recommendations for additional testing

## Step 6: Phase Gate and Completion

### Phase Gate - Test Results Review

Present test results and ask for approval:
- If all tests pass: "All tests passing with {coverage}% coverage. Feature ready for deployment? (yes/no)"
- If some tests fail: "Found {failed} failing tests. Should we: a) Fix the failures, b) Review if tests are correct, c) Accept known issues? (a/b/c)"

Based on response:
- If yes (all passing): "Feature testing complete! Ready for deployment or PR creation."
- If no: "What additional testing or coverage is needed?"
- If fixing failures: "Use `/eg:implement {instance-name}` to fix the failing tests"
- If reviewing tests: "Let's review the test assumptions and requirements"

Save test summary:
```
!echo "Test results saved to .eg/{instance-name}/test-results.md"
```