github.com/xmidt-org/webpa-common@v1.11.9/bookkeeping/bookkeeper_test.go (about)

     1  package bookkeeping
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"testing"
     7  
     8  	gokithttp "github.com/go-kit/kit/transport/http"
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  	"github.com/xmidt-org/webpa-common/logging"
    12  	"github.com/xmidt-org/webpa-common/logging/logginghttp"
    13  	"github.com/xmidt-org/webpa-common/xhttp/xcontext"
    14  )
    15  
    16  func TestEmptyBookkeeper(t *testing.T) {
    17  	var (
    18  		assert           = assert.New(t)
    19  		require          = require.New(t)
    20  		transactorCalled = false
    21  
    22  		bookkeeper = New()
    23  		logger     = logging.NewCaptureLogger()
    24  	)
    25  	require.NotNil(bookkeeper)
    26  	req := httptest.NewRequest("GET", "/", nil)
    27  	req = req.WithContext(logging.WithLogger(req.Context(), logger))
    28  
    29  	handler := http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
    30  		transactorCalled = true
    31  		writer.Write([]byte("payload"))
    32  		writer.WriteHeader(200)
    33  	})
    34  	rr := httptest.NewRecorder()
    35  
    36  	bookkeeper(handler).ServeHTTP(rr, req)
    37  	assert.True(transactorCalled)
    38  
    39  	select {
    40  	case result := <-logger.Output():
    41  		assert.Len(result, 4)
    42  	default:
    43  		assert.Fail("CaptureLogger must capture something")
    44  
    45  	}
    46  }
    47  
    48  func TestBookkeeper(t *testing.T) {
    49  	var (
    50  		assert           = assert.New(t)
    51  		require          = require.New(t)
    52  		transactorCalled = false
    53  
    54  		bookkeeper = New(WithResponses(Code))
    55  		logger     = logging.NewCaptureLogger()
    56  	)
    57  
    58  	require.NotNil(bookkeeper)
    59  	req := httptest.NewRequest("GET", "/", nil)
    60  
    61  	req = req.WithContext(logging.WithLogger(req.Context(), logger))
    62  
    63  	rr := httptest.NewRecorder()
    64  
    65  	customLogInfo := xcontext.Populate(
    66  		logginghttp.SetLogger(logger,
    67  			logginghttp.RequestInfo,
    68  		),
    69  		gokithttp.PopulateRequestContext,
    70  	)
    71  
    72  	handler := http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
    73  		transactorCalled = true
    74  		writer.Write([]byte("payload"))
    75  		writer.WriteHeader(200)
    76  	})
    77  
    78  	bookkeeper(customLogInfo(handler)).ServeHTTP(rr, req)
    79  
    80  	assert.True(transactorCalled)
    81  
    82  	select {
    83  	case result := <-logger.Output():
    84  		assert.Len(result, 8)
    85  		assert.Equal(req.RequestURI, result["requestURI"])
    86  		assert.Equal(200, result["code"])
    87  	default:
    88  		assert.Fail("CaptureLogger must capture something")
    89  
    90  	}
    91  }