"""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