Comprehensive developer toolkit providing reusable skills for Java/Spring Boot, TypeScript/NestJS/React/Next.js, Python, PHP, AWS CloudFormation, AI/RAG, DevOps, and more.
90
90%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Risky
Do not use without reviewing
#!/usr/bin/env python3
"""Tests for specs-task-tdd-parser.py."""
import json
import os
import subprocess
import sys
import tempfile
import textwrap
import importlib.util
hooks_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
parser_path = os.path.join(hooks_dir, "specs-task-tdd-parser.py")
spec = importlib.util.spec_from_file_location("specs_task_tdd_parser", parser_path)
task_tdd_parser = importlib.util.module_from_spec(spec)
sys.modules["specs_task_tdd_parser"] = task_tdd_parser
spec.loader.exec_module(task_tdd_parser)
def write_task_file(content: str) -> str:
handle = tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".md")
handle.write(textwrap.dedent(content).strip() + "\n")
handle.flush()
handle.close()
return handle.name
def test_parse_valid_task_file_extracts_frontmatter_and_test_instructions():
task_file = write_task_file(
"""
---
id: TASK-002
title: "Task File Parsing and Validation"
spec: docs/specs/002-tdd-command/2026-04-05--tdd-command.md
lang: general
dependencies: [TASK-001]
status: pending
---
# TASK-002: Task File Parsing and Validation
## Acceptance Criteria
- [ ] Task file is parsed
## Test Instructions
Verify parser behavior.
## Definition of Done (DoD)
- [ ] Done
"""
)
try:
result = task_tdd_parser.parse_task_file(task_file)
finally:
os.unlink(task_file)
assert result.metadata["id"] == "TASK-002"
assert result.metadata["title"] == "Task File Parsing and Validation"
assert result.metadata["lang"] == "general"
assert result.metadata["dependencies"] == ["TASK-001"]
assert result.metadata["status"] == "pending"
assert result.title_heading == "TASK-002: Task File Parsing and Validation"
assert result.test_instructions == "Verify parser behavior."
assert result.warnings == []
def test_validate_metadata_rejects_invalid_task_identifier():
metadata = {
"id": "TASK-2",
"title": "Invalid task",
"spec": "docs/specs/example.md",
"lang": "general",
"dependencies": [],
"status": "pending",
}
try:
task_tdd_parser.validate_metadata(metadata)
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E3"
assert "TASK-XXX" in str(exc)
def test_validate_metadata_accepts_supported_status_values():
metadata = {
"id": "TASK-002",
"title": "Valid task",
"spec": "docs/specs/example.md",
"lang": "general",
"dependencies": ["TASK-001"],
"status": "red-phase",
}
task_tdd_parser.validate_metadata(metadata)
def test_validate_metadata_rejects_missing_status():
metadata = {
"id": "TASK-002",
"title": "Invalid task",
"spec": "docs/specs/example.md",
"lang": "general",
"dependencies": [],
"status": None,
}
try:
task_tdd_parser.validate_metadata(metadata)
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E3"
assert "status" in str(exc)
def test_validate_metadata_rejects_unsupported_status():
metadata = {
"id": "TASK-002",
"title": "Invalid task",
"spec": "docs/specs/example.md",
"lang": "general",
"dependencies": [],
"status": "in-progress",
}
try:
task_tdd_parser.validate_metadata(metadata)
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E3"
assert "status" in str(exc)
def test_parse_task_file_rejects_missing_frontmatter():
task_file = write_task_file(
"""
# TASK-002: Task File Parsing and Validation
## Test Instructions
Verify parser behavior.
"""
)
try:
task_tdd_parser.parse_task_file(task_file)
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E3"
assert "frontmatter" in str(exc)
finally:
os.unlink(task_file)
def test_parse_task_file_rejects_missing_required_frontmatter_fields():
task_file = write_task_file(
"""
---
id: TASK-002
lang: general
dependencies: []
---
# TASK-002: Task File Parsing and Validation
## Test Instructions
Verify parser behavior.
"""
)
try:
task_tdd_parser.parse_task_file(task_file)
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E3"
assert "title, spec" in str(exc)
finally:
os.unlink(task_file)
def test_parse_task_file_rejects_malformed_frontmatter_line():
task_file = write_task_file(
"""
---
id TASK-002
title: "Task File Parsing and Validation"
spec: docs/specs/002-tdd-command/2026-04-05--tdd-command.md
lang: general
dependencies: []
---
# TASK-002: Task File Parsing and Validation
## Test Instructions
Verify parser behavior.
"""
)
try:
task_tdd_parser.parse_task_file(task_file)
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E3"
assert "Invalid frontmatter line" in str(exc)
finally:
os.unlink(task_file)
def test_parse_task_file_flags_missing_test_instructions_for_a3_flow():
task_file = write_task_file(
"""
---
id: TASK-002
title: "Task File Parsing and Validation"
spec: docs/specs/002-tdd-command/2026-04-05--tdd-command.md
lang: general
dependencies: [TASK-001]
status: pending
---
# TASK-002: Task File Parsing and Validation
## Acceptance Criteria
- [ ] Task file is parsed
"""
)
try:
result = task_tdd_parser.parse_task_file(task_file)
finally:
os.unlink(task_file)
assert result.test_instructions is None
assert len(result.warnings) == 1
assert result.warnings[0].code == "A3"
assert "Test Instructions" in result.warnings[0].message
def test_parse_task_file_flags_empty_test_instructions_for_a3_flow():
task_file = write_task_file(
"""
---
id: TASK-002
title: "Task File Parsing and Validation"
spec: docs/specs/002-tdd-command/2026-04-05--tdd-command.md
lang: general
dependencies: [TASK-001]
status: pending
---
# TASK-002: Task File Parsing and Validation
## Test Instructions
## Definition of Done (DoD)
- [ ] Done
"""
)
try:
result = task_tdd_parser.parse_task_file(task_file)
finally:
os.unlink(task_file)
assert result.test_instructions is None
assert result.warnings[0].code == "A3"
assert "empty Test Instructions section" in result.warnings[0].message
def test_parse_task_file_reports_missing_file_as_e1():
try:
task_tdd_parser.parse_task_file("/nonexistent/TASK-002.md")
assert False, "Expected TaskFileError"
except task_tdd_parser.TaskFileError as exc:
assert exc.code == "E1"
assert "spec-to-tasks" in str(exc)
def test_cli_outputs_json_for_valid_task_file():
task_file = write_task_file(
"""
---
id: TASK-002
title: "Task File Parsing and Validation"
spec: docs/specs/002-tdd-command/2026-04-05--tdd-command.md
lang: general
dependencies: [TASK-001]
status: pending
---
# TASK-002: Task File Parsing and Validation
## Test Instructions
Verify parser behavior.
"""
)
try:
completed = subprocess.run(
[sys.executable, parser_path, "--task", task_file],
check=False,
capture_output=True,
text=True,
)
finally:
os.unlink(task_file)
assert completed.returncode == 0
payload = json.loads(completed.stdout)
assert payload["metadata"]["id"] == "TASK-002"
assert payload["test_instructions"] == "Verify parser behavior."
def test_cli_outputs_error_json_for_invalid_task_file():
completed = subprocess.run(
[sys.executable, parser_path, "--task", "/nonexistent/TASK-002.md"],
check=False,
capture_output=True,
text=True,
)
assert completed.returncode == 1
payload = json.loads(completed.stdout)
assert payload["error"]["code"] == "E1"docs
plugins
developer-kit-ai
developer-kit-aws
agents
docs
skills
aws
aws-cli-beast
aws-cost-optimization
aws-drawio-architecture-diagrams
aws-sam-bootstrap
aws-cloudformation
aws-cloudformation-auto-scaling
aws-cloudformation-bedrock
aws-cloudformation-cloudfront
aws-cloudformation-cloudwatch
aws-cloudformation-dynamodb
aws-cloudformation-ec2
aws-cloudformation-ecs
aws-cloudformation-elasticache
references
aws-cloudformation-iam
references
aws-cloudformation-lambda
aws-cloudformation-rds
aws-cloudformation-s3
aws-cloudformation-security
aws-cloudformation-task-ecs-deploy-gh
aws-cloudformation-vpc
references
developer-kit-core
agents
commands
skills
developer-kit-devops
developer-kit-java
agents
commands
docs
skills
aws-lambda-java-integration
aws-rds-spring-boot-integration
aws-sdk-java-v2-bedrock
aws-sdk-java-v2-core
aws-sdk-java-v2-dynamodb
aws-sdk-java-v2-kms
aws-sdk-java-v2-lambda
aws-sdk-java-v2-messaging
aws-sdk-java-v2-rds
aws-sdk-java-v2-s3
aws-sdk-java-v2-secrets-manager
clean-architecture
graalvm-native-image
langchain4j-ai-services-patterns
references
langchain4j-mcp-server-patterns
references
langchain4j-rag-implementation-patterns
references
langchain4j-spring-boot-integration
langchain4j-testing-strategies
langchain4j-tool-function-calling-patterns
langchain4j-vector-stores-configuration
references
qdrant
references
spring-ai-mcp-server-patterns
spring-boot-actuator
spring-boot-cache
spring-boot-crud-patterns
spring-boot-dependency-injection
spring-boot-event-driven-patterns
spring-boot-openapi-documentation
spring-boot-project-creator
spring-boot-resilience4j
spring-boot-rest-api-standards
spring-boot-saga-pattern
spring-boot-security-jwt
assets
references
scripts
spring-boot-test-patterns
spring-data-jpa
references
spring-data-neo4j
references
unit-test-application-events
unit-test-bean-validation
unit-test-boundary-conditions
unit-test-caching
unit-test-config-properties
references
unit-test-controller-layer
unit-test-exception-handler
references
unit-test-json-serialization
unit-test-mapper-converter
references
unit-test-parameterized
unit-test-scheduled-async
references
unit-test-service-layer
references
unit-test-utility-methods
unit-test-wiremock-rest-api
references
developer-kit-php
developer-kit-project-management
developer-kit-python
developer-kit-specs
commands
docs
hooks
test-templates
tests
skills
developer-kit-tools
developer-kit-typescript
agents
docs
hooks
rules
skills
aws-cdk
aws-lambda-typescript-integration
better-auth
clean-architecture
drizzle-orm-patterns
dynamodb-toolbox-patterns
references
nestjs
nestjs-best-practices
nestjs-code-review
nestjs-drizzle-crud-generator
nextjs-app-router
nextjs-authentication
nextjs-code-review
nextjs-data-fetching
nextjs-deployment
nextjs-performance
nx-monorepo
react-code-review
react-patterns
shadcn-ui
tailwind-css-patterns
tailwind-design-system
references
turborepo-monorepo
typescript-docs
typescript-security-review
zod-validation-utilities
references
github-spec-kit