package middleware import ( "net/http" "net/http/httptest" "testing" "github.com/ez-api/ez-api/internal/model" "github.com/gin-gonic/gin" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func TestOperationLogMiddleware_WritesLog(t *testing.T) { gin.SetMode(gin.TestMode) db, err := gorm.Open(sqlite.Open("file:oplog?mode=memory&cache=shared"), &gorm.Config{}) if err != nil { t.Fatalf("open sqlite: %v", err) } if err := db.AutoMigrate(&model.OperationLog{}); err != nil { t.Fatalf("migrate: %v", err) } r := gin.New() r.Use(OperationLogMiddleware(db)) r.POST("/admin/test", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"ok": true}) }) req := httptest.NewRequest(http.MethodPost, "/admin/test?x=1", nil) rr := httptest.NewRecorder() r.ServeHTTP(rr, req) if rr.Code != http.StatusOK { t.Fatalf("expected 200, got %d", rr.Code) } var count int64 if err := db.Model(&model.OperationLog{}).Count(&count).Error; err != nil { t.Fatalf("count: %v", err) } if count != 1 { t.Fatalf("expected 1 log, got %d", count) } }