@@ -206,11 +206,12 @@ async def test_assign_pending_tasks_without_api_key(
206206 current_user = mock_user
207207 )
208208
209- # Should still return success (pending tasks exist)
210- assert response .success is True
209+ # Should return failure when API key missing
210+ assert response .success is False
211211 assert response .pending_count == 1
212+ assert "api key" in response .message .lower () or "not configured" in response .message .lower ()
212213
213- # But background task should NOT be scheduled
214+ # Background task should NOT be scheduled
214215 mock_background_tasks .add_task .assert_not_called ()
215216
216217 # Should log warning
@@ -281,7 +282,7 @@ async def test_assign_pending_tasks_allowed_when_no_execution_in_progress(
281282 """Test that assignment proceeds when no tasks are in progress."""
282283 from codeframe .ui .routers .tasks import assign_pending_tasks
283284
284- # Setup: Only pending and completed tasks, no in_progress
285+ # Setup: Only pending and completed tasks, no in_progress or assigned
285286 mock_db .get_project_tasks .return_value = [
286287 Task (id = 1 , project_id = 1 , title = "Task 1" , status = TaskStatus .PENDING , assigned_to = None ),
287288 Task (id = 2 , project_id = 1 , title = "Task 2" , status = TaskStatus .PENDING , assigned_to = None ),
@@ -303,6 +304,35 @@ async def test_assign_pending_tasks_allowed_when_no_execution_in_progress(
303304 assert "started" in response .message .lower ()
304305 mock_background_tasks .add_task .assert_called_once ()
305306
307+ @pytest .mark .asyncio
308+ async def test_assign_pending_tasks_blocked_when_tasks_assigned (
309+ self , mock_db , mock_user , mock_manager , mock_background_tasks
310+ ):
311+ """Test that assignment is blocked when tasks are in ASSIGNED status."""
312+ from codeframe .ui .routers .tasks import assign_pending_tasks
313+
314+ # Setup: 2 pending tasks + 1 assigned (not yet in_progress)
315+ mock_db .get_project_tasks .return_value = [
316+ Task (id = 1 , project_id = 1 , title = "Task 1" , status = TaskStatus .PENDING , assigned_to = None ),
317+ Task (id = 2 , project_id = 1 , title = "Task 2" , status = TaskStatus .PENDING , assigned_to = None ),
318+ Task (id = 3 , project_id = 1 , title = "Task 3" , status = TaskStatus .ASSIGNED , assigned_to = "agent-1" ),
319+ ]
320+
321+ with patch ("codeframe.ui.routers.tasks.manager" , mock_manager ), \
322+ patch .dict (os .environ , {"ANTHROPIC_API_KEY" : "test-key" }):
323+ response = await assign_pending_tasks (
324+ project_id = 1 ,
325+ background_tasks = mock_background_tasks ,
326+ db = mock_db ,
327+ current_user = mock_user
328+ )
329+
330+ # Should return success but NOT schedule execution
331+ assert response .success is True
332+ assert response .pending_count == 2
333+ assert "in progress" in response .message .lower () or "assigned" in response .message .lower ()
334+ mock_background_tasks .add_task .assert_not_called ()
335+
306336
307337class TestAssignPendingTasksResponseModel :
308338 """Tests for TaskAssignmentResponse model."""
0 commit comments