Files
OpenFlare/backend/plugins/domain/user/plugin_test.go
T
ryan 528240026d chore(lint): unify formatting on golangci-lint fmt (gofumpt), uncap issue reporting, fix gofumpt drift
- make format 现在与 code-check 使用同一格式化器(golangci-lint fmt),消除 goimports -local 与 gofumpt 的格式拉锯
- .golangci.yml 关闭默认 50/3 截断,完整上报所有问题(只增强不弱化)
- 全库 gofumpt 规范化(203 files, 纯格式无行为变更)
2026-08-28 16:31:53 +08:00

110 lines
2.9 KiB
Go

// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package user_test
import (
"Wavelet/core"
"Wavelet/core/contracts"
"Wavelet/plugins/domain/user"
"context"
"path/filepath"
"testing"
"github.com/glebarez/sqlite"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gorm.io/gorm"
database "Wavelet/plugins/infra/database"
)
func setupTestDB(t *testing.T) *gorm.DB {
t.Helper()
dbPath := filepath.Join(t.TempDir(), "user_test.db")
testDB, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
require.NoError(t, err)
require.NoError(t, testDB.AutoMigrate(
&user.User{},
&user.AccessToken{},
))
database.SetDB(testDB)
return testDB
}
func TestUserPluginUnit(t *testing.T) {
ctx := core.NewContext(context.Background())
testDB := setupTestDB(t)
dbPlugin := database.New(database.WithDB(testDB))
require.NoError(t, dbPlugin.Apply(ctx))
p := user.New()
assert.Equal(t, "user", p.Name())
assert.Equal(t, "1.0.0", p.Manifest().Version)
require.NoError(t, p.Apply(ctx))
userSvc, err := core.Inject[contracts.UserService](ctx)
require.NoError(t, err)
require.NotNil(t, userSvc)
testCtx := context.Background()
// 1. Create User
u, err := userSvc.CreateUser(testCtx, contracts.CreateUserRequest{
Username: "charlie",
Password: "Password789!",
Email: "charlie@example.com",
})
require.NoError(t, err)
assert.Equal(t, "charlie", u.Username)
// 2. Empty username error
_, err = userSvc.CreateUser(testCtx, contracts.CreateUserRequest{})
assert.Error(t, err)
// 3. Verify Password
assert.True(t, userSvc.VerifyPassword(testCtx, u.ID, "Password789!"))
assert.False(t, userSvc.VerifyPassword(testCtx, u.ID, "Wrong"))
// 4. Update Password with wrong old password
err = userSvc.UpdatePassword(testCtx, u.ID, "WrongOld", "NewPass999!")
assert.Error(t, err)
// Update Password success
err = userSvc.UpdatePassword(testCtx, u.ID, "Password789!", "NewPass999!")
require.NoError(t, err)
assert.True(t, userSvc.VerifyPassword(testCtx, u.ID, "NewPass999!"))
// 5. Update Profile
nickname := "Charlie Brown"
email := "charlie.new@example.com"
gender := "male"
website := "https://charlie.me"
loc := "SF"
updated, err := userSvc.UpdateProfile(testCtx, u.ID, contracts.UpdateUserProfileRequest{
Nickname: &nickname,
Email: &email,
Gender: &gender,
Website: &website,
Location: &loc,
})
require.NoError(t, err)
assert.Equal(t, "Charlie Brown", updated.Nickname)
assert.Equal(t, "charlie.new@example.com", updated.Email)
assert.Equal(t, "male", updated.Gender)
assert.Equal(t, "https://charlie.me", updated.Website)
assert.Equal(t, "SF", updated.Location)
// 6. List and Status
require.NoError(t, userSvc.SetUserAdmin(testCtx, u.ID, true))
require.NoError(t, userSvc.SetUserActive(testCtx, u.ID, true))
list, total, err := userSvc.ListUsers(testCtx, 1, 10, "")
require.NoError(t, err)
assert.GreaterOrEqual(t, total, int64(1))
assert.NotEmpty(t, list)
}