diff --git a/domain/apiresponses/failure_responses.go b/domain/apiresponses/failure_responses.go index 436d43b4..cce32839 100644 --- a/domain/apiresponses/failure_responses.go +++ b/domain/apiresponses/failure_responses.go @@ -18,11 +18,11 @@ type FailureResponse struct { errorKey string } -// NewFailureResponse returns a pointer to a new instance of FailureResponse. +// NewFailureResponse returns an error of type FailureResponse. // err will by default be used as both a logging message and HTTP response description. // statusCode is the HTTP status code to be returned, must be 4xx or 5xx // loggerAction is a short description which will be used as the action if the error is logged. -func NewFailureResponse(err error, statusCode int, loggerAction string) *FailureResponse { +func NewFailureResponse(err error, statusCode int, loggerAction string) error { return &FailureResponse{ error: err, statusCode: statusCode, diff --git a/domain/apiresponses/failure_responses_test.go b/domain/apiresponses/failure_responses_test.go index ef6d1af3..90b76b8c 100644 --- a/domain/apiresponses/failure_responses_test.go +++ b/domain/apiresponses/failure_responses_test.go @@ -15,7 +15,7 @@ import ( var _ = Describe("FailureResponse", func() { Describe("ErrorResponse", func() { It("returns a ErrorResponse containing the error message", func() { - failureResponse := apiresponses.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key") + failureResponse := asFailureResponse(apiresponses.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key")) Expect(failureResponse.ErrorResponse()).To(Equal(apiresponses.ErrorResponse{ Description: "my error message", })) @@ -71,7 +71,7 @@ var _ = Describe("FailureResponse", func() { Describe("ValidatedStatusCode", func() { It("returns the status code that was passed in", func() { - failureResponse := apiresponses.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key") + failureResponse := asFailureResponse(apiresponses.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key")) Expect(failureResponse.ValidatedStatusCode(nil)).To(Equal(http.StatusForbidden)) }) @@ -82,7 +82,7 @@ var _ = Describe("FailureResponse", func() { Context("when the status code is invalid", func() { It("returns 500", func() { - failureResponse := apiresponses.NewFailureResponse(errors.New("my error message"), 600, "log-key") + failureResponse := asFailureResponse(apiresponses.NewFailureResponse(errors.New("my error message"), 600, "log-key")) Expect(failureResponse.ValidatedStatusCode(nil)).To(Equal(http.StatusInternalServerError)) }) @@ -90,7 +90,7 @@ var _ = Describe("FailureResponse", func() { log := gbytes.NewBuffer() logger := lager.NewLogger("test") logger.RegisterSink(lager.NewWriterSink(log, lager.DEBUG)) - failureResponse := apiresponses.NewFailureResponse(errors.New("my error message"), 600, "log-key") + failureResponse := asFailureResponse(apiresponses.NewFailureResponse(errors.New("my error message"), 600, "log-key")) failureResponse.ValidatedStatusCode(logger) Expect(log).To(gbytes.Say("Invalid failure http response code: 600, expected 4xx or 5xx, returning internal server error: 500.")) }) @@ -104,8 +104,14 @@ var _ = Describe("FailureResponse", func() { }) It("when error key is provided it returns the logger action that was passed in", func() { - failureResponse := apiresponses.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key") + failureResponse := asFailureResponse(apiresponses.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key")) Expect(failureResponse.LoggerAction()).To(Equal("log-key")) }) }) }) + +func asFailureResponse(err error) *apiresponses.FailureResponse { + GinkgoHelper() + Expect(err).To(BeAssignableToTypeOf(&apiresponses.FailureResponse{})) + return err.(*apiresponses.FailureResponse) +} diff --git a/failure_response.go b/failure_response.go index b2dd463c..11bcb600 100644 --- a/failure_response.go +++ b/failure_response.go @@ -17,12 +17,12 @@ import ( type FailureResponse = apiresponses.FailureResponse // Deprecated: Use github.com/pivotal-cf/brokerapi/domain/apiresponses -// NewFailureResponse returns a pointer to a new instance of FailureResponse. +// NewFailureResponse returns an error of type FailureResponse. // err will by default be used as both a logging message and HTTP response description. // statusCode is the HTTP status code to be returned, must be 4xx or 5xx // loggerAction is a short description which will be used as the action if the error is logged. -func NewFailureResponse(err error, statusCode int, loggerAction string) *FailureResponse { - return (*FailureResponse)(apiresponses.NewFailureResponse(err, statusCode, loggerAction)) +func NewFailureResponse(err error, statusCode int, loggerAction string) error { + return apiresponses.NewFailureResponse(err, statusCode, loggerAction) } // Deprecated: Use github.com/pivotal-cf/brokerapi/domain/apiresponses diff --git a/failure_response_test.go b/failure_response_test.go index 7e1661c9..65e3a0fa 100644 --- a/failure_response_test.go +++ b/failure_response_test.go @@ -17,6 +17,7 @@ package brokerapi_test import ( "github.com/pivotal-cf/brokerapi/v10" + "github.com/pivotal-cf/brokerapi/v10/domain/apiresponses" "errors" @@ -31,7 +32,7 @@ import ( var _ = Describe("FailureResponse", func() { Describe("ErrorResponse", func() { It("returns a ErrorResponse containing the error message", func() { - failureResponse := brokerapi.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key") + failureResponse := asFailureResponse(brokerapi.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key")) Expect(failureResponse.ErrorResponse()).To(Equal(brokerapi.ErrorResponse{ Description: "my error message", })) @@ -39,7 +40,7 @@ var _ = Describe("FailureResponse", func() { Context("when the error key is provided", func() { It("returns a ErrorResponse containing the error message and the error key", func() { - failureResponse := brokerapi.NewFailureResponseBuilder(errors.New("my error message"), http.StatusForbidden, "log-key").WithErrorKey("error key").Build() + failureResponse := asFailureResponse(brokerapi.NewFailureResponseBuilder(errors.New("my error message"), http.StatusForbidden, "log-key").WithErrorKey("error key").Build()) Expect(failureResponse.ErrorResponse()).To(Equal(brokerapi.ErrorResponse{ Description: "my error message", Error: "error key", @@ -87,7 +88,7 @@ var _ = Describe("FailureResponse", func() { Describe("ValidatedStatusCode", func() { It("returns the status code that was passed in", func() { - failureResponse := brokerapi.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key") + failureResponse := asFailureResponse(brokerapi.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key")) Expect(failureResponse.ValidatedStatusCode(nil)).To(Equal(http.StatusForbidden)) }) @@ -98,7 +99,7 @@ var _ = Describe("FailureResponse", func() { Context("when the status code is invalid", func() { It("returns 500", func() { - failureResponse := brokerapi.NewFailureResponse(errors.New("my error message"), 600, "log-key") + failureResponse := asFailureResponse(brokerapi.NewFailureResponse(errors.New("my error message"), 600, "log-key")) Expect(failureResponse.ValidatedStatusCode(nil)).To(Equal(http.StatusInternalServerError)) }) @@ -106,7 +107,7 @@ var _ = Describe("FailureResponse", func() { log := gbytes.NewBuffer() logger := lager.NewLogger("test") logger.RegisterSink(lager.NewWriterSink(log, lager.DEBUG)) - failureResponse := brokerapi.NewFailureResponse(errors.New("my error message"), 600, "log-key") + failureResponse := asFailureResponse(brokerapi.NewFailureResponse(errors.New("my error message"), 600, "log-key")) failureResponse.ValidatedStatusCode(logger) Expect(log).To(gbytes.Say("Invalid failure http response code: 600, expected 4xx or 5xx, returning internal server error: 500.")) }) @@ -120,8 +121,14 @@ var _ = Describe("FailureResponse", func() { }) It("when error key is provided it returns the logger action that was passed in", func() { - failureResponse := brokerapi.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key") + failureResponse := asFailureResponse(brokerapi.NewFailureResponse(errors.New("my error message"), http.StatusForbidden, "log-key")) Expect(failureResponse.LoggerAction()).To(Equal("log-key")) }) }) }) + +func asFailureResponse(err error) *apiresponses.FailureResponse { + GinkgoHelper() + Expect(err).To(BeAssignableToTypeOf(&apiresponses.FailureResponse{})) + return err.(*apiresponses.FailureResponse) +}