github.com/go-swagger/go-swagger@v0.31.0/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/go-swagger/go-swagger/fixtures/bugs/1472/restapi"
    18  	"github.com/go-swagger/go-swagger/fixtures/bugs/1472/restapi/operations"
    19  	"github.com/go-swagger/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  	apiHandler := api.Serve(func(h http.Handler) http.Handler {
    42  		return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
    43  			assert.Nil(t, middleware.SecurityPrincipalFrom(r)) // Did not run through the handler yet!
    44  			h.ServeHTTP(rw, r)
    45  			assert.NotNil(t, middleware.SecurityPrincipalFrom(r)) // Should have the principal now!
    46  			assert.Equal(t, middleware.SecurityPrincipalFrom(r).(*User).ID, "someID")
    47  		})
    48  	})
    49  
    50  	ts := httptest.NewServer(apiHandler)
    51  	defer ts.Close()
    52  
    53  	request, err := http.NewRequest("GET", ts.URL+"/endpoint", nil)
    54  	assert.Nil(t, err)
    55  	request.Header.Add("Authorization", "Bearer sometoken")
    56  
    57  	response, err := http.DefaultClient.Do(request)
    58  	assert.Nil(t, err)
    59  	assert.Equal(t, response.StatusCode, http.StatusOK)
    60  }