mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
43dc97e48c
- Moved cmd/, core/, plugins/, pkg/, downstream/, and main.go into backend/ directory - Batch updated all Go source files to import github.com/Rain-kl/Wavelet/backend/... - Updated Makefile, scripts/swagger.sh, architecture guards, and platform skills - Passed all quality gates (100% tests, 0 lint issues, clean build)
107 lines
2.9 KiB
Go
107 lines
2.9 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package user_test
|
|
|
|
import (
|
|
"context"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/Rain-kl/Wavelet/backend/core"
|
|
"github.com/Rain-kl/Wavelet/backend/core/contracts"
|
|
"github.com/Rain-kl/Wavelet/backend/plugins/domain/user"
|
|
database "github.com/Rain-kl/Wavelet/backend/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())
|
|
_ = setupTestDB(t)
|
|
|
|
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)
|
|
}
|