package handler_test import ( "net/http" "net/http/httptest" "testing" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) func TestRouterStripSlashes(t *testing.T) { r := chi.NewRouter() r.Use(middleware.StripSlashes) r.Route("/api/v1", func(r chi.Router) { r.Post("/auth/login", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte(`{"code":200}`)) }) }) tests := []struct { name string method string url string expectedStatus int }{ { name: "Login without trailing slash", method: "POST", url: "/api/v1/auth/login", expectedStatus: http.StatusOK, }, { name: "Login with trailing slash", method: "POST", url: "/api/v1/auth/login/", expectedStatus: http.StatusOK, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { req, _ := http.NewRequest(tt.method, tt.url, nil) rr := httptest.NewRecorder() r.ServeHTTP(rr, req) if rr.Code != tt.expectedStatus { t.Errorf("expected status %v, got %v for %s", tt.expectedStatus, rr.Code, tt.url) } // Check if it redirected (it shouldn't with StripSlashes middleware correctly placed) if rr.Code == http.StatusPermanentRedirect || rr.Code == http.StatusMovedPermanently { t.Errorf("got redirect %v for %s", rr.Code, tt.url) } }) } }