111 lines · 2.8 KB · Go
RawDownload
package api import (	"net/http"	"net/http/httptest"	"os"	"path/filepath"	"strings"	"testing" 	gin "github.com/gin-gonic/gin"	proxyconfig "github.com/router-for-me/CLIProxyAPI/v6/internal/config"	sdkaccess "github.com/router-for-me/CLIProxyAPI/v6/sdk/access"	"github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/auth"	sdkconfig "github.com/router-for-me/CLIProxyAPI/v6/sdk/config") func newTestServer(t *testing.T) *Server {	t.Helper() 	gin.SetMode(gin.TestMode) 	tmpDir := t.TempDir()	authDir := filepath.Join(tmpDir, "auth")	if err := os.MkdirAll(authDir, 0o700); err != nil {		t.Fatalf("failed to create auth dir: %v", err)	} 	cfg := &proxyconfig.Config{		SDKConfig: sdkconfig.SDKConfig{			APIKeys: []string{"test-key"},		},		Port:                   0,		AuthDir:                authDir,		Debug:                  true,		LoggingToFile:          false,		UsageStatisticsEnabled: false,	} 	authManager := auth.NewManager(nil, nil, nil)	accessManager := sdkaccess.NewManager() 	configPath := filepath.Join(tmpDir, "config.yaml")	return NewServer(cfg, authManager, accessManager, configPath)} func TestAmpProviderModelRoutes(t *testing.T) {	testCases := []struct {		name         string		path         string		wantStatus   int		wantContains string	}{		{			name:         "openai root models",			path:         "/api/provider/openai/models",			wantStatus:   http.StatusOK,			wantContains: `"object":"list"`,		},		{			name:         "groq root models",			path:         "/api/provider/groq/models",			wantStatus:   http.StatusOK,			wantContains: `"object":"list"`,		},		{			name:         "openai models",			path:         "/api/provider/openai/v1/models",			wantStatus:   http.StatusOK,			wantContains: `"object":"list"`,		},		{			name:         "anthropic models",			path:         "/api/provider/anthropic/v1/models",			wantStatus:   http.StatusOK,			wantContains: `"data"`,		},		{			name:         "google models v1",			path:         "/api/provider/google/v1/models",			wantStatus:   http.StatusOK,			wantContains: `"models"`,		},		{			name:         "google models v1beta",			path:         "/api/provider/google/v1beta/models",			wantStatus:   http.StatusOK,			wantContains: `"models"`,		},	} 	for _, tc := range testCases {		tc := tc		t.Run(tc.name, func(t *testing.T) {			server := newTestServer(t) 			req := httptest.NewRequest(http.MethodGet, tc.path, nil)			req.Header.Set("Authorization", "Bearer test-key") 			rr := httptest.NewRecorder()			server.engine.ServeHTTP(rr, req) 			if rr.Code != tc.wantStatus {				t.Fatalf("unexpected status code for %s: got %d want %d; body=%s", tc.path, rr.Code, tc.wantStatus, rr.Body.String())			}			if body := rr.Body.String(); !strings.Contains(body, tc.wantContains) {				t.Fatalf("response body for %s missing %q: %s", tc.path, tc.wantContains, body)			}		})	}}