gateway_codex_models_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package routes
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "testing"
  6. "github.com/Wei-Shaw/sub2api/internal/server/middleware"
  7. "github.com/Wei-Shaw/sub2api/internal/service"
  8. "github.com/gin-gonic/gin"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestGatewayRoutesCodexModelsManifestPathIsRegistered(t *testing.T) {
  12. router := newGatewayRoutesTestRouter()
  13. registered := make(map[string]string)
  14. for _, route := range router.Routes() {
  15. if route.Method == http.MethodGet {
  16. registered[route.Path] = route.Handler
  17. }
  18. }
  19. require.NotEmpty(t, registered["/backend-api/codex/models"], "GET /backend-api/codex/models should be registered")
  20. require.NotEmpty(t, registered["/v1/models"], "GET /v1/models should be registered")
  21. require.NotEmpty(t, registered["/models"], "GET /models should be registered")
  22. require.Equal(t, registered["/v1/models"], registered["/models"], "root alias should use the same platform-aware handler")
  23. }
  24. func TestDispatchCodexModelsGatewayKeepsOnlyOpenAIOnLiveManifestHandler(t *testing.T) {
  25. gin.SetMode(gin.TestMode)
  26. tests := []struct {
  27. platform string
  28. wantOpenAI bool
  29. }{
  30. {platform: service.PlatformOpenAI, wantOpenAI: true},
  31. {platform: service.PlatformComposite},
  32. {platform: service.PlatformGrok},
  33. {platform: service.PlatformDeepseek},
  34. }
  35. for _, tt := range tests {
  36. t.Run(tt.platform, func(t *testing.T) {
  37. rec := httptest.NewRecorder()
  38. c, _ := gin.CreateTestContext(rec)
  39. c.Request = httptest.NewRequest(http.MethodGet, "/models?client_version=0.147.0", nil)
  40. c.Set(string(middleware.ContextKeyAPIKey), &service.APIKey{
  41. Group: &service.Group{Platform: tt.platform},
  42. })
  43. called := ""
  44. dispatchCodexModelsGateway(c,
  45. func(c *gin.Context) { called = "openai" },
  46. func(c *gin.Context) { called = "generated" },
  47. )
  48. if tt.wantOpenAI {
  49. require.Equal(t, "openai", called)
  50. } else {
  51. require.Equal(t, "generated", called)
  52. }
  53. })
  54. }
  55. }