@@ -158,3 +158,52 @@ def test_long_error_stack(clean_jobs, subject, experiment):
158158 experiment .jobs .error (key , "error message" , long_error_stack )
159159 error_stack = experiment .jobs .errors .fetch1 ("error_stack" )
160160 assert error_stack == long_error_stack , "error stacks do not agree"
161+
162+
163+ def test_populate_reserve_jobs_with_keep_completed (clean_jobs , subject , experiment ):
164+ """Test populate(reserve_jobs=True) with keep_completed=True.
165+
166+ 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.
169+ """
170+ # Clear experiment data to ensure there's work to do
171+ experiment .delete ()
172+
173+ with dj .config .override (jobs = {"keep_completed" : True , "add_job_metadata" : True }):
174+ # Should not raise DataJointError about semantic matching
175+ experiment .populate (reserve_jobs = True )
176+
177+ # Verify jobs completed successfully
178+ assert len (experiment ) > 0 , "No data was populated"
179+ assert len (experiment .jobs .errors ) == 0 , "Unexpected errors during populate"
180+
181+ # With keep_completed=True, completed jobs should be retained
182+ assert len (experiment .jobs .completed ) > 0 , "Completed jobs not retained"
183+
184+
185+ def test_jobs_refresh_with_keep_completed (clean_jobs , subject , experiment ):
186+ """Test that jobs.refresh() works with keep_completed=True.
187+
188+ Regression test for https://github.com/datajoint/datajoint-python/issues/1379
189+ """
190+ # Clear experiment data and jobs
191+ experiment .delete ()
192+ experiment .jobs .delete ()
193+
194+ with dj .config .override (jobs = {"keep_completed" : True , "add_job_metadata" : True }):
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"
199+
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 )
204+
205+ # Job should now be completed
206+ assert len (experiment .jobs .completed ) == 1 , "Job not marked as completed"
207+
208+ # Calling refresh again should not raise semantic matching error
209+ experiment .jobs .refresh () # This was failing before the fix
0 commit comments