@@ -93,34 +93,6 @@ func TestTodoTool_CreateTodos(t *testing.T) {
9393 require .Len (t , metaTodos , 4 )
9494}
9595
96- func TestTodoTool_UpdateTodo (t * testing.T ) {
97- tool := NewTodoTool ()
98-
99- _ , err := tool .handler .createTodo (t .Context (), CreateTodoArgs {
100- Description : "Test todo item" ,
101- })
102- require .NoError (t , err )
103-
104- result , err := tool .handler .updateTodo (t .Context (), UpdateTodoArgs {
105- ID : "todo_1" ,
106- Status : "completed" ,
107- })
108- require .NoError (t , err )
109- assert .Contains (t , result .Output , "Updated todo [todo_1] to status: [completed]" )
110-
111- todos := tool .handler .todos .All ()
112- require .Len (t , todos , 1 )
113- assert .Equal (t , "completed" , todos [0 ].Status )
114-
115- // Verify Meta contains all todos with updated status
116- metaTodos , ok := result .Meta .([]Todo )
117- require .True (t , ok , "Meta should be []Todo" )
118- require .Len (t , metaTodos , 1 )
119- assert .Equal (t , "todo_1" , metaTodos [0 ].ID )
120- assert .Equal (t , "Test todo item" , metaTodos [0 ].Description )
121- assert .Equal (t , "completed" , metaTodos [0 ].Status )
122- }
123-
12496func TestTodoTool_ListTodos (t * testing.T ) {
12597 tool := NewTodoTool ()
12698
@@ -153,15 +125,85 @@ func TestTodoTool_ListTodos(t *testing.T) {
153125 require .Len (t , metaTodos , 3 )
154126}
155127
156- func TestTodoTool_UpdateNonexistentTodo (t * testing.T ) {
128+ func TestTodoTool_UpdateTodos (t * testing.T ) {
129+ tool := NewTodoTool ()
130+
131+ // Create multiple todos first
132+ _ , err := tool .handler .createTodos (t .Context (), CreateTodosArgs {
133+ Descriptions : []string {
134+ "First todo item" ,
135+ "Second todo item" ,
136+ "Third todo item" ,
137+ },
138+ })
139+ require .NoError (t , err )
140+
141+ // Update multiple todos in one call
142+ result , err := tool .handler .updateTodos (t .Context (), UpdateTodosArgs {
143+ Updates : []TodoUpdate {
144+ {ID : "todo_1" , Status : "completed" },
145+ {ID : "todo_3" , Status : "in-progress" },
146+ },
147+ })
148+ require .NoError (t , err )
149+ assert .False (t , result .IsError )
150+ assert .Contains (t , result .Output , "Updated 2 todos" )
151+ assert .Contains (t , result .Output , "todo_1 -> completed" )
152+ assert .Contains (t , result .Output , "todo_3 -> in-progress" )
153+
154+ // Verify the todos were updated
155+ todos := tool .handler .todos .All ()
156+ require .Len (t , todos , 3 )
157+ assert .Equal (t , "completed" , todos [0 ].Status )
158+ assert .Equal (t , "pending" , todos [1 ].Status )
159+ assert .Equal (t , "in-progress" , todos [2 ].Status )
160+
161+ // Verify Meta contains all todos with updated status
162+ metaTodos , ok := result .Meta .([]Todo )
163+ require .True (t , ok , "Meta should be []Todo" )
164+ require .Len (t , metaTodos , 3 )
165+ }
166+
167+ func TestTodoTool_UpdateTodos_PartialFailure (t * testing.T ) {
157168 tool := NewTodoTool ()
158169
159- res , err := tool .handler .updateTodo (t .Context (), UpdateTodoArgs {
160- ID : "nonexistent_todo" ,
161- Status : "completed" ,
170+ // Create a single todo
171+ _ , err := tool .handler .createTodo (t .Context (), CreateTodoArgs {
172+ Description : "Test todo item" ,
173+ })
174+ require .NoError (t , err )
175+
176+ // Try to update one existing and one non-existing todo
177+ result , err := tool .handler .updateTodos (t .Context (), UpdateTodosArgs {
178+ Updates : []TodoUpdate {
179+ {ID : "todo_1" , Status : "completed" },
180+ {ID : "nonexistent" , Status : "completed" },
181+ },
182+ })
183+ require .NoError (t , err )
184+ assert .False (t , result .IsError ) // Not an error because at least one succeeded
185+ assert .Contains (t , result .Output , "Updated 1 todos" )
186+ assert .Contains (t , result .Output , "Not found: nonexistent" )
187+
188+ // Verify the existing todo was updated
189+ todos := tool .handler .todos .All ()
190+ require .Len (t , todos , 1 )
191+ assert .Equal (t , "completed" , todos [0 ].Status )
192+ }
193+
194+ func TestTodoTool_UpdateTodos_AllNotFound (t * testing.T ) {
195+ tool := NewTodoTool ()
196+
197+ // Try to update non-existing todos
198+ result , err := tool .handler .updateTodos (t .Context (), UpdateTodosArgs {
199+ Updates : []TodoUpdate {
200+ {ID : "nonexistent1" , Status : "completed" },
201+ {ID : "nonexistent2" , Status : "completed" },
202+ },
162203 })
163204 require .NoError (t , err )
164- require .True (t , res .IsError )
205+ assert .True (t , result .IsError ) // Error because all failed
206+ assert .Contains (t , result .Output , "Not found: nonexistent1, nonexistent2" )
165207}
166208
167209func TestTodoTool_OutputSchema (t * testing.T ) {
0 commit comments