diff options
Diffstat (limited to 'servers/taskwarrior/tests')
| -rw-r--r-- | servers/taskwarrior/tests/test_server.py | 94 |
1 files changed, 90 insertions, 4 deletions
diff --git a/servers/taskwarrior/tests/test_server.py b/servers/taskwarrior/tests/test_server.py index 601a535..5781c23 100644 --- a/servers/taskwarrior/tests/test_server.py +++ b/servers/taskwarrior/tests/test_server.py @@ -119,6 +119,69 @@ class TestTaskWarriorServer: assert "Priority must be H, M, or L" in str(exc_info.value) @pytest.mark.asyncio + async def test_add_tasks(self, taskwarrior_server): + """Test adding multiple tasks.""" + mock_output1 = "Created task 1.\n\nUUID: test-uuid-123" + mock_output2 = "Created task 2.\n\nUUID: test-uuid-456" + mock_tasks = [ + {"uuid": "test-uuid-123", "description": "Task 1", "status": "pending", "entry": "2024-01-01T00:00:00Z"}, + {"uuid": "test-uuid-456", "description": "Task 2", "status": "pending", "entry": "2024-01-01T00:00:01Z"}, + ] + + with patch.object( + taskwarrior_server, '_run_task_command', + new_callable=AsyncMock, + side_effect=[ + (mock_output1, '', 0), + (mock_output2, '', 0), + ] + ), patch.object( + taskwarrior_server, 'list_tasks', + new_callable=AsyncMock, + side_effect=[ + [mock_tasks[0]], + [mock_tasks[1]], + ] + ): + tasks_to_add = [ + {"description": "Task 1", "project": "Test"}, + {"description": "Task 2", "priority": "H"}, + ] + results = await taskwarrior_server.add_tasks(tasks_to_add) + assert len(results) == 2 + assert results[0]["description"] == "Task 1" + assert results[0]["uuid"] == "test-uuid-123" + assert results[1]["description"] == "Task 2" + assert results[1]["uuid"] == "test-uuid-456" + + @pytest.mark.asyncio + async def test_add_tasks_empty_list(self, taskwarrior_server): + """Test adding tasks with empty list returns empty results.""" + results = await taskwarrior_server.add_tasks([]) + assert results == [] + + @pytest.mark.asyncio + async def test_add_tasks_with_one_task(self, taskwarrior_server): + """Test adding a single task in list works.""" + mock_output = "Created task 1.\n\nUUID: test-uuid-123" + mock_tasks = [{"uuid": "test-uuid-123", "description": "Single task", "status": "pending", "entry": "2024-01-01T00:00:00Z"}] + + with patch.object( + taskwarrior_server, '_run_task_command', + new_callable=AsyncMock, + return_value=(mock_output, '', 0) + ), patch.object( + taskwarrior_server, 'list_tasks', + new_callable=AsyncMock, + return_value=mock_tasks + ): + tasks_to_add = [{"description": "Single task"}] + results = await taskwarrior_server.add_tasks(tasks_to_add) + assert len(results) == 1 + assert results[0]["description"] == "Single task" + assert results[0]["uuid"] == "test-uuid-123" + + @pytest.mark.asyncio async def test_done_task(self, taskwarrior_server): """Test marking a single task as done.""" mock_output = "Completed task test-uuid-123." @@ -156,8 +219,8 @@ class TestTaskWarriorServer: assert "At least one UUID is required" in str(exc_info.value) @pytest.mark.asyncio - async def test_delete_task(self, taskwarrior_server): - """Test deleting a task.""" + async def test_delete_task_single(self, taskwarrior_server): + """Test deleting a single task.""" mock_output = "Deleted task test-uuid-123." with patch.object( @@ -165,9 +228,32 @@ class TestTaskWarriorServer: new_callable=AsyncMock, return_value=(mock_output, '', 0) ): - result = await taskwarrior_server.delete_task("test-uuid-123") - assert result["uuid"] == "test-uuid-123" + result = await taskwarrior_server.delete_task(["test-uuid-123"]) + assert result["uuids"] == ["test-uuid-123"] + assert result["status"] == "deleted" + + @pytest.mark.asyncio + async def test_delete_task_multiple(self, taskwarrior_server): + """Test deleting multiple tasks.""" + mock_output = "Deleted task test-uuid-123.\nDeleted task test-uuid-456." + + with patch.object( + taskwarrior_server, '_run_task_command', + new_callable=AsyncMock, + return_value=(mock_output, '', 0) + ): + result = await taskwarrior_server.delete_task(["test-uuid-123", "test-uuid-456"]) + assert result["uuids"] == ["test-uuid-123", "test-uuid-456"] assert result["status"] == "deleted" + assert len(result["uuids"]) == 2 + + @pytest.mark.asyncio + async def test_delete_task_empty_list(self, taskwarrior_server): + """Test that deleting tasks with empty list raises ValueError.""" + with pytest.raises(ValueError) as exc_info: + await taskwarrior_server.delete_task([]) + + assert "At least one UUID is required" in str(exc_info.value) @pytest.mark.asyncio async def test_manage_context_set(self, taskwarrior_server): |
