package middleware import ( "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" ) func TestCORS(t *testing.T) { // Setup gin.SetMode(gin.TestMode) router := gin.New() router.Use(CORS()) router.GET("/test", func(c *gin.Context) { c.JSON(200, gin.H{"message": "ok"}) }) t.Run("OPTIONS request", func(t *testing.T) { w := httptest.NewRecorder() req, _ := http.NewRequest("OPTIONS", "/test", nil) router.ServeHTTP(w, req) assert.Equal(t, 204, w.Code) assert.Equal(t, "http://localhost:3000", w.Header().Get("Access-Control-Allow-Origin")) assert.Equal(t, "GET, POST, PUT, DELETE, OPTIONS", w.Header().Get("Access-Control-Allow-Methods")) assert.Equal(t, "Origin, Content-Type, Authorization", w.Header().Get("Access-Control-Allow-Headers")) assert.Equal(t, "true", w.Header().Get("Access-Control-Allow-Credentials")) }) t.Run("GET request", func(t *testing.T) { w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/test", nil) router.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) assert.Equal(t, "http://localhost:3000", w.Header().Get("Access-Control-Allow-Origin")) assert.Equal(t, "GET, POST, PUT, DELETE, OPTIONS", w.Header().Get("Access-Control-Allow-Methods")) assert.Equal(t, "Origin, Content-Type, Authorization", w.Header().Get("Access-Control-Allow-Headers")) assert.Equal(t, "true", w.Header().Get("Access-Control-Allow-Credentials")) }) }