admin_service_update_user_rpm_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //go:build unit
  2. package service
  3. import (
  4. "context"
  5. "testing"
  6. "github.com/stretchr/testify/require"
  7. )
  8. // rpmUserRepoStub 复用 admin_service_update_balance_test.go 的基础 stub 结构,
  9. // 只在 Update 时把入参克隆一份,便于断言修改后的 RPMLimit。
  10. type rpmUserRepoStub struct {
  11. *userRepoStub
  12. lastUpdated *User
  13. }
  14. func (s *rpmUserRepoStub) Update(_ context.Context, user *User, _ UserUpdateFields) error {
  15. if user == nil {
  16. return nil
  17. }
  18. clone := *user
  19. s.lastUpdated = &clone
  20. if s.userRepoStub != nil {
  21. s.userRepoStub.user = &clone
  22. }
  23. return nil
  24. }
  25. func TestAdminService_UpdateUser_InvalidatesAuthCacheOnRPMLimitChange(t *testing.T) {
  26. base := &userRepoStub{user: &User{ID: 42, Email: "u@example.com", RPMLimit: 10}}
  27. repo := &rpmUserRepoStub{userRepoStub: base}
  28. invalidator := &authCacheInvalidatorStub{}
  29. svc := &adminServiceImpl{
  30. userRepo: repo,
  31. redeemCodeRepo: &redeemRepoStub{},
  32. authCacheInvalidator: invalidator,
  33. }
  34. newRPM := 60
  35. updated, err := svc.UpdateUser(context.Background(), 42, &UpdateUserInput{
  36. RPMLimit: &newRPM,
  37. })
  38. require.NoError(t, err)
  39. require.NotNil(t, updated)
  40. require.Equal(t, 60, updated.RPMLimit)
  41. require.Equal(t, []int64{42}, invalidator.userIDs, "仅修改 RPMLimit 也应失效 API Key 认证缓存")
  42. }
  43. func TestAdminService_UpdateUser_NoInvalidateWhenRPMLimitUnchanged(t *testing.T) {
  44. base := &userRepoStub{user: &User{ID: 42, Email: "u@example.com", RPMLimit: 10, Username: "old"}}
  45. repo := &rpmUserRepoStub{userRepoStub: base}
  46. invalidator := &authCacheInvalidatorStub{}
  47. svc := &adminServiceImpl{
  48. userRepo: repo,
  49. redeemCodeRepo: &redeemRepoStub{},
  50. authCacheInvalidator: invalidator,
  51. }
  52. newName := "new"
  53. sameRPM := 10
  54. _, err := svc.UpdateUser(context.Background(), 42, &UpdateUserInput{
  55. Username: &newName,
  56. RPMLimit: &sameRPM,
  57. })
  58. require.NoError(t, err)
  59. require.Empty(t, invalidator.userIDs, "只改 username 不应触发认证缓存失效")
  60. }