From c669c09a224132159867d1bb58d8cd02c9646423 Mon Sep 17 00:00:00 2001 From: Nikita Goncharov Date: Sun, 23 Sep 2018 23:26:28 +0300 Subject: [PATCH] Add disabling handler Add tests to disabling handler Cover 100% of disabling handler code --- swagger.go | 19 ++++++++++++++++++- swagger_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/swagger.go b/swagger.go index c7f49f8..fd58935 100644 --- a/swagger.go +++ b/swagger.go @@ -1,10 +1,12 @@ package ginSwagger import ( - "golang.org/x/net/webdav" "html/template" + "os" "regexp" + "golang.org/x/net/webdav" + "github.com/gin-gonic/gin" "github.com/swaggo/swag" ) @@ -49,6 +51,21 @@ func WrapHandler(h *webdav.Handler) gin.HandlerFunc { } } +// DisablingWrapHandler turn handler off +// if specified environment variable passed +func DisablingWrapHandler(h *webdav.Handler, envName string) gin.HandlerFunc { + eFlag := os.Getenv(envName) + if eFlag != "" { + return func(c *gin.Context) { + // Simulate behavior when route unspecified and + // return 404 HTTP code + c.String(404, "") + } + } + + return WrapHandler(h) +} + const swagger_index_templ = ` diff --git a/swagger_test.go b/swagger_test.go index 7815e0e..4fffb2b 100644 --- a/swagger_test.go +++ b/swagger_test.go @@ -2,6 +2,7 @@ package ginSwagger import ( "net/http/httptest" + "os" "testing" "github.com/gin-gonic/gin" @@ -28,7 +29,43 @@ func TestWrapHandler(t *testing.T) { w4 := performRequest("GET", "/notfound", router) assert.Equal(t, 404, w4.Code) +} +func TestDisablingWrapHandler(t *testing.T) { + gin.SetMode(gin.TestMode) + + router := gin.New() + disablingKey := "SWAGGER_DISABLE" + + router.GET("/simple/*any", DisablingWrapHandler(swaggerFiles.Handler, disablingKey)) + + w1 := performRequest("GET", "/simple/index.html", router) + assert.Equal(t, 200, w1.Code) + + w2 := performRequest("GET", "/simple/doc.json", router) + assert.Equal(t, 200, w2.Code) + + w3 := performRequest("GET", "/simple/favicon-16x16.png", router) + assert.Equal(t, 200, w3.Code) + + w4 := performRequest("GET", "/simple/notfound", router) + assert.Equal(t, 404, w4.Code) + + os.Setenv(disablingKey, "true") + + router.GET("/disabling/*any", DisablingWrapHandler(swaggerFiles.Handler, disablingKey)) + + w11 := performRequest("GET", "/disabling/index.html", router) + assert.Equal(t, 404, w11.Code) + + w22 := performRequest("GET", "/disabling/doc.json", router) + assert.Equal(t, 404, w22.Code) + + w33 := performRequest("GET", "/disabling/favicon-16x16.png", router) + assert.Equal(t, 404, w33.Code) + + w44 := performRequest("GET", "/disabling/notfound", router) + assert.Equal(t, 404, w44.Code) } func performRequest(method, target string, router *gin.Engine) *httptest.ResponseRecorder {