| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- //go:build unit
- package handler
- import (
- "context"
- "encoding/json"
- "net/http"
- "net/http/httptest"
- "testing"
- "github.com/Wei-Shaw/sub2api/internal/config"
- "github.com/Wei-Shaw/sub2api/internal/service"
- "github.com/gin-gonic/gin"
- "github.com/stretchr/testify/require"
- )
- type settingHandlerPublicRepoStub struct {
- values map[string]string
- }
- func (s *settingHandlerPublicRepoStub) Get(ctx context.Context, key string) (*service.Setting, error) {
- panic("unexpected Get call")
- }
- func (s *settingHandlerPublicRepoStub) GetValue(ctx context.Context, key string) (string, error) {
- panic("unexpected GetValue call")
- }
- func (s *settingHandlerPublicRepoStub) Set(ctx context.Context, key, value string) error {
- panic("unexpected Set call")
- }
- func (s *settingHandlerPublicRepoStub) GetMultiple(ctx context.Context, keys []string) (map[string]string, error) {
- out := make(map[string]string, len(keys))
- for _, key := range keys {
- if value, ok := s.values[key]; ok {
- out[key] = value
- }
- }
- return out, nil
- }
- func (s *settingHandlerPublicRepoStub) SetMultiple(ctx context.Context, settings map[string]string) error {
- panic("unexpected SetMultiple call")
- }
- func (s *settingHandlerPublicRepoStub) GetAll(ctx context.Context) (map[string]string, error) {
- panic("unexpected GetAll call")
- }
- func (s *settingHandlerPublicRepoStub) Delete(ctx context.Context, key string) error {
- panic("unexpected Delete call")
- }
- func TestSettingHandler_GetPublicSettings_ExposesForceEmailOnThirdPartySignup(t *testing.T) {
- gin.SetMode(gin.TestMode)
- repo := &settingHandlerPublicRepoStub{
- values: map[string]string{
- service.SettingKeyForceEmailOnThirdPartySignup: "true",
- },
- }
- h := NewSettingHandler(service.NewSettingService(repo, &config.Config{}), "test-version")
- recorder := httptest.NewRecorder()
- c, _ := gin.CreateTestContext(recorder)
- c.Request = httptest.NewRequest(http.MethodGet, "/api/v1/settings/public", nil)
- h.GetPublicSettings(c)
- require.Equal(t, http.StatusOK, recorder.Code)
- var resp struct {
- Code int `json:"code"`
- Data struct {
- ForceEmailOnThirdPartySignup bool `json:"force_email_on_third_party_signup"`
- } `json:"data"`
- }
- require.NoError(t, json.Unmarshal(recorder.Body.Bytes(), &resp))
- require.Equal(t, 0, resp.Code)
- require.True(t, resp.Data.ForceEmailOnThirdPartySignup)
- }
- func TestSettingHandler_GetPublicSettings_ExposesTencentCaptchaConfiguration(t *testing.T) {
- gin.SetMode(gin.TestMode)
- repo := &settingHandlerPublicRepoStub{
- values: map[string]string{
- service.SettingKeyTencentCaptchaEnabled: "true",
- service.SettingKeyTencentCaptchaAppID: "123456789",
- service.SettingKeyTencentCaptchaRegion: service.TencentCaptchaRegionINTL,
- },
- }
- h := NewSettingHandler(service.NewSettingService(repo, &config.Config{}), "test-version")
- recorder := httptest.NewRecorder()
- c, _ := gin.CreateTestContext(recorder)
- c.Request = httptest.NewRequest(http.MethodGet, "/api/v1/settings/public", nil)
- h.GetPublicSettings(c)
- require.Equal(t, http.StatusOK, recorder.Code)
- var resp struct {
- Code int `json:"code"`
- Data struct {
- TencentCaptchaEnabled bool `json:"tencent_captcha_enabled"`
- TencentCaptchaAppID string `json:"tencent_captcha_app_id"`
- TencentCaptchaRegion string `json:"tencent_captcha_region"`
- } `json:"data"`
- }
- require.NoError(t, json.Unmarshal(recorder.Body.Bytes(), &resp))
- require.Equal(t, 0, resp.Code)
- require.True(t, resp.Data.TencentCaptchaEnabled)
- require.Equal(t, "123456789", resp.Data.TencentCaptchaAppID)
- require.Equal(t, service.TencentCaptchaRegionINTL, resp.Data.TencentCaptchaRegion)
- }
- func TestSettingHandler_GetPublicSettings_ExposesWeChatOAuthModeCapabilities(t *testing.T) {
- gin.SetMode(gin.TestMode)
- h := NewSettingHandler(service.NewSettingService(&settingHandlerPublicRepoStub{
- values: map[string]string{
- service.SettingKeyWeChatConnectEnabled: "true",
- service.SettingKeyWeChatConnectAppID: "wx-mp-app",
- service.SettingKeyWeChatConnectAppSecret: "wx-mp-secret",
- service.SettingKeyWeChatConnectMode: "mp",
- service.SettingKeyWeChatConnectScopes: "snsapi_base",
- service.SettingKeyWeChatConnectOpenEnabled: "true",
- service.SettingKeyWeChatConnectMPEnabled: "true",
- service.SettingKeyWeChatConnectRedirectURL: "https://api.example.com/api/v1/auth/oauth/wechat/callback",
- service.SettingKeyWeChatConnectFrontendRedirectURL: "/auth/wechat/callback",
- },
- }, &config.Config{}), "test-version")
- recorder := httptest.NewRecorder()
- c, _ := gin.CreateTestContext(recorder)
- c.Request = httptest.NewRequest(http.MethodGet, "/api/v1/settings/public", nil)
- h.GetPublicSettings(c)
- require.Equal(t, http.StatusOK, recorder.Code)
- var resp struct {
- Code int `json:"code"`
- Data struct {
- WeChatOAuthEnabled bool `json:"wechat_oauth_enabled"`
- WeChatOAuthOpenEnabled bool `json:"wechat_oauth_open_enabled"`
- WeChatOAuthMPEnabled bool `json:"wechat_oauth_mp_enabled"`
- } `json:"data"`
- }
- require.NoError(t, json.Unmarshal(recorder.Body.Bytes(), &resp))
- require.Equal(t, 0, resp.Code)
- require.True(t, resp.Data.WeChatOAuthEnabled)
- require.True(t, resp.Data.WeChatOAuthOpenEnabled)
- require.True(t, resp.Data.WeChatOAuthMPEnabled)
- }
|