auth_service_turnstile_register_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //go:build unit
  2. package service
  3. import (
  4. "context"
  5. "testing"
  6. "github.com/Wei-Shaw/sub2api/internal/config"
  7. "github.com/stretchr/testify/require"
  8. )
  9. type turnstileVerifierSpy struct {
  10. called int
  11. lastToken string
  12. result *TurnstileVerifyResponse
  13. err error
  14. }
  15. func (s *turnstileVerifierSpy) VerifyToken(_ context.Context, _ string, token, _ string) (*TurnstileVerifyResponse, error) {
  16. s.called++
  17. s.lastToken = token
  18. if s.err != nil {
  19. return nil, s.err
  20. }
  21. if s.result != nil {
  22. return s.result, nil
  23. }
  24. return &TurnstileVerifyResponse{Success: true}, nil
  25. }
  26. func newAuthServiceForRegisterTurnstileTest(settings map[string]string, verifier TurnstileVerifier) *AuthService {
  27. cfg := &config.Config{
  28. Server: config.ServerConfig{
  29. Mode: "release",
  30. },
  31. Turnstile: config.TurnstileConfig{
  32. Required: true,
  33. },
  34. }
  35. settingService := NewSettingService(&settingRepoStub{values: settings}, cfg)
  36. turnstileService := NewTurnstileService(settingService, verifier)
  37. return NewAuthService(
  38. nil, // entClient
  39. &userRepoStub{},
  40. nil, // redeemRepo
  41. nil, // refreshTokenCache
  42. cfg,
  43. settingService,
  44. nil, // emailService
  45. turnstileService,
  46. nil, // emailQueueService
  47. nil, // promoService
  48. nil, // defaultSubAssigner
  49. nil, // affiliateService
  50. nil, // userPlatformQuotaRepo
  51. )
  52. }
  53. func TestAuthService_VerifyTurnstileForRegister_SkipWhenEmailVerifyCodeProvided(t *testing.T) {
  54. verifier := &turnstileVerifierSpy{}
  55. service := newAuthServiceForRegisterTurnstileTest(map[string]string{
  56. SettingKeyEmailVerifyEnabled: "true",
  57. SettingKeyTurnstileEnabled: "true",
  58. SettingKeyTurnstileSecretKey: "secret",
  59. SettingKeyRegistrationEnabled: "true",
  60. }, verifier)
  61. err := service.VerifyTurnstileForRegister(context.Background(), "", "127.0.0.1", "123456")
  62. require.NoError(t, err)
  63. require.Equal(t, 0, verifier.called)
  64. }
  65. func TestAuthService_VerifyTurnstileForRegister_RequireWhenVerifyCodeMissing(t *testing.T) {
  66. verifier := &turnstileVerifierSpy{}
  67. service := newAuthServiceForRegisterTurnstileTest(map[string]string{
  68. SettingKeyEmailVerifyEnabled: "true",
  69. SettingKeyTurnstileEnabled: "true",
  70. SettingKeyTurnstileSecretKey: "secret",
  71. }, verifier)
  72. err := service.VerifyTurnstileForRegister(context.Background(), "", "127.0.0.1", "")
  73. require.ErrorIs(t, err, ErrTurnstileVerificationFailed)
  74. }
  75. func TestAuthService_VerifyTurnstileForRegister_NoSkipWhenEmailVerifyDisabled(t *testing.T) {
  76. verifier := &turnstileVerifierSpy{}
  77. service := newAuthServiceForRegisterTurnstileTest(map[string]string{
  78. SettingKeyEmailVerifyEnabled: "false",
  79. SettingKeyTurnstileEnabled: "true",
  80. SettingKeyTurnstileSecretKey: "secret",
  81. }, verifier)
  82. err := service.VerifyTurnstileForRegister(context.Background(), "turnstile-token", "127.0.0.1", "123456")
  83. require.NoError(t, err)
  84. require.Equal(t, 1, verifier.called)
  85. require.Equal(t, "turnstile-token", verifier.lastToken)
  86. }