mirror of
https://github.com/NotAShelf/tct.git
synced 2024-11-01 11:01:19 +00:00
63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
type MockHttpClient struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockHttpClient) Get(url string) (*http.Response, error) {
|
|
args := m.Called(url)
|
|
return args.Get(0).(*http.Response), args.Error(1)
|
|
}
|
|
|
|
func TestMakeRequest(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
statusCode int
|
|
responseBody string
|
|
expectedError error
|
|
}{
|
|
{
|
|
name: "Successful request",
|
|
statusCode: http.StatusOK,
|
|
responseBody: "OK",
|
|
},
|
|
{
|
|
name: "Failed request",
|
|
statusCode: http.StatusInternalServerError,
|
|
responseBody: "",
|
|
expectedError: errors.New("request failed"),
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
mockClient := new(MockHttpClient)
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(tt.statusCode)
|
|
w.Write([]byte(tt.responseBody))
|
|
}))
|
|
defer server.Close()
|
|
|
|
mockClient.On("Get", server.URL).Return(&http.Response{
|
|
StatusCode: tt.statusCode,
|
|
Body: io.NopCloser(bytes.NewBufferString(tt.responseBody)),
|
|
}, tt.expectedError)
|
|
|
|
makeRequest(mockClient, server.URL)
|
|
|
|
mockClient.AssertExpectations(t)
|
|
})
|
|
}
|
|
}
|