summaryrefslogtreecommitdiff
path: root/servers/taskwarrior/tests
diff options
context:
space:
mode:
Diffstat (limited to 'servers/taskwarrior/tests')
-rw-r--r--servers/taskwarrior/tests/test_server.py94
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):