package initdb import ( "testing" "github.com/glebarez/sqlite" "github.com/stretchr/testify/require" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" "senlinai-agent/backend/internal/models" ) func TestInitUserCreatesRootUserWhenTableIsEmpty(t *testing.T) { database := newUserTestDatabase(t) user, err := InitUser(database) require.NoError(t, err) var users []models.SaUser require.NoError(t, database.Find(&users).Error) require.Len(t, users, 1) require.Equal(t, users[0].ID, user.ID) require.Equal(t, users[0].Identity, user.Identity) require.Equal(t, rootUsername, users[0].Email) require.Equal(t, rootUsername, users[0].DisplayName) require.Equal(t, rootRole, users[0].Role) require.NoError(t, bcrypt.CompareHashAndPassword([]byte(users[0].PasswordHash), []byte(rootPassword))) } func TestInitUserReturnsExistingRootWhenTableIsNotEmpty(t *testing.T) { database := newUserTestDatabase(t) root := models.SaUser{ Email: rootUsername, DisplayName: rootUsername, PasswordHash: "existing-hash", Role: rootRole, } require.NoError(t, database.Create(&root).Error) require.NoError(t, database.Create(&models.SaUser{ Email: "other@example.com", DisplayName: "Other", PasswordHash: "hash", Role: "user", }).Error) user, err := InitUser(database) require.NoError(t, err) var users []models.SaUser require.NoError(t, database.Find(&users).Error) require.Len(t, users, 2) require.Equal(t, root.ID, user.ID) require.Equal(t, root.Identity, user.Identity) } func newUserTestDatabase(t *testing.T) *gorm.DB { t.Helper() database, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) require.NoError(t, err) require.NoError(t, database.AutoMigrate(&models.SaUser{})) return database }