github.com/xmidt-org/webpa-common@v1.11.9/service/servicehttp/redirect_test.go (about)

     1  package servicehttp
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"testing"
     8  
     9  	gokithttp "github.com/go-kit/kit/transport/http"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  	"github.com/xmidt-org/webpa-common/logging"
    13  )
    14  
    15  func testRedirectNoRequestURI(t *testing.T, expectedRedirectCode, actualRedirectCode int) {
    16  	var (
    17  		assert  = assert.New(t)
    18  		require = require.New(t)
    19  
    20  		httpResponse = httptest.NewRecorder()
    21  	)
    22  
    23  	encoder := Redirect(actualRedirectCode)
    24  	require.NotNil(encoder)
    25  
    26  	err := encoder(
    27  		logging.WithLogger(context.Background(), logging.NewTestLogger(nil, t)),
    28  		httpResponse,
    29  		"http://somewhere.com:8080",
    30  	)
    31  
    32  	assert.NoError(err)
    33  	assert.Equal(expectedRedirectCode, httpResponse.Code)
    34  	assert.Equal("http://somewhere.com:8080", httpResponse.HeaderMap.Get("Location"))
    35  }
    36  
    37  func testRedirectWithRequestURI(t *testing.T, expectedRedirectCode, actualRedirectCode int) {
    38  	var (
    39  		assert  = assert.New(t)
    40  		require = require.New(t)
    41  
    42  		httpResponse = httptest.NewRecorder()
    43  	)
    44  
    45  	encoder := Redirect(actualRedirectCode)
    46  	require.NotNil(encoder)
    47  
    48  	err := encoder(
    49  		context.WithValue(
    50  			logging.WithLogger(context.Background(), logging.NewTestLogger(nil, t)),
    51  			gokithttp.ContextKeyRequestURI,
    52  			"/api/v2/device",
    53  		),
    54  		httpResponse,
    55  		"http://somewhere.com:8080",
    56  	)
    57  
    58  	assert.NoError(err)
    59  	assert.Equal(expectedRedirectCode, httpResponse.Code)
    60  	assert.Equal("http://somewhere.com:8080/api/v2/device", httpResponse.HeaderMap.Get("Location"))
    61  }
    62  
    63  func TestRedirect(t *testing.T) {
    64  	t.Run("NoRequestURI", func(t *testing.T) {
    65  		testRedirectNoRequestURI(t, http.StatusTemporaryRedirect, 0)
    66  		testRedirectNoRequestURI(t, http.StatusMovedPermanently, http.StatusMovedPermanently)
    67  	})
    68  
    69  	t.Run("WithRequestURI", func(t *testing.T) {
    70  		testRedirectWithRequestURI(t, http.StatusTemporaryRedirect, 0)
    71  		testRedirectWithRequestURI(t, http.StatusMovedPermanently, http.StatusMovedPermanently)
    72  	})
    73  }