tencent_captcha_service_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //go:build unit
  2. package repository
  3. import (
  4. "context"
  5. "testing"
  6. "github.com/Wei-Shaw/sub2api/internal/service"
  7. "github.com/stretchr/testify/require"
  8. capcha "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/captcha/v20190722"
  9. )
  10. type tencentCaptchaAPIStub struct {
  11. request *capcha.DescribeCaptchaResultRequest
  12. response *capcha.DescribeCaptchaResultResponse
  13. err error
  14. }
  15. func (s *tencentCaptchaAPIStub) DescribeCaptchaResultWithContext(_ context.Context, request *capcha.DescribeCaptchaResultRequest) (*capcha.DescribeCaptchaResultResponse, error) {
  16. s.request = request
  17. return s.response, s.err
  18. }
  19. func TestTencentCaptchaVerifierMapsCredentialsRequestAndResponse(t *testing.T) {
  20. code := int64(1)
  21. message := "OK"
  22. requestID := "request-id"
  23. client := &tencentCaptchaAPIStub{response: &capcha.DescribeCaptchaResultResponse{
  24. Response: &capcha.DescribeCaptchaResultResponseParams{
  25. CaptchaCode: &code,
  26. CaptchaMsg: &message,
  27. RequestId: &requestID,
  28. },
  29. }}
  30. var gotSecretID, gotSecretKey, gotEndpoint string
  31. verifier := &tencentCaptchaVerifier{
  32. newClient: func(secretID, secretKey, endpoint string) (tencentCaptchaAPI, error) {
  33. gotSecretID, gotSecretKey, gotEndpoint = secretID, secretKey, endpoint
  34. return client, nil
  35. },
  36. }
  37. result, err := verifier.VerifyTicket(context.Background(), service.TencentCaptchaCredentials{
  38. AppID: 123456789,
  39. AppSecretKey: "app-secret",
  40. CloudSecretID: "cloud-secret-id",
  41. CloudSecretKey: "cloud-secret-key",
  42. Endpoint: "captcha.intl.tencentcloudapi.com",
  43. }, service.TencentCaptchaProof{Ticket: "ticket", Randstr: "@rand"}, "203.0.113.10")
  44. require.NoError(t, err)
  45. require.Equal(t, "cloud-secret-id", gotSecretID)
  46. require.Equal(t, "cloud-secret-key", gotSecretKey)
  47. // 接入点由 service 按站点下发,repository 不得再写死国内站
  48. require.Equal(t, "captcha.intl.tencentcloudapi.com", gotEndpoint)
  49. require.NotNil(t, client.request)
  50. require.Equal(t, uint64(9), *client.request.CaptchaType)
  51. require.Equal(t, uint64(123456789), *client.request.CaptchaAppId)
  52. require.Equal(t, "app-secret", *client.request.AppSecretKey)
  53. require.Equal(t, "ticket", *client.request.Ticket)
  54. require.Equal(t, "@rand", *client.request.Randstr)
  55. require.Equal(t, "203.0.113.10", *client.request.UserIp)
  56. require.Equal(t, &service.TencentCaptchaVerifyResponse{
  57. CaptchaCode: 1,
  58. CaptchaMsg: "OK",
  59. RequestID: "request-id",
  60. }, result)
  61. }