Files
cc-connect/tests/mocks/fake/response.go
T
2026-06-02 23:14:41 +08:00

152 lines
3.6 KiB
Go

package fake
import (
"context"
"fmt"
"sync"
"time"
"github.com/chenhg5/cc-connect/core"
)
// TestUsageReport creates a test usage report.
func TestUsageReport(provider, accountID, email string) *core.UsageReport {
return &core.UsageReport{
Provider: provider,
AccountID: accountID,
UserID: "test-user",
Email: email,
Plan: "pro",
Buckets: []core.UsageBucket{
{
Name: "Standard Requests",
Allowed: true,
LimitReached: false,
Windows: []core.UsageWindow{
{UsedPercent: 45, WindowSeconds: 3600},
},
},
},
Credits: &core.UsageCredits{
HasCredits: true,
Unlimited: false,
Balance: "$12.50",
},
}
}
// TestPermissionModeInfo creates a test permission mode info.
func TestPermissionModeInfo(key, name, nameZh, desc, descZh string) core.PermissionModeInfo {
return core.PermissionModeInfo{
Key: key,
Name: name,
NameZh: nameZh,
Desc: desc,
DescZh: descZh,
}
}
// TestCard creates a test card using the CardBuilder.
func TestCard() *core.Card {
return core.NewCard().
Title("Test Card", "blue").
Markdown("**Test content**").
Build()
}
// TestCardWithTitle creates a card with a specific title.
func TestCardWithTitle(title string) *core.Card {
return core.NewCard().
Title(title, "blue").
Markdown("**Content**").
Build()
}
// TestCardWithButtons creates a card with buttons.
func TestCardWithButtons(buttons ...core.CardButton) *core.Card {
return core.NewCard().
Title("Test Card", "blue").
Markdown("Select an option:").
Buttons(buttons...).
Build()
}
// TestMessageHandler is a simple message handler for testing.
type TestMessageHandler struct {
mu sync.Mutex
Messages []*core.Message
}
func NewTestMessageHandler() *TestMessageHandler {
return &TestMessageHandler{
Messages: make([]*core.Message, 0),
}
}
func (h *TestMessageHandler) Handle(p core.Platform, msg *core.Message) {
h.mu.Lock()
defer h.mu.Unlock()
h.Messages = append(h.Messages, msg)
}
func (h *TestMessageHandler) GetMessages() []*core.Message {
h.mu.Lock()
defer h.mu.Unlock()
cp := make([]*core.Message, len(h.Messages))
copy(cp, h.Messages)
return cp
}
func (h *TestMessageHandler) Clear() {
h.mu.Lock()
defer h.mu.Unlock()
h.Messages = h.Messages[:0]
}
// TestDedupeItem creates a test deduplication item.
type TestDedupeItem struct {
key string
expiration time.Time
}
func NewTestDedupeItem(key string, ttl time.Duration) *TestDedupeItem {
return &TestDedupeItem{
key: key,
expiration: time.Now().Add(ttl),
}
}
// TestRateLimiterToken creates a test rate limiter token bucket state.
type TestRateLimiterToken struct{}
// TestCronJob creates a test cron job.
func TestCronJob(id, desc, prompt string, cronExpr string) *core.CronJob {
enabled := true
return &core.CronJob{
ID: id,
Description: desc,
Prompt: prompt,
CronExpr: cronExpr,
Enabled: enabled,
}
}
// TestAgentSessionInfoList creates a list of test agent session info.
func TestAgentSessionInfoList(count int) []core.AgentSessionInfo {
sessions := make([]core.AgentSessionInfo, count)
for i := 0; i < count; i++ {
sessions[i] = core.AgentSessionInfo{
ID: fmt.Sprintf("session-%d", i),
Summary: fmt.Sprintf("Test session %d", i),
MessageCount: (i + 1) * 10,
ModifiedAt: time.Now().Add(-time.Duration(i) * time.Hour),
}
}
return sessions
}
// TestContext returns a context with timeout for testing.
func TestContext(timeout time.Duration) (context.Context, context.CancelFunc) {
return context.WithTimeout(context.Background(), timeout)
}