auth_captcha_request_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //go:build unit
  2. package handler
  3. import (
  4. "encoding/json"
  5. "testing"
  6. "github.com/Wei-Shaw/sub2api/internal/service"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestAuthRequestsBindTencentCaptchaProof(t *testing.T) {
  10. const payload = `{"email":"user@example.com","password":"secret-123","tencent_captcha_ticket":"ticket-value","tencent_captcha_randstr":"@rand-value"}`
  11. tests := []struct {
  12. name string
  13. decode func([]byte) service.CaptchaProof
  14. }{
  15. {
  16. name: "登录",
  17. decode: func(raw []byte) service.CaptchaProof {
  18. var req LoginRequest
  19. require.NoError(t, json.Unmarshal(raw, &req))
  20. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  21. },
  22. },
  23. {
  24. name: "注册",
  25. decode: func(raw []byte) service.CaptchaProof {
  26. var req RegisterRequest
  27. require.NoError(t, json.Unmarshal(raw, &req))
  28. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  29. },
  30. },
  31. {
  32. name: "发送邮箱验证码",
  33. decode: func(raw []byte) service.CaptchaProof {
  34. var req SendVerifyCodeRequest
  35. require.NoError(t, json.Unmarshal(raw, &req))
  36. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  37. },
  38. },
  39. {
  40. name: "忘记密码",
  41. decode: func(raw []byte) service.CaptchaProof {
  42. var req ForgotPasswordRequest
  43. require.NoError(t, json.Unmarshal(raw, &req))
  44. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  45. },
  46. },
  47. {
  48. name: "OAuth启动",
  49. decode: func(raw []byte) service.CaptchaProof {
  50. var req oauthStartCaptchaRequest
  51. require.NoError(t, json.Unmarshal(raw, &req))
  52. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  53. },
  54. },
  55. {
  56. name: "Passkey登录",
  57. decode: func(raw []byte) service.CaptchaProof {
  58. var req passkeyBeginLoginRequest
  59. require.NoError(t, json.Unmarshal(raw, &req))
  60. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  61. },
  62. },
  63. {
  64. name: "OAuth待处理账号发送邮箱验证码",
  65. decode: func(raw []byte) service.CaptchaProof {
  66. var req sendPendingOAuthVerifyCodeRequest
  67. require.NoError(t, json.Unmarshal(raw, &req))
  68. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  69. },
  70. },
  71. {
  72. name: "OAuth待处理账号创建",
  73. decode: func(raw []byte) service.CaptchaProof {
  74. var req createPendingOAuthAccountRequest
  75. require.NoError(t, json.Unmarshal(raw, &req))
  76. return captchaProof(req.TurnstileToken, req.TencentCaptchaTicket, req.TencentCaptchaRandstr)
  77. },
  78. },
  79. }
  80. for _, test := range tests {
  81. t.Run(test.name, func(t *testing.T) {
  82. proof := test.decode([]byte(payload))
  83. require.Equal(t, "ticket-value", proof.TencentTicket)
  84. require.Equal(t, "@rand-value", proof.TencentRandstr)
  85. })
  86. }
  87. }