//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) }