CmdForge/tests/test_community.py

81 lines
2.7 KiB
Python

"""Tests for M9.3 community improvement workflow."""
from cmdforge.community import (
ImprovementSubmission,
create_submission,
run_submission_tests,
review_submission,
)
from cmdforge.tool import Tool, PromptStep, CodeStep
class TestCreateSubmission:
def test_create_for_prompt_step(self):
tool = Tool(
name="test",
version="1.0.0",
steps=[PromptStep(prompt="Summarize", provider="mock", output_var="x")],
output="{x}",
)
sub = create_submission(tool, 0, "Summarize the text thoroughly", "alice", "More detail")
assert sub.tool_name == "test"
assert sub.step_type == "prompt"
assert sub.original == "Summarize"
assert sub.proposed == "Summarize the text thoroughly"
assert sub.submitter == "alice"
assert sub.status == "pending"
def test_create_for_code_step(self):
tool = Tool(
name="test",
steps=[CodeStep(code="x = 1", output_var="x")],
output="{x}",
)
sub = create_submission(tool, 0, "x = 42", "bob")
assert sub.step_type == "code"
assert sub.original == "x = 1"
def test_invalid_step_index(self):
tool = Tool(name="test")
try:
create_submission(tool, 5, "new", "alice")
assert False, "Should have raised"
except ValueError:
pass
class TestReviewSubmission:
def test_review_approved(self):
sub = ImprovementSubmission(
tool_name="test", tool_version="1.0.0", submitter="alice",
step_index=0, step_type="prompt", original="a", proposed="b",
status="tested",
)
review = review_submission(sub, "approve", "admin", "Good improvement")
assert review.decision == "approve"
assert sub.status == "approve"
def test_review_pending_rejected(self):
sub = ImprovementSubmission(
tool_name="test", tool_version="1.0.0", submitter="alice",
step_index=0, step_type="prompt", original="a", proposed="b",
status="pending",
)
try:
review_submission(sub, "approve", "admin")
assert False, "Should have raised"
except ValueError:
pass
def test_invalid_decision(self):
sub = ImprovementSubmission(
tool_name="test", tool_version="1.0.0", submitter="alice",
step_index=0, step_type="prompt", original="a", proposed="b",
status="tested",
)
try:
review_submission(sub, "maybe", "admin")
assert False, "Should have raised"
except ValueError:
pass