yao/agent/robot/executor/standard/suspend_test.go
Max 67ab9350e8 Refactor testing structure and update Makefile for clarity
- Rename test folders and commands in the Makefile for consistency, changing references from AI to Agent tests.
- Update GitHub Actions workflows to reflect the new naming conventions for agent and robot tests, ensuring clarity in CI processes.
- Modify test cases to improve readability and maintainability, including renaming test functions for better understanding of their purpose.
- Enhance comments in the Makefile and workflows to provide clearer context on the testing processes and requirements.
2026-02-25 19:05:53 +08:00

94 lines
2.7 KiB
Go

package standard
import (
"testing"
"github.com/stretchr/testify/assert"
)
// ============================================================================
// detectNeedMoreInfo unit tests (internal — tests unexported function)
// ============================================================================
func TestDetectNeedMoreInfo(t *testing.T) {
t.Run("returns false for nil result", func(t *testing.T) {
needInput, question := detectNeedMoreInfo(nil)
assert.False(t, needInput)
assert.Empty(t, question)
})
t.Run("returns false for nil Next", func(t *testing.T) {
result := &CallResult{Content: "some text"}
needInput, question := detectNeedMoreInfo(result)
assert.False(t, needInput)
assert.Empty(t, question)
})
t.Run("returns false for non-map Next", func(t *testing.T) {
result := &CallResult{Next: "just a string"}
needInput, question := detectNeedMoreInfo(result)
assert.False(t, needInput)
assert.Empty(t, question)
})
t.Run("returns false when status is not need_input", func(t *testing.T) {
result := &CallResult{
Next: map[string]interface{}{
"status": "ok",
"content": "everything is fine",
},
}
needInput, question := detectNeedMoreInfo(result)
assert.False(t, needInput)
assert.Empty(t, question)
})
t.Run("returns true with question from Next", func(t *testing.T) {
result := &CallResult{
Next: map[string]interface{}{
"status": "need_input",
"question": "What time range should I use?",
},
}
needInput, question := detectNeedMoreInfo(result)
assert.True(t, needInput)
assert.Equal(t, "What time range should I use?", question)
})
t.Run("falls back to GetText when question is empty", func(t *testing.T) {
result := &CallResult{
Content: "I need more information about the time range.",
Next: map[string]interface{}{
"status": "need_input",
},
}
needInput, question := detectNeedMoreInfo(result)
assert.True(t, needInput)
assert.Equal(t, "I need more information about the time range.", question)
})
t.Run("returns true with empty question when both are empty", func(t *testing.T) {
result := &CallResult{
Next: map[string]interface{}{
"status": "need_input",
},
}
needInput, question := detectNeedMoreInfo(result)
assert.True(t, needInput)
assert.Empty(t, question)
})
t.Run("unwraps data envelope from Next hook", func(t *testing.T) {
result := &CallResult{
Next: map[string]interface{}{
"data": map[string]interface{}{
"status": "need_input",
"question": "Which database should I query?",
},
},
}
needInput, question := detectNeedMoreInfo(result)
assert.True(t, needInput)
assert.Equal(t, "Which database should I query?", question)
})
}