Skip to content
187 changes: 53 additions & 134 deletions pkg/gofr/service/new_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,35 @@ import (
"gofr.dev/pkg/gofr/logging"
)

func validateResponse(t *testing.T, resp *http.Response, err error, hasError bool) {
t.Helper()

if resp != nil {
defer resp.Body.Close()
}

if hasError {
require.Error(t, err)
assert.Nil(t, resp, "TEST[%d], Failed.\n%s")

return
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST[%d], Failed.\n%s")
}

func newService(t *testing.T, server *httptest.Server) *httpService {
t.Helper()

return &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
}

func TestNewHTTPService(t *testing.T) {
tests := []struct {
desc string
Expand Down Expand Up @@ -117,24 +146,14 @@ func TestHTTPService_Get(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.Get(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}})

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_GetWithHeaders(t *testing.T) {
Expand All @@ -149,25 +168,15 @@ func TestHTTPService_GetWithHeaders(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.GetWithHeaders(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}},
map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_Put(t *testing.T) {
Expand All @@ -190,24 +199,14 @@ func TestHTTPService_Put(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.Put(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}}, []byte("{Test Body}"))

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_PutWithHeaders(t *testing.T) {
Expand All @@ -231,25 +230,15 @@ func TestHTTPService_PutWithHeaders(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.PutWithHeaders(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}}, []byte("{Test Body}"),
map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_Patch(t *testing.T) {
Expand All @@ -272,24 +261,14 @@ func TestHTTPService_Patch(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.Patch(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}}, []byte("{Test Body}"))

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_PatchWithHeaders(t *testing.T) {
Expand All @@ -303,7 +282,7 @@ func TestHTTPService_PatchWithHeaders(t *testing.T) {
t.Fatal("Unable to read request body")
}

assert.Equal(t, http.MethodPut, r.Method)
assert.Equal(t, http.MethodPatch, r.Method)
assert.Equal(t, "/test-path", r.URL.Path)
assert.Equal(t, "key=value&name=gofr&name=test", r.URL.RawQuery)
assert.Contains(t, "value1", r.Header.Get("Header1"))
Expand All @@ -313,25 +292,15 @@ func TestHTTPService_PatchWithHeaders(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.PutWithHeaders(t.Context(), "test-path",
resp, err := service.PatchWithHeaders(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}}, []byte("{Test Body}"),
map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_Post(t *testing.T) {
Expand All @@ -354,24 +323,14 @@ func TestHTTPService_Post(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.Post(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}}, []byte("{Test Body}"))

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_PostWithHeaders(t *testing.T) {
Expand All @@ -395,25 +354,15 @@ func TestHTTPService_PostWithHeaders(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.PostWithHeaders(t.Context(), "test-path",
map[string]any{"key": "value", "name": []string{"gofr", "test"}}, []byte("{Test Body}"),
map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_Delete(t *testing.T) {
Expand All @@ -435,23 +384,13 @@ func TestHTTPService_Delete(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.Delete(t.Context(), "test-path", []byte("{Test Body}"))

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_DeleteWithHeaders(t *testing.T) {
Expand All @@ -474,24 +413,14 @@ func TestHTTPService_DeleteWithHeaders(t *testing.T) {
}))
defer server.Close()

service := &httpService{
Client: http.DefaultClient,
url: server.URL,
Tracer: otel.Tracer("gofr-http-client"),
Logger: logging.NewMockLogger(logging.INFO),
}
service := newService(t, server)

// TODO : Nil Correlation ID is coming in logs, it has to be fixed

resp, err := service.DeleteWithHeaders(t.Context(), "test-path", []byte("{Test Body}"),
map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.NoError(t, err)
assert.NotNil(t, resp, "TEST, Failed.")
validateResponse(t, resp, err, false)
}

func TestHTTPService_createAndSendRequestCreateRequestFailure(t *testing.T) {
Expand All @@ -507,12 +436,7 @@ func TestHTTPService_createAndSendRequestCreateRequestFailure(t *testing.T) {
"!@#$", "test-path", map[string]any{"key": "value", "name": []string{"gofr", "test"}},
[]byte("{Test Body}"), map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.Error(t, err)
assert.Nil(t, resp, "TEST[%d], Failed.\n%s")
validateResponse(t, resp, err, true)
}

func TestHTTPService_createAndSendRequestServerError(t *testing.T) {
Expand All @@ -536,10 +460,5 @@ func TestHTTPService_createAndSendRequestServerError(t *testing.T) {
http.MethodPost, "test-path", map[string]any{"key": "value", "name": []string{"gofr", "test"}},
[]byte("{Test Body}"), map[string]string{"header1": "value1"})

if resp != nil {
defer resp.Body.Close()
}

require.Error(t, err)
assert.Nil(t, resp, "TEST[%d], Failed.\n%s")
validateResponse(t, resp, err, true)
}
Loading