mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-05-05 05:30:44 +08:00
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
|
|
//go:build unit
|
||
|
|
|
||
|
|
package service
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
// rpmUserRepoStub 复用 admin_service_update_balance_test.go 的基础 stub 结构,
|
||
|
|
// 只在 Update 时把入参克隆一份,便于断言修改后的 RPMLimit。
|
||
|
|
type rpmUserRepoStub struct {
|
||
|
|
*userRepoStub
|
||
|
|
lastUpdated *User
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *rpmUserRepoStub) Update(_ context.Context, user *User) error {
|
||
|
|
if user == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
clone := *user
|
||
|
|
s.lastUpdated = &clone
|
||
|
|
if s.userRepoStub != nil {
|
||
|
|
s.userRepoStub.user = &clone
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAdminService_UpdateUser_InvalidatesAuthCacheOnRPMLimitChange(t *testing.T) {
|
||
|
|
base := &userRepoStub{user: &User{ID: 42, Email: "u@example.com", RPMLimit: 10}}
|
||
|
|
repo := &rpmUserRepoStub{userRepoStub: base}
|
||
|
|
invalidator := &authCacheInvalidatorStub{}
|
||
|
|
svc := &adminServiceImpl{
|
||
|
|
userRepo: repo,
|
||
|
|
redeemCodeRepo: &redeemRepoStub{},
|
||
|
|
authCacheInvalidator: invalidator,
|
||
|
|
}
|
||
|
|
|
||
|
|
newRPM := 60
|
||
|
|
updated, err := svc.UpdateUser(context.Background(), 42, &UpdateUserInput{
|
||
|
|
RPMLimit: &newRPM,
|
||
|
|
})
|
||
|
|
require.NoError(t, err)
|
||
|
|
require.NotNil(t, updated)
|
||
|
|
require.Equal(t, 60, updated.RPMLimit)
|
||
|
|
require.Equal(t, []int64{42}, invalidator.userIDs, "仅修改 RPMLimit 也应失效 API Key 认证缓存")
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAdminService_UpdateUser_NoInvalidateWhenRPMLimitUnchanged(t *testing.T) {
|
||
|
|
base := &userRepoStub{user: &User{ID: 42, Email: "u@example.com", RPMLimit: 10, Username: "old"}}
|
||
|
|
repo := &rpmUserRepoStub{userRepoStub: base}
|
||
|
|
invalidator := &authCacheInvalidatorStub{}
|
||
|
|
svc := &adminServiceImpl{
|
||
|
|
userRepo: repo,
|
||
|
|
redeemCodeRepo: &redeemRepoStub{},
|
||
|
|
authCacheInvalidator: invalidator,
|
||
|
|
}
|
||
|
|
|
||
|
|
newName := "new"
|
||
|
|
sameRPM := 10
|
||
|
|
_, err := svc.UpdateUser(context.Background(), 42, &UpdateUserInput{
|
||
|
|
Username: &newName,
|
||
|
|
RPMLimit: &sameRPM,
|
||
|
|
})
|
||
|
|
require.NoError(t, err)
|
||
|
|
require.Empty(t, invalidator.userIDs, "只改 username 不应触发认证缓存失效")
|
||
|
|
}
|