229 lines
5.8 KiB
Go
229 lines
5.8 KiB
Go
package fake
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/chenhg5/cc-connect/core"
|
|
)
|
|
|
|
// TestMessage creates a basic test message with sensible defaults.
|
|
func TestMessage() *core.Message {
|
|
return &core.Message{
|
|
SessionKey: "test:channel:user",
|
|
Platform: "test",
|
|
MessageID: "msg-test-001",
|
|
UserID: "user-test",
|
|
UserName: "Test User",
|
|
ChatName: "Test Channel",
|
|
Content: "Hello, world",
|
|
ReplyCtx: nil,
|
|
}
|
|
}
|
|
|
|
// TestMessageWithContent creates a message with specific content.
|
|
func TestMessageWithContent(content string) *core.Message {
|
|
msg := TestMessage()
|
|
msg.Content = content
|
|
return msg
|
|
}
|
|
|
|
// TestMessageWithSession creates a message with a specific session key.
|
|
func TestMessageWithSession(sessionKey string) *core.Message {
|
|
msg := TestMessage()
|
|
msg.SessionKey = sessionKey
|
|
return msg
|
|
}
|
|
|
|
// TestMessageWithImages creates a message with images.
|
|
func TestMessageWithImages(images []core.ImageAttachment) *core.Message {
|
|
msg := TestMessage()
|
|
msg.Images = images
|
|
return msg
|
|
}
|
|
|
|
// TestMessageWithFiles creates a message with files.
|
|
func TestMessageWithFiles(files []core.FileAttachment) *core.Message {
|
|
msg := TestMessage()
|
|
msg.Files = files
|
|
return msg
|
|
}
|
|
|
|
// TestMessageWithAudio creates a message with audio.
|
|
func TestMessageWithAudio(audio *core.AudioAttachment) *core.Message {
|
|
msg := TestMessage()
|
|
msg.Audio = audio
|
|
return msg
|
|
}
|
|
|
|
// TestMessageFromVoice creates a message that originated from voice.
|
|
func TestMessageFromVoice(content string) *core.Message {
|
|
msg := TestMessageWithContent(content)
|
|
msg.FromVoice = true
|
|
return msg
|
|
}
|
|
|
|
// TestLongMessage creates a message with a very long content for truncation testing.
|
|
func TestLongMessage(length int) *core.Message {
|
|
return &core.Message{
|
|
SessionKey: "test:channel:user",
|
|
Platform: "test",
|
|
MessageID: "msg-test-long",
|
|
UserID: "user-test",
|
|
Content: strings.Repeat("x", length),
|
|
}
|
|
}
|
|
|
|
// TestSpecialCharsMessage creates a message with special characters for security testing.
|
|
func TestSpecialCharsMessage() *core.Message {
|
|
return &core.Message{
|
|
SessionKey: "test:channel:user",
|
|
Platform: "test",
|
|
MessageID: "msg-test-special",
|
|
UserID: "user-test",
|
|
Content: "Hello! 🎉 <script>alert('xss')</script> & \"quotes\"",
|
|
}
|
|
}
|
|
|
|
// TestImageAttachment creates a test image attachment.
|
|
func TestImageAttachment(mimeType, filename string, data []byte) core.ImageAttachment {
|
|
return core.ImageAttachment{
|
|
MimeType: mimeType,
|
|
Data: data,
|
|
FileName: filename,
|
|
}
|
|
}
|
|
|
|
// TestFileAttachment creates a test file attachment.
|
|
func TestFileAttachment(mimeType, filename string, data []byte) core.FileAttachment {
|
|
return core.FileAttachment{
|
|
MimeType: mimeType,
|
|
Data: data,
|
|
FileName: filename,
|
|
}
|
|
}
|
|
|
|
// TestAudioAttachment creates a test audio attachment.
|
|
func TestAudioAttachment(mimeType, format string, data []byte, duration int) *core.AudioAttachment {
|
|
return &core.AudioAttachment{
|
|
MimeType: mimeType,
|
|
Data: data,
|
|
Format: format,
|
|
Duration: duration,
|
|
}
|
|
}
|
|
|
|
// TestEvent creates a test event.
|
|
func TestEvent(eventType core.EventType, content string) core.Event {
|
|
return core.Event{
|
|
Type: eventType,
|
|
Content: content,
|
|
Done: eventType == core.EventResult || eventType == core.EventError,
|
|
}
|
|
}
|
|
|
|
// TestTextEvent creates a text event.
|
|
func TestTextEvent(content string) core.Event {
|
|
return TestEvent(core.EventText, content)
|
|
}
|
|
|
|
// TestResultEvent creates a result event.
|
|
func TestResultEvent(content string) core.Event {
|
|
return TestEvent(core.EventResult, content)
|
|
}
|
|
|
|
// TestErrorEvent creates an error event.
|
|
func TestErrorEvent(err error) core.Event {
|
|
return core.Event{
|
|
Type: core.EventError,
|
|
Done: true,
|
|
Error: err,
|
|
}
|
|
}
|
|
|
|
// TestPermissionRequestEvent creates a permission request event.
|
|
func TestPermissionRequestEvent(requestID, toolName, toolInput string) core.Event {
|
|
return core.Event{
|
|
Type: core.EventPermissionRequest,
|
|
ToolName: toolName,
|
|
ToolInput: toolInput,
|
|
RequestID: requestID,
|
|
}
|
|
}
|
|
|
|
// TestToolUseEvent creates a tool use event.
|
|
func TestToolUseEvent(toolName, toolInput string) core.Event {
|
|
return core.Event{
|
|
Type: core.EventToolUse,
|
|
ToolName: toolName,
|
|
ToolInput: toolInput,
|
|
}
|
|
}
|
|
|
|
// TestThinkingEvent creates a thinking event.
|
|
func TestThinkingEvent(content string) core.Event {
|
|
return TestEvent(core.EventThinking, content)
|
|
}
|
|
|
|
// TestHistoryEntry creates a test history entry.
|
|
func TestHistoryEntry(role, content string) core.HistoryEntry {
|
|
return core.HistoryEntry{
|
|
Role: role,
|
|
Content: content,
|
|
Timestamp: time.Now(),
|
|
}
|
|
}
|
|
|
|
// TestAgentSessionInfo creates a test agent session info.
|
|
func TestAgentSessionInfo(id, summary string, messageCount int) core.AgentSessionInfo {
|
|
return core.AgentSessionInfo{
|
|
ID: id,
|
|
Summary: summary,
|
|
MessageCount: messageCount,
|
|
ModifiedAt: time.Now(),
|
|
}
|
|
}
|
|
|
|
// TestPermissionResult creates a test permission result.
|
|
func TestPermissionResultAllow() core.PermissionResult {
|
|
return core.PermissionResult{
|
|
Behavior: "allow",
|
|
}
|
|
}
|
|
|
|
func TestPermissionResultDeny(message string) core.PermissionResult {
|
|
return core.PermissionResult{
|
|
Behavior: "deny",
|
|
Message: message,
|
|
}
|
|
}
|
|
|
|
// TestProviderConfig creates a test provider config.
|
|
func TestProviderConfig(name, apiKey, baseURL, model string) core.ProviderConfig {
|
|
return core.ProviderConfig{
|
|
Name: name,
|
|
APIKey: apiKey,
|
|
BaseURL: baseURL,
|
|
Model: model,
|
|
}
|
|
}
|
|
|
|
// TestModelOption creates a test model option.
|
|
func TestModelOption(name, desc, alias string) core.ModelOption {
|
|
return core.ModelOption{
|
|
Name: name,
|
|
Desc: desc,
|
|
Alias: alias,
|
|
}
|
|
}
|
|
|
|
// BatchTestMessages creates multiple test messages for batch testing.
|
|
func BatchTestMessages(count int) []*core.Message {
|
|
messages := make([]*core.Message, count)
|
|
for i := 0; i < count; i++ {
|
|
messages[i] = TestMessageWithContent(fmt.Sprintf("Test message %d", i))
|
|
}
|
|
return messages
|
|
}
|