openai_images_controls_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package handler
  2. import (
  3. "bytes"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. middleware2 "github.com/Wei-Shaw/sub2api/internal/server/middleware"
  8. "github.com/Wei-Shaw/sub2api/internal/service"
  9. "github.com/gin-gonic/gin"
  10. "github.com/stretchr/testify/require"
  11. "github.com/tidwall/gjson"
  12. )
  13. func TestOpenAIGatewayHandlerImages_DisabledGroupRejectsBeforeScheduling(t *testing.T) {
  14. gin.SetMode(gin.TestMode)
  15. body := []byte(`{"model":"gpt-image-2","prompt":"draw","size":"1024x1024"}`)
  16. req := httptest.NewRequest(http.MethodPost, "/v1/images/generations", bytes.NewReader(body))
  17. req.Header.Set("Content-Type", "application/json")
  18. rec := httptest.NewRecorder()
  19. c, _ := gin.CreateTestContext(rec)
  20. c.Request = req
  21. groupID := int64(111)
  22. c.Set(string(middleware2.ContextKeyAPIKey), &service.APIKey{
  23. ID: 222,
  24. GroupID: &groupID,
  25. Group: &service.Group{
  26. ID: groupID,
  27. AllowImageGeneration: false,
  28. },
  29. User: &service.User{ID: 333},
  30. })
  31. c.Set(string(middleware2.ContextKeyUser), middleware2.AuthSubject{UserID: 333, Concurrency: 1})
  32. h := &OpenAIGatewayHandler{
  33. gatewayService: &service.OpenAIGatewayService{},
  34. billingCacheService: &service.BillingCacheService{},
  35. apiKeyService: &service.APIKeyService{},
  36. concurrencyHelper: &ConcurrencyHelper{concurrencyService: &service.ConcurrencyService{}},
  37. }
  38. h.Images(c)
  39. require.Equal(t, http.StatusForbidden, rec.Code)
  40. require.Equal(t, "permission_error", gjson.GetBytes(rec.Body.Bytes(), "error.type").String())
  41. require.Contains(t, rec.Body.String(), service.ImageGenerationPermissionMessage())
  42. }