mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
Update API handler tests to expect numeric `code`, `success` messages, and new envelope fields (`trace_id`, `details`), matching recent response envelope changes.
71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package api
|
|
|
|
import (
|
|
"math"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/ez-api/ez-api/internal/middleware"
|
|
"github.com/ez-api/ez-api/internal/model"
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestAdminHandler_GetAPIKeyStatsSummary(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
if err := db.AutoMigrate(&model.APIKey{}); err != nil {
|
|
t.Fatalf("migrate: %v", err)
|
|
}
|
|
|
|
if err := db.Create(&model.APIKey{
|
|
GroupID: 1,
|
|
APIKey: "k1",
|
|
TotalRequests: 10,
|
|
SuccessRequests: 7,
|
|
FailureRequests: 3,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create key1: %v", err)
|
|
}
|
|
if err := db.Create(&model.APIKey{
|
|
GroupID: 1,
|
|
APIKey: "k2",
|
|
TotalRequests: 5,
|
|
SuccessRequests: 5,
|
|
FailureRequests: 0,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create key2: %v", err)
|
|
}
|
|
|
|
handler := &AdminHandler{db: db}
|
|
r := gin.New()
|
|
r.Use(middleware.ResponseEnvelope())
|
|
r.GET("/admin/apikey-stats/summary", handler.GetAPIKeyStatsSummary)
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/admin/apikey-stats/summary", nil)
|
|
rec := httptest.NewRecorder()
|
|
r.ServeHTTP(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("unexpected status: got=%d body=%s", rec.Code, rec.Body.String())
|
|
}
|
|
|
|
var resp APIKeyStatsSummaryResponse
|
|
env := decodeEnvelope(t, rec, &resp)
|
|
if env.Code != 0 {
|
|
t.Fatalf("expected code=0, got %d", env.Code)
|
|
}
|
|
if resp.TotalRequests != 15 || resp.SuccessRequests != 12 || resp.FailureRequests != 3 {
|
|
t.Fatalf("totals mismatch: %+v", resp)
|
|
}
|
|
if math.Abs(resp.SuccessRate-0.8) > 1e-6 || math.Abs(resp.FailureRate-0.2) > 1e-6 {
|
|
t.Fatalf("rates mismatch: success=%f failure=%f", resp.SuccessRate, resp.FailureRate)
|
|
}
|
|
}
|