github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/models/result_test.go (about) 1 package models 2 3 import ( 4 "fmt" 5 "net/http" 6 "net/http/httptest" 7 "testing" 8 9 "github.com/gin-gonic/gin" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 var keysParameters = []ModelTestParameter{ 14 {Input: GetBoletoResult{Id: "", PublicKey: ""}, Expected: false}, 15 {Input: GetBoletoResult{Id: "123", PublicKey: ""}, Expected: false}, 16 {Input: GetBoletoResult{Id: "", PublicKey: "123"}, Expected: false}, 17 {Input: GetBoletoResult{Id: "111", PublicKey: "111"}, Expected: true}, 18 {Input: GetBoletoResult{Id: "94b29fa5433a26d5d2=3e903", PublicKey: "ad29db446917b1453b1fcac6397fd1af87dcbfcda22095317c0531cfee9d0=d5"}, Expected: false}, 19 {Input: GetBoletoResult{Id: "94b29fa5433a26d5d213e903", PublicKey: "ad29db446917b1453b1fcac6397fd1af87dcbfcda22095317c0531cfee9d0=d5"}, Expected: false}, 20 {Input: GetBoletoResult{Id: "94b29fa5433a26d5d2=3e903", PublicKey: "ad29db446917b1453b1fcac6397fd1af87dcbfcda22095317c0531cfee9d01d5"}, Expected: false}, 21 {Input: GetBoletoResult{Id: "94b29fa5433a26d5d213e903", PublicKey: "ad29db446917b1453b1fcac6397fd1af87dcbfcda22095317c0531cfee9d01d5"}, Expected: true}, 22 } 23 24 func TestNewGetBoletoResult_WhenCalled_CreateNewGetBoletoResultSuccessful(t *testing.T) { 25 expectedId := "60a56171ea46f83aecb67af9" 26 expectedPk := "855a960c435a01863ad13c71d988e56e1f3931980a749b2a69ac982b7e03d16c" 27 expectedFormat := "html" 28 expectedSource := "none" 29 expectedUri := fmt.Sprintf("/boleto?fmt=%s&id=%s&pk=%s", expectedFormat, expectedId, expectedPk) 30 url := fmt.Sprintf("http://localhost:3000/boleto?fmt=%s&id=%s&pk=%s", expectedFormat, expectedId, expectedPk) 31 32 w := httptest.NewRecorder() 33 c, _ := gin.CreateTestContext(w) 34 c.Request, _ = http.NewRequest(http.MethodGet, url, nil) 35 c.Request.RequestURI = expectedUri 36 37 r := NewGetBoletoResult(c) 38 39 assert.Equal(t, expectedId, r.Id, "O id deve ser igual ao do contexto") 40 assert.Equal(t, expectedPk, r.PublicKey, "A pk deve ser igual ao do contexto") 41 assert.Equal(t, expectedFormat, r.Format, "O formato deve ser igual ao do contexto") 42 assert.Equal(t, expectedUri, r.URI, "A uri deve ser igual ao do contexto") 43 assert.Equal(t, expectedSource, r.BoletoSource, "O source deve ser none") 44 } 45 46 func TestHasValidKey_WhenCalled_CheckQueryParametersSuccessful(t *testing.T) { 47 for _, fact := range keysParameters { 48 input := fact.Input.(GetBoletoResult) 49 result := input.HasValidParameters() 50 assert.Equal(t, fact.Expected.(bool), result, fmt.Sprintf("Os parametros não foram validados corretamente: %v", input)) 51 } 52 } 53 54 func TestSetErrorResponse_WhenNotFoundOccurs_ShouldBeGeneratedWarningError(t *testing.T) { 55 w := httptest.NewRecorder() 56 c, _ := gin.CreateTestContext(w) 57 var r GetBoletoResult 58 59 expectedError := NewErrorResponse("MP404", "Not Found") 60 expectedStatusCode := 404 61 62 r.SetErrorResponse(c, expectedError, expectedStatusCode) 63 64 assert.Equal(t, expectedStatusCode, c.Writer.Status(), "O StausCode deve ser mapeado para o contexto corretamente") 65 assert.NotEmpty(t, r.ErrorResponse.Errors, "O result deve conter um objeto de erro") 66 assert.Equal(t, expectedError.Code, r.ErrorResponse.Errors[0].Code, "O erro code deverá ser mapeado corretamente") 67 assert.Equal(t, expectedError.Message, r.ErrorResponse.Errors[0].Message, "O erro message deverá ser mapeado corretamente") 68 } 69 70 func TestSetErrorResponse_WhenInternalErrosOccurs_ShouldBeGeneratedError(t *testing.T) { 71 w := httptest.NewRecorder() 72 c, _ := gin.CreateTestContext(w) 73 var r GetBoletoResult 74 75 expectedError := NewErrorResponse("MP500", "Internal Error") 76 expectedStatusCode := 500 77 78 r.SetErrorResponse(c, expectedError, expectedStatusCode) 79 80 assert.Equal(t, expectedStatusCode, c.Writer.Status(), "O StausCode deve ser mapeado para o contexto corretamente") 81 assert.NotEmpty(t, r.ErrorResponse.Errors, "O result deve conter um objeto de erro") 82 assert.Equal(t, expectedError.Code, r.ErrorResponse.Errors[0].Code, "O erro code deverá ser mapeado corretamente") 83 assert.Equal(t, expectedError.Message, r.ErrorResponse.Errors[0].Message, "O erro message deverá ser mapeado corretamente") 84 }