177 lines
3.8 KiB
Go
177 lines
3.8 KiB
Go
package store
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestInMemoryStore_SaveChat(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
chat := &Chat{
|
|
Title: "Test Chat",
|
|
}
|
|
|
|
err := store.SaveChat(chat)
|
|
require.NoError(t, err)
|
|
assert.NotEqual(t, uuid.Nil, chat.ID)
|
|
assert.False(t, chat.CreatedAt.IsZero())
|
|
}
|
|
|
|
func TestInMemoryStore_GetChat(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
// Create and save a chat
|
|
chat := &Chat{
|
|
Title: "Test Chat",
|
|
}
|
|
err := store.SaveChat(chat)
|
|
require.NoError(t, err)
|
|
|
|
// Retrieve the chat
|
|
retrievedChat, err := store.GetChat(chat.ID)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, chat.ID, retrievedChat.ID)
|
|
assert.Equal(t, chat.Title, retrievedChat.Title)
|
|
}
|
|
|
|
func TestInMemoryStore_GetChat_NotFound(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
_, err := store.GetChat(uuid.New())
|
|
assert.ErrorIs(t, err, ErrChatNotFound)
|
|
}
|
|
|
|
func TestInMemoryStore_DeleteChat(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
// Create and save a chat
|
|
chat := &Chat{
|
|
Title: "Test Chat",
|
|
}
|
|
err := store.SaveChat(chat)
|
|
require.NoError(t, err)
|
|
|
|
// Delete the chat
|
|
err = store.DeleteChat(chat.ID)
|
|
require.NoError(t, err)
|
|
|
|
// Try to retrieve the deleted chat
|
|
_, err = store.GetChat(chat.ID)
|
|
assert.ErrorIs(t, err, ErrChatNotFound)
|
|
}
|
|
|
|
func TestInMemoryStore_DeleteChat_NotFound(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
err := store.DeleteChat(uuid.New())
|
|
assert.ErrorIs(t, err, ErrChatNotFound)
|
|
}
|
|
|
|
func TestInMemoryStore_ListChats(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
// Create and save multiple chats
|
|
chat1 := &Chat{Title: "Chat 1"}
|
|
chat2 := &Chat{Title: "Chat 2"}
|
|
|
|
err := store.SaveChat(chat1)
|
|
require.NoError(t, err)
|
|
|
|
err = store.SaveChat(chat2)
|
|
require.NoError(t, err)
|
|
|
|
// List all chats
|
|
chats, err := store.ListChats()
|
|
require.NoError(t, err)
|
|
assert.Len(t, chats, 2)
|
|
}
|
|
|
|
func TestInMemoryStore_SaveChatMessage(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
// Create and save a chat
|
|
chat := &Chat{Title: "Test Chat"}
|
|
err := store.SaveChat(chat)
|
|
require.NoError(t, err)
|
|
|
|
// Create and save a message
|
|
message := &Message{
|
|
ChatID: chat.ID,
|
|
Role: "user",
|
|
Content: "Hello",
|
|
}
|
|
|
|
err = store.SaveChatMessage(message)
|
|
require.NoError(t, err)
|
|
assert.NotEqual(t, uuid.Nil, message.ID)
|
|
assert.False(t, message.CreatedAt.IsZero())
|
|
}
|
|
|
|
func TestInMemoryStore_SaveChatMessage_InvalidChatID(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
message := &Message{
|
|
ChatID: uuid.Nil,
|
|
Role: "user",
|
|
Content: "Hello",
|
|
}
|
|
|
|
err := store.SaveChatMessage(message)
|
|
assert.ErrorIs(t, err, ErrNilChatID)
|
|
}
|
|
|
|
func TestInMemoryStore_SaveChatMessage_ChatNotFound(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
message := &Message{
|
|
ChatID: uuid.New(),
|
|
Role: "user",
|
|
Content: "Hello",
|
|
}
|
|
|
|
err := store.SaveChatMessage(message)
|
|
assert.ErrorIs(t, err, ErrChatNotFound)
|
|
}
|
|
|
|
func TestInMemoryStore_SaveSettings(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
settings := &Settings{
|
|
APIEndpoint: "http://example.com",
|
|
ImageEditSelector: ".image-edit",
|
|
ImageGenerationSelector: ".image-gen",
|
|
TextGenerationSelector: ".text-gen",
|
|
}
|
|
|
|
err := store.SaveSettings(settings)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestInMemoryStore_GetSettings(t *testing.T) {
|
|
store := NewInMemoryStore()
|
|
|
|
// Get settings when none exist
|
|
settings, err := store.GetSettings()
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, settings)
|
|
|
|
// Set some settings
|
|
settings = &Settings{
|
|
APIEndpoint: "http://example.com",
|
|
ImageEditSelector: ".image-edit",
|
|
ImageGenerationSelector: ".image-gen",
|
|
TextGenerationSelector: ".text-gen",
|
|
}
|
|
err = store.SaveSettings(settings)
|
|
require.NoError(t, err)
|
|
|
|
// Get the settings
|
|
settings, err = store.GetSettings()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "http://example.com", settings.APIEndpoint)
|
|
}
|