github.com/AngusLu/go-swagger@v0.28.0/fixtures/bugs/1472/middleware_test.go (about)

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