benzcloud-plugin-chat/internal/chat/chat_test.go

84 lines
1.8 KiB
Go

package chat
import (
"os"
"testing"
"time"
)
func TestChatStore(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "chat_test_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
store, err := NewStore(tmpDir)
if err != nil {
t.Fatalf("failed to create store: %v", err)
}
// Verify default channels
channels := store.GetChannels()
if len(channels) < 3 {
t.Fatalf("expected at least 3 channels, got %d", len(channels))
}
// Create custom channel
ch, err := store.CreateChannel("marketing", "Marketing strategies", "alice")
if err != nil {
t.Fatalf("failed to create channel: %v", err)
}
if ch.Name != "marketing" {
t.Fatalf("expected channel name 'marketing', got %s", ch.Name)
}
// Save message
msg := &Message{
Channel: "marketing",
Sender: "alice",
Content: "Launch campaign is ready!",
Type: TypeMessage,
Timestamp: time.Now().UTC(),
}
if err := store.SaveMessage(msg); err != nil {
t.Fatalf("failed to save message: %v", err)
}
// Retrieve messages
msgs := store.GetMessages("marketing", 10)
if len(msgs) != 1 {
t.Fatalf("expected 1 message, got %d", len(msgs))
}
if msgs[0].Content != "Launch campaign is ready!" {
t.Fatalf("unexpected content: %s", msgs[0].Content)
}
// Test persistence reload
store2, err := NewStore(tmpDir)
if err != nil {
t.Fatalf("failed to reload store: %v", err)
}
msgs2 := store2.GetMessages("marketing", 10)
if len(msgs2) != 1 {
t.Fatalf("expected 1 reloaded message, got %d", len(msgs2))
}
}
func TestHubOnlineUsers(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "hub_test_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
store, _ := NewStore(tmpDir)
hub := NewHub(store)
go hub.Run()
users := hub.GetOnlineUsers()
if len(users) != 0 {
t.Fatalf("expected 0 online users, got %d", len(users))
}
}