@@ -164,6 +164,8 @@ def test_populate_reserve_jobs_with_keep_completed(clean_jobs, subject, experime
164164 """Test populate(reserve_jobs=True) with keep_completed=True.
165165
166166 Regression test for https://github.com/datajoint/datajoint-python/issues/1379
167+ The bug was that the `-` operator in jobs.refresh() didn't pass semantic_check=False,
168+ causing a DataJointError about different lineages when keep_completed=True.
167169 """
168170 # Clear experiment data to ensure there's work to do
169171 experiment .delete ()
@@ -180,29 +182,28 @@ def test_populate_reserve_jobs_with_keep_completed(clean_jobs, subject, experime
180182 assert len (experiment .jobs .completed ) > 0 , "Completed jobs not retained"
181183
182184
183- def test_populate_reserve_jobs_keep_completed_repend (clean_jobs , subject , experiment ):
184- """Test that completed jobs are re-pended when results are deleted .
185+ def test_jobs_refresh_with_keep_completed (clean_jobs , subject , experiment ):
186+ """Test that jobs.refresh() works with keep_completed=True .
185187
186188 Regression test for https://github.com/datajoint/datajoint-python/issues/1379
187189 """
188- # Clear experiment data to ensure there's work to do
190+ # Clear experiment data and jobs
189191 experiment .delete ()
192+ experiment .jobs .delete ()
190193
191194 with dj .config .override (jobs = {"keep_completed" : True , "add_job_metadata" : True }):
192- # First populate
193- experiment .populate (reserve_jobs = True )
194- initial_count = len (experiment )
195- completed_count = len (experiment .jobs .completed )
196-
197- assert initial_count > 0 , "No data was populated"
198- assert completed_count > 0 , "No completed jobs"
195+ # Refresh should create pending jobs without semantic matching error
196+ experiment .jobs .refresh ()
197+ pending_before = len (experiment .jobs .pending )
198+ assert pending_before > 0 , "No pending jobs created"
199199
200- # Delete some results
201- first_key = experiment .keys (limit = 1 )[0 ]
202- (experiment & first_key ).delete ()
200+ # Manually reserve and complete a job
201+ key = experiment .jobs .pending .keys (limit = 1 )[0 ]
202+ experiment .jobs .reserve (key )
203+ experiment .jobs .complete (key )
203204
204- # Refresh should re-pend the deleted job
205- experiment .jobs .refresh ()
205+ # Job should now be completed
206+ assert len ( experiment .jobs .completed ) == 1 , "Job not marked as completed"
206207
207- # The job for the deleted entry should be pending again
208- assert len ( experiment .jobs .pending ) >= 1 , "Deleted job not re-pended"
208+ # Calling refresh again should not raise semantic matching error
209+ experiment .jobs .refresh () # This was failing before the fix
0 commit comments