You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

90 lines
2.3 KiB

  1. package controller
  2. import (
  3. "bytes"
  4. "net/http"
  5. "net/http/httptest"
  6. "strconv"
  7. "testing"
  8. "github.com/QuantumNous/new-api/common"
  9. "github.com/QuantumNous/new-api/model"
  10. "github.com/gin-gonic/gin"
  11. "github.com/glebarez/sqlite"
  12. "github.com/stretchr/testify/require"
  13. "gorm.io/gorm"
  14. )
  15. func setupModelMetaTestDB(t *testing.T) {
  16. t.Helper()
  17. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
  18. require.NoError(t, err)
  19. require.NoError(t, db.AutoMigrate(&model.Model{}))
  20. origDB := model.DB
  21. model.DB = db
  22. t.Cleanup(func() {
  23. model.RefreshPricing()
  24. model.DB = origDB
  25. })
  26. }
  27. func TestCreateModelMetaDefaultsEmptyEndpointsToOpenAI(t *testing.T) {
  28. setupModelMetaTestDB(t)
  29. gin.SetMode(gin.TestMode)
  30. r := gin.New()
  31. r.POST("/api/models/", CreateModelMeta)
  32. req := httptest.NewRequest(
  33. http.MethodPost,
  34. "/api/models/",
  35. bytes.NewBufferString(`{"model_name":"custom-chat-model"}`),
  36. )
  37. req.Header.Set("Content-Type", "application/json")
  38. w := httptest.NewRecorder()
  39. r.ServeHTTP(w, req)
  40. require.Equal(t, http.StatusOK, w.Code)
  41. var resp map[string]any
  42. require.NoError(t, common.Unmarshal(w.Body.Bytes(), &resp))
  43. require.True(t, resp["success"].(bool))
  44. var saved model.Model
  45. require.NoError(t, model.DB.Where("model_name = ?", "custom-chat-model").First(&saved).Error)
  46. require.Equal(t, `["openai"]`, saved.Endpoints)
  47. }
  48. func TestUpdateModelMetaDefaultsEmptyEndpointsToOpenAI(t *testing.T) {
  49. setupModelMetaTestDB(t)
  50. gin.SetMode(gin.TestMode)
  51. existing := &model.Model{
  52. ModelName: "custom-chat-model",
  53. Endpoints: `{"anthropic":{"path":"/v1/messages","method":"POST"}}`,
  54. Status: 1,
  55. }
  56. require.NoError(t, existing.Insert())
  57. r := gin.New()
  58. r.PUT("/api/models/", UpdateModelMeta)
  59. req := httptest.NewRequest(
  60. http.MethodPut,
  61. "/api/models/",
  62. bytes.NewBufferString(`{"id":`+strconv.Itoa(existing.Id)+`,"model_name":"custom-chat-model","endpoints":"","status":1}`),
  63. )
  64. req.Header.Set("Content-Type", "application/json")
  65. w := httptest.NewRecorder()
  66. r.ServeHTTP(w, req)
  67. require.Equal(t, http.StatusOK, w.Code)
  68. var resp map[string]any
  69. require.NoError(t, common.Unmarshal(w.Body.Bytes(), &resp))
  70. require.True(t, resp["success"].(bool))
  71. var saved model.Model
  72. require.NoError(t, model.DB.First(&saved, existing.Id).Error)
  73. require.Equal(t, `["openai"]`, saved.Endpoints)
  74. }