84 lines
1.8 KiB
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))
|
|
}
|
|
}
|