chore: align forest AI development setup
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/glebarez/sqlite"
|
||||
"github.com/stretchr/testify/require"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
"senlinai-agent/backend/internal/logic/auth"
|
||||
"senlinai-agent/backend/internal/logic/projects"
|
||||
"senlinai-agent/backend/internal/models"
|
||||
@@ -53,11 +54,80 @@ func TestDemoSeedIsIdempotent(t *testing.T) {
|
||||
var userCount int64
|
||||
require.NoError(t, database.Model(&models.SenlinAgentUser{}).Where("email = ?", "demo@senlin.ai").Count(&userCount).Error)
|
||||
require.Equal(t, int64(1), userCount)
|
||||
|
||||
var projectCount int64
|
||||
require.NoError(t, database.Model(&models.SenlinAgentProject{}).Where("owner_id = ?", first.User.ID).Count(&projectCount).Error)
|
||||
require.Equal(t, int64(4), projectCount)
|
||||
var distinctIdentifiers int64
|
||||
require.NoError(t, database.Model(&models.SenlinAgentProject{}).
|
||||
Where("owner_id = ?", first.User.ID).
|
||||
Distinct("identifier").
|
||||
Count(&distinctIdentifiers).Error)
|
||||
require.Equal(t, projectCount, distinctIdentifiers)
|
||||
|
||||
var tags []models.SenlinAgentTag
|
||||
require.NoError(t, database.Where("project_id = ?", first.Projects[0].ID).Find(&tags).Error)
|
||||
require.Len(t, tags, 4)
|
||||
for _, tag := range tags {
|
||||
require.Equal(t, first.Projects[0].ID, tag.ProjectID)
|
||||
require.NotEmpty(t, tag.Identity)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDemoSeedUsesIdentifierAsStableProjectKey(t *testing.T) {
|
||||
database := newTestDB(t)
|
||||
|
||||
first, err := Demo(database, DemoOptions{Email: "demo@senlin.ai", DisplayName: "演示用户", Password: "password123"})
|
||||
require.NoError(t, err)
|
||||
original := first.Projects[0]
|
||||
require.NoError(t, database.Model(&original).Update("name", "本地重命名项目").Error)
|
||||
|
||||
second, err := Demo(database, DemoOptions{Email: "demo@senlin.ai", DisplayName: "演示用户", Password: "password123"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, original.ID, second.Projects[0].ID)
|
||||
require.Equal(t, "A1", second.Projects[0].Identifier)
|
||||
var projectCount int64
|
||||
require.NoError(t, database.Model(&models.SenlinAgentProject{}).
|
||||
Where("owner_id = ? AND identifier = ?", first.User.ID, "A1").
|
||||
Count(&projectCount).Error)
|
||||
require.Equal(t, int64(1), projectCount)
|
||||
}
|
||||
|
||||
func TestDemoSeedKeepsSameNamedTagsScopedToTheirProjects(t *testing.T) {
|
||||
database := newTestDB(t)
|
||||
|
||||
first, err := Demo(database, DemoOptions{Email: "demo@senlin.ai", DisplayName: "演示用户", Password: "password123"})
|
||||
require.NoError(t, err)
|
||||
otherTag := models.SenlinAgentTag{ProjectID: first.Projects[1].ID, Name: "UI"}
|
||||
require.NoError(t, database.Create(&otherTag).Error)
|
||||
|
||||
_, err = Demo(database, DemoOptions{Email: "demo@senlin.ai", DisplayName: "演示用户", Password: "password123"})
|
||||
|
||||
require.NoError(t, err)
|
||||
for _, projectID := range []uint{first.Projects[0].ID, first.Projects[1].ID} {
|
||||
var count int64
|
||||
require.NoError(t, database.Model(&models.SenlinAgentTag{}).
|
||||
Where("project_id = ? AND name = ?", projectID, "UI").
|
||||
Count(&count).Error)
|
||||
require.Equal(t, int64(1), count)
|
||||
}
|
||||
|
||||
var taggedTasks []models.SenlinAgentTask
|
||||
require.NoError(t, database.Where("project_id = ? AND tag_id IS NOT NULL", first.Projects[0].ID).Find(&taggedTasks).Error)
|
||||
require.NotEmpty(t, taggedTasks)
|
||||
for _, task := range taggedTasks {
|
||||
var tag models.SenlinAgentTag
|
||||
require.NoError(t, database.First(&tag, *task.TagID).Error)
|
||||
require.Equal(t, task.ProjectID, tag.ProjectID)
|
||||
}
|
||||
}
|
||||
|
||||
func newTestDB(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{})
|
||||
database, err := gorm.Open(sqlite.Open(fmt.Sprintf("file:%s?mode=memory&cache=shared", t.Name())), &gorm.Config{
|
||||
Logger: logger.Default.LogMode(logger.Silent),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, models.AutoMigrate(database))
|
||||
models.DBService = database
|
||||
|
||||
Reference in New Issue
Block a user