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  }