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) }