Files
agent/backend/internal/initdb/expert_test.go

80 lines
2.7 KiB
Go

package initdb
import (
"fmt"
"testing"
"github.com/glebarez/sqlite"
"github.com/stretchr/testify/require"
"gorm.io/gorm"
"senlinai-agent/backend/internal/models"
)
func TestNewInitializesUserAndExpertCatalog(t *testing.T) {
database := newExpertTestDatabase(t)
require.NoError(t, New(database))
requireExpertCatalogCounts(t, database)
var user models.SaUser
require.NoError(t, database.Where("email = ?", rootUsername).First(&user).Error)
require.Equal(t, rootRole, user.Role)
var expert models.SaAIExpertItem
require.NoError(t, database.Preload("ExpertCategory").Where("slug = ?", "academic-geographer").First(&expert).Error)
require.Equal(t, "academic", expert.ExpertCategory.Slug)
require.Equal(t, "学术研究", expert.ExpertCategory.Name)
require.Equal(t, "https://ao.aiolaola.com/experts", expert.Reference)
}
func TestInitExpertOnlyInsertsMissingRecords(t *testing.T) {
database := newExpertTestDatabase(t)
require.NoError(t, InitExpert(database))
var preserved models.SaAIExpertItem
require.NoError(t, database.Where("slug = ?", "academic-geographer").First(&preserved).Error)
require.NoError(t, database.Model(&preserved).Updates(map[string]any{
"name": "保留名称",
"category_id": 0,
"category_identity": "",
"reference": "",
}).Error)
require.NoError(t, database.Where("slug = ?", "academic-historian").Delete(&models.SaAIExpertItem{}).Error)
require.NoError(t, InitExpert(database))
requireExpertCatalogCounts(t, database)
require.NoError(t, database.Where("slug = ?", "academic-geographer").First(&preserved).Error)
require.Equal(t, "保留名称", preserved.Name)
require.NotZero(t, preserved.CategoryID)
require.NotEmpty(t, preserved.CategoryIdentity)
require.Equal(t, "https://ao.aiolaola.com/experts", preserved.Reference)
var restored models.SaAIExpertItem
require.NoError(t, database.Where("slug = ?", "academic-historian").First(&restored).Error)
}
func newExpertTestDatabase(t *testing.T) *gorm.DB {
t.Helper()
database, err := gorm.Open(sqlite.Open(fmt.Sprintf("file:%s?mode=memory&cache=shared", t.Name())), &gorm.Config{})
require.NoError(t, err)
require.NoError(t, database.AutoMigrate(
&models.SaUser{},
&models.SaDatasetSource{},
&models.SaDatasetItem{},
&models.SaAIExpertCategory{},
&models.SaAIExpertItem{},
))
return database
}
func requireExpertCatalogCounts(t *testing.T, database *gorm.DB) {
t.Helper()
var categoryCount int64
require.NoError(t, database.Model(&models.SaAIExpertCategory{}).Count(&categoryCount).Error)
require.Equal(t, int64(19), categoryCount)
var expertCount int64
require.NoError(t, database.Model(&models.SaAIExpertItem{}).Count(&expertCount).Error)
require.Equal(t, int64(267), expertCount)
}