@@ -72,3 +72,92 @@ def test_post_tool_marks_stress_passed(tmp_path):
7272
7373 assert exit_code == 0
7474 assert state ["stress_passed" ] is True
75+
76+
77+ def test_pre_tool_denies_pack_before_tests_verified (tmp_path , capsys ):
78+ module = load_module ()
79+ problem_dir = tmp_path / "problem"
80+ (problem_dir / "files" ).mkdir (parents = True )
81+ (problem_dir / "solutions" ).mkdir (parents = True )
82+ state = {
83+ "problem_dir" : str (problem_dir ),
84+ "created" : True ,
85+ "sol_built" : True ,
86+ "brute_built" : True ,
87+ "validator_ready" : True ,
88+ "validator_accuracy" : 1.0 ,
89+ "generator_built" : True ,
90+ "stress_passed" : True ,
91+ "checker_ready" : False ,
92+ "validation_passed" : True ,
93+ "tests_generated" : True ,
94+ "generated_test_count" : 3 ,
95+ "tests_verified" : False ,
96+ "packaged" : False ,
97+ }
98+ module .save_state (str (problem_dir ), state )
99+
100+ payload = {
101+ "tool_name" : "mcp__autocode__problem_pack_polygon" ,
102+ "tool_input" : {"problem_dir" : str (problem_dir )},
103+ }
104+
105+ exit_code = module .pre_tool (payload )
106+ captured = capsys .readouterr ().out
107+
108+ assert exit_code == 0
109+ parsed = json .loads (captured )
110+ assert parsed ["hookSpecificOutput" ]["permissionDecision" ] == "deny"
111+ assert "problem_verify_tests" in parsed ["hookSpecificOutput" ]["permissionDecisionReason" ]
112+
113+
114+ def test_post_tool_marks_tests_verified (tmp_path ):
115+ module = load_module ()
116+ problem_dir = tmp_path / "problem"
117+ (problem_dir / "files" ).mkdir (parents = True )
118+ (problem_dir / "solutions" ).mkdir (parents = True )
119+
120+ payload = {
121+ "tool_name" : "mcp__autocode__problem_verify_tests" ,
122+ "tool_input" : {"problem_dir" : str (problem_dir )},
123+ "tool_response" : {
124+ "structuredContent" : {
125+ "success" : True ,
126+ "data" : {"passed" : True },
127+ }
128+ },
129+ }
130+
131+ exit_code = module .post_tool (payload )
132+ state = module .load_state (str (problem_dir ))
133+
134+ assert exit_code == 0
135+ assert state ["tests_verified" ] is True
136+
137+
138+ def test_post_tool_clears_tests_verified_after_regeneration (tmp_path ):
139+ module = load_module ()
140+ problem_dir = tmp_path / "problem"
141+ (problem_dir / "files" ).mkdir (parents = True )
142+ (problem_dir / "solutions" ).mkdir (parents = True )
143+ state = module .infer_state (str (problem_dir ))
144+ state ["tests_verified" ] = True
145+ module .save_state (str (problem_dir ), state )
146+
147+ payload = {
148+ "tool_name" : "mcp__autocode__problem_generate_tests" ,
149+ "tool_input" : {"problem_dir" : str (problem_dir )},
150+ "tool_response" : {
151+ "structuredContent" : {
152+ "success" : True ,
153+ "data" : {"generated_tests" : [1 , 2 ]},
154+ }
155+ },
156+ }
157+
158+ exit_code = module .post_tool (payload )
159+ state = module .load_state (str (problem_dir ))
160+
161+ assert exit_code == 0
162+ assert state ["tests_generated" ] is True
163+ assert state ["tests_verified" ] is False
0 commit comments