adminLoginByCapLogic_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package pub
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. "perms-system-server/internal/config"
  7. "perms-system-server/internal/response"
  8. "perms-system-server/internal/svc"
  9. "perms-system-server/internal/testutil"
  10. "perms-system-server/internal/types"
  11. "github.com/stretchr/testify/assert"
  12. "github.com/stretchr/testify/require"
  13. )
  14. // TC-1225: cap.js 未启用时调用 AdminLoginByCap
  15. func TestAdminLoginByCap_CapDisabled(t *testing.T) {
  16. cfg := testutil.GetTestConfig()
  17. cfg.Capjs = config.CapjsConf{Enable: 0}
  18. svcCtx := svc.NewServiceContext(cfg)
  19. logic := NewAdminLoginByCapLogic(context.Background(), svcCtx)
  20. resp, err := logic.AdminLoginByCap(&types.AdminLoginByCapReq{
  21. Username: "admin",
  22. Password: "pass",
  23. ManagementKey: "test-management-key",
  24. CapToken: "some-token",
  25. })
  26. require.Nil(t, resp)
  27. require.Error(t, err)
  28. var codeErr *response.CodeError
  29. require.True(t, errors.As(err, &codeErr))
  30. assert.Equal(t, 400, codeErr.Code())
  31. assert.Contains(t, codeErr.Error(), "当前未启用人机验证")
  32. }
  33. // TC-1226: capToken 为空
  34. func TestAdminLoginByCap_EmptyCapToken(t *testing.T) {
  35. server := newCapMockServer(true)
  36. defer server.Close()
  37. svcCtx := newCapEnabledSvcCtx(server.URL)
  38. logic := NewAdminLoginByCapLogic(context.Background(), svcCtx)
  39. resp, err := logic.AdminLoginByCap(&types.AdminLoginByCapReq{
  40. Username: "admin",
  41. Password: "pass",
  42. ManagementKey: "test-management-key",
  43. CapToken: "",
  44. })
  45. require.Nil(t, resp)
  46. require.Error(t, err)
  47. var codeErr *response.CodeError
  48. require.True(t, errors.As(err, &codeErr))
  49. assert.Equal(t, 400, codeErr.Code())
  50. assert.Contains(t, codeErr.Error(), "人机验证不能为空")
  51. }
  52. // TC-1227: capToken 有效 + managementKey 无效
  53. func TestAdminLoginByCap_ValidToken_InvalidManagementKey(t *testing.T) {
  54. server := newCapMockServer(true)
  55. defer server.Close()
  56. svcCtx := newCapEnabledSvcCtx(server.URL)
  57. logic := NewAdminLoginByCapLogic(context.Background(), svcCtx)
  58. resp, err := logic.AdminLoginByCap(&types.AdminLoginByCapReq{
  59. Username: "admin",
  60. Password: "pass",
  61. ManagementKey: "wrong-key",
  62. CapToken: "valid-token",
  63. })
  64. require.Nil(t, resp)
  65. require.Error(t, err)
  66. var codeErr *response.CodeError
  67. require.True(t, errors.As(err, &codeErr))
  68. assert.Equal(t, 401, codeErr.Code())
  69. }
  70. // TC-1228: capToken 有效 + 超管正常登录
  71. func TestAdminLoginByCap_ValidToken_SuperAdminSuccess(t *testing.T) {
  72. ctx := context.Background()
  73. server := newCapMockServer(true)
  74. defer server.Close()
  75. svcCtx := newCapEnabledSvcCtx(server.URL)
  76. username := testutil.UniqueId()
  77. password := "SuperPass123"
  78. _, cleanUser := insertSuperAdmin(t, ctx, svcCtx, username, password)
  79. t.Cleanup(cleanUser)
  80. logic := NewAdminLoginByCapLogic(ctx, svcCtx)
  81. resp, err := logic.AdminLoginByCap(&types.AdminLoginByCapReq{
  82. Username: username,
  83. Password: password,
  84. ManagementKey: "test-management-key",
  85. CapToken: "valid-token",
  86. })
  87. require.NoError(t, err)
  88. require.NotNil(t, resp)
  89. assert.NotEmpty(t, resp.AccessToken)
  90. assert.NotEmpty(t, resp.RefreshToken)
  91. assert.Equal(t, int64(1), resp.UserInfo.IsSuperAdmin)
  92. }
  93. // TC-1229: capToken 有效 + 非超管被拒绝
  94. func TestAdminLoginByCap_ValidToken_NonSuperAdminRejected(t *testing.T) {
  95. ctx := context.Background()
  96. server := newCapMockServer(true)
  97. defer server.Close()
  98. svcCtx := newCapEnabledSvcCtx(server.URL)
  99. username := testutil.UniqueId()
  100. password := "UserPass123"
  101. _, cleanUser := insertTestUser(t, ctx, svcCtx, username, password, 1, 2)
  102. t.Cleanup(cleanUser)
  103. logic := NewAdminLoginByCapLogic(ctx, svcCtx)
  104. resp, err := logic.AdminLoginByCap(&types.AdminLoginByCapReq{
  105. Username: username,
  106. Password: password,
  107. ManagementKey: "test-management-key",
  108. CapToken: "valid-token",
  109. })
  110. require.Nil(t, resp)
  111. require.Error(t, err)
  112. var codeErr *response.CodeError
  113. require.True(t, errors.As(err, &codeErr))
  114. assert.Equal(t, 401, codeErr.Code())
  115. }