Files
aethera/backend/internal/store/storage_test.go

253 lines
5.8 KiB
Go

package store
import (
"os"
"path/filepath"
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFileStore_NewFileStore(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
assert.NotNil(t, store)
assert.Equal(t, filePath, store.filePath)
assert.Equal(t, filepath.Join(tempDir, "chats"), store.chatDir)
}
func TestFileStore_SaveChat(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
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())
// Verify the file was created
chatFile := filepath.Join(store.chatDir, chat.ID.String()+".json")
_, err = os.Stat(chatFile)
assert.NoError(t, err)
}
func TestFileStore_GetChat(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
// 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 TestFileStore_GetChat_NotFound(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
_, err = store.GetChat(uuid.New())
assert.ErrorIs(t, err, ErrChatNotFound)
}
func TestFileStore_DeleteChat(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
// Create and save a chat
chat := &Chat{
Title: "Test Chat",
}
err = store.SaveChat(chat)
require.NoError(t, err)
// Verify the file was created
chatFile := filepath.Join(store.chatDir, chat.ID.String()+".json")
_, err = os.Stat(chatFile)
assert.NoError(t, err)
// Delete the chat
err = store.DeleteChat(chat.ID)
require.NoError(t, err)
// Verify the file was deleted
_, err = os.Stat(chatFile)
assert.True(t, os.IsNotExist(err))
}
func TestFileStore_DeleteChat_NotFound(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
err = store.DeleteChat(uuid.New())
assert.ErrorIs(t, err, ErrChatNotFound)
}
func TestFileStore_ListChats(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
// 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 TestFileStore_SaveChatMessage(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
// 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())
// Verify the chat file was updated
chatFile := filepath.Join(store.chatDir, chat.ID.String()+".json")
_, err = os.Stat(chatFile)
assert.NoError(t, err)
}
func TestFileStore_SaveChatMessage_InvalidChatID(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
message := &Message{
ChatID: uuid.Nil,
Role: "user",
Content: "Hello",
}
err = store.SaveChatMessage(message)
assert.ErrorIs(t, err, ErrNilChatID)
}
func TestFileStore_SaveChatMessage_ChatNotFound(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
message := &Message{
ChatID: uuid.New(),
Role: "user",
Content: "Hello",
}
err = store.SaveChatMessage(message)
assert.ErrorIs(t, err, ErrChatNotFound)
}
func TestFileStore_SaveSettings(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
settings := &Settings{
APIEndpoint: "http://example.com",
ImageEditSelector: ".image-edit",
ImageGenerationSelector: ".image-gen",
TextGenerationSelector: ".text-gen",
}
err = store.SaveSettings(settings)
require.NoError(t, err)
// Verify the settings file was created
_, err = os.Stat(filePath)
assert.NoError(t, err)
}
func TestFileStore_GetSettings(t *testing.T) {
tempDir := t.TempDir()
filePath := filepath.Join(tempDir, "test.json")
store, err := NewFileStore(filePath)
require.NoError(t, err)
// 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)
}