github.com/kumasuke120/mockuma@v1.1.9/internal/server/handler_test.go (about)

     1  package server
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestMockHandler_ServeHTTP(t *testing.T) {
    15  	//noinspection GoImportUsedAsName
    16  	assert := assert.New(t)
    17  
    18  	handlers := []http.Handler{newMockHandler(mappings), newMockHandler(mappingsWithCORS)}
    19  
    20  	for _, handler := range handlers {
    21  		req1 := httptest.NewRequest("POST", "/hello", nil)
    22  		rr1 := httptest.NewRecorder()
    23  		handler.ServeHTTP(rr1, req1)
    24  		assert.Equal(http.StatusOK, rr1.Code)
    25  
    26  		req2 := httptest.NewRequest("", "/hello", nil)
    27  		rr2 := httptest.NewRecorder()
    28  		handler.ServeHTTP(rr2, req2)
    29  		assert.Equal(http.StatusMethodNotAllowed, rr2.Code)
    30  
    31  		req3 := httptest.NewRequest("", "/notfound", nil)
    32  		rr3 := httptest.NewRecorder()
    33  		handler.ServeHTTP(rr3, req3)
    34  		assert.Equal(http.StatusNotFound, rr3.Code)
    35  
    36  		req4 := httptest.NewRequest("", "/m", nil)
    37  		rr4 := httptest.NewRecorder()
    38  		handler.ServeHTTP(rr4, req4)
    39  		assert.Equal(http.StatusBadRequest, rr4.Code)
    40  
    41  		req5 := httptest.NewRequest("POST", "/m", strings.NewReader("120"))
    42  		rr5 := httptest.NewRecorder()
    43  		handler.ServeHTTP(rr5, req5)
    44  		assert.Equal(http.StatusOK, rr5.Code)
    45  		assert.Equal("TEST/v1", rr5.Header().Get("Server"))
    46  
    47  		req6 := httptest.NewRequest("GET", "/m?p1=v1&p2=v1&p2=v2", nil)
    48  		rr6 := httptest.NewRecorder()
    49  		handler.ServeHTTP(rr6, req6)
    50  		assert.Equal(http.StatusBadGateway, rr6.Code)
    51  	}
    52  
    53  	req7 := httptest.NewRequest("OPTIONS", "/m", nil)
    54  	req7.Header.Add("Origin", "https://www.example.com")
    55  	req7.Header.Add("Access-Control-Request-Method", "GET")
    56  	rr7 := httptest.NewRecorder()
    57  	handlers[1].ServeHTTP(rr7, req7)
    58  	fmt.Println(rr7.Header())
    59  	assert.Equal("1800", rr7.Header().Get("Access-Control-Max-Age"))
    60  	assert.Equal("https://www.example.com", rr7.Header().Get("Access-Control-Allow-Origin"))
    61  }
    62  
    63  func TestMockHandler_handleExecuteError(t *testing.T) {
    64  	//noinspection GoImportUsedAsName
    65  	assert := assert.New(t)
    66  
    67  	handler := newMockHandler(mappings).(*mockHandler)
    68  
    69  	req1 := httptest.NewRequest("GET", "/", nil)
    70  	rr1 := httptest.NewRecorder()
    71  	handler.handleExecuteError(rr1, req1, &forwardError{err: errors.New("test")})
    72  	assert.Equal(http.StatusBadGateway, rr1.Code)
    73  
    74  	req2 := httptest.NewRequest("GET", "/", nil)
    75  	rr2 := httptest.NewRecorder()
    76  	handler.handleExecuteError(rr2, req2, errors.New("test"))
    77  	assert.Equal(http.StatusInternalServerError, rr2.Code)
    78  }
    79  
    80  func TestMockHandler_listAllMappings(t *testing.T) {
    81  	handler := newMockHandler(mappings).(*mockHandler)
    82  	handler.listAllMappings()
    83  }