Files
sub2api/backend/internal/handler/admin/content_moderation_engine_test.go
T

54 lines
1.9 KiB
Go
Raw Normal View History

package admin
import (
"context"
"net/http"
"net/http/httptest"
"strings"
"testing"
"github.com/Wei-Shaw/sub2api/internal/service"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/require"
)
type moderationEngineSettings struct {
service.SettingRepository
value string
}
func (r *moderationEngineSettings) GetValue(context.Context, string) (string, error) {
return r.value, nil
}
func (r *moderationEngineSettings) Set(_ context.Context, _ string, value string) error {
r.value = value
return nil
}
func TestContentModerationEngineHandlerRoundTrip(t *testing.T) {
gin.SetMode(gin.TestMode)
settings := &moderationEngineSettings{value: `{"api_keys":["legacy-secret"],"model":"omni-moderation-latest"}`}
svc := service.NewContentModerationService(settings, nil, nil, nil, nil, nil, nil, nil)
h := NewContentModerationHandler(svc)
router := gin.New()
router.PUT("/config", h.UpdateConfig)
router.GET("/config", h.GetConfig)
body := `{"engine":"typesafe","engine_configs":{"typesafe":{"base_url":"https://api.typesafe.ai","model":"jev-latest","api_keys":["new-secret"],"thresholds":{"sexual":0.91}}}}`
w := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodPut, "/config", strings.NewReader(body))
req.Header.Set("Content-Type", "application/json")
router.ServeHTTP(w, req)
require.Equal(t, 200, w.Code)
require.Contains(t, w.Body.String(), `"engine":"typesafe"`)
require.Contains(t, w.Body.String(), `"sexual":0.91`)
require.NotContains(t, w.Body.String(), "new-secret")
require.NotContains(t, w.Body.String(), "legacy-secret")
w = httptest.NewRecorder()
router.ServeHTTP(w, httptest.NewRequest(http.MethodGet, "/config", nil))
require.Equal(t, 200, w.Code)
require.Contains(t, w.Body.String(), `"engine_configs"`)
require.Contains(t, w.Body.String(), `"model":"jev-latest"`)
require.Contains(t, settings.value, "legacy-secret")
require.Contains(t, settings.value, "new-secret")
}