github.com/thetreep/go-swagger@v0.0.0-20240223100711-35af64f14f01/fixtures/bugs/1472/middleware_test.go (about) 1 //go:build ignore 2 // +build ignore 3 4 package bug_1472 5 6 import ( 7 "log" 8 "net/http" 9 "net/http/httptest" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 14 "github.com/go-openapi/loads" 15 "github.com/go-openapi/runtime/middleware" 16 17 "github.com/thetreep/go-swagger/fixtures/bugs/1472/restapi" 18 "github.com/thetreep/go-swagger/fixtures/bugs/1472/restapi/operations" 19 "github.com/thetreep/go-swagger/fixtures/bugs/1472/restapi/operations/ops" 20 ) 21 22 type User struct { 23 ID string 24 } 25 26 func TestGenServer_1472_securityFromPrincipal_middleware(t *testing.T) { 27 swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON) 28 if err != nil { 29 log.Fatalln(err) 30 } 31 api := operations.NewMyAPI(swaggerSpec) 32 api.OpBearerAuth = func(token string) (interface{}, error) { 33 // Return the same user for testing 34 return &User{ID: "someID"}, nil 35 } 36 api.OpsGetEndpointHandler = ops.GetEndpointHandlerFunc( 37 func(params ops.GetEndpointParams, principal interface{}) middleware.Responder { 38 return ops.NewGetEndpointOK() 39 }, 40 ) 41 42 apiHandler := api.Serve( 43 func(h http.Handler) http.Handler { 44 return http.HandlerFunc( 45 func(rw http.ResponseWriter, r *http.Request) { 46 assert.Nil(t, middleware.SecurityPrincipalFrom(r)) // Did not run through the handler yet! 47 h.ServeHTTP(rw, r) 48 assert.NotNil(t, middleware.SecurityPrincipalFrom(r)) // Should have the principal now! 49 assert.Equal(t, middleware.SecurityPrincipalFrom(r).(*User).ID, "someID") 50 }, 51 ) 52 }, 53 ) 54 55 ts := httptest.NewServer(apiHandler) 56 defer ts.Close() 57 58 request, err := http.NewRequest("GET", ts.URL+"/endpoint", nil) 59 assert.Nil(t, err) 60 request.Header.Add("Authorization", "Bearer sometoken") 61 62 response, err := http.DefaultClient.Do(request) 63 assert.Nil(t, err) 64 assert.Equal(t, response.StatusCode, http.StatusOK) 65 }