github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/api/boleto_test.go (about) 1 package api 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "net/http/httptest" 7 "os" 8 "testing" 9 10 "github.com/gin-gonic/gin" 11 "github.com/mundipagg/boleto-api/config" 12 "github.com/mundipagg/boleto-api/models" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestGetBoleto_WhenInvalidKeys_ShouldReturnNotFound(t *testing.T) { 17 expected := models.ErrorResponse{Code: "MP404", Message: "Not Found"} 18 19 c, r, w := arrangeGetBoleto() 20 url := "http://localhost:3000/boleto?fmt=html&pk=1234567890" 21 c.Request, _ = http.NewRequest(http.MethodGet, url, nil) 22 23 r.ServeHTTP(w, c.Request) 24 25 var response models.BoletoResponse 26 err := json.Unmarshal(w.Body.Bytes(), &response) 27 28 assert.Nil(t, err) 29 assert.Equal(t, 404, w.Code) 30 assert.Equal(t, 1, len(response.Errors)) 31 assert.Equal(t, expected.Code, response.Errors[0].Code, "O erro code deverá ser mapeado corretamente") 32 assert.Equal(t, expected.Message, response.Errors[0].Message, "O erro message deverá ser mapeado corretamente") 33 34 } 35 36 func TestGetBoleto_WhenFail_ShouldReturnInternalError(t *testing.T) { 37 expected := models.ErrorResponse{Code: "MP500", Message: "Internal Error"} 38 39 c, r, w := arrangeGetBoleto() 40 url := "http://localhost:3000/boleto?fmt=html&id=1234567890&pk=1234567890" 41 c.Request, _ = http.NewRequest(http.MethodGet, url, nil) 42 43 r.ServeHTTP(w, c.Request) 44 45 var response models.BoletoResponse 46 err := json.Unmarshal(w.Body.Bytes(), &response) 47 48 assert.Nil(t, err) 49 assert.Equal(t, 500, w.Code) 50 assert.Equal(t, 1, len(response.Errors)) 51 assert.Equal(t, expected.Code, response.Errors[0].Code, "O erro code deverá ser mapeado corretamente") 52 assert.Equal(t, expected.Message, response.Errors[0].Message, "O erro message deverá ser mapeado corretamente") 53 } 54 55 func Test_GetBoletoConfirmation_ReturnOkSuccessful(t *testing.T) { 56 router := mockInstallApi() 57 58 w := httptest.NewRecorder() 59 req, _ := http.NewRequest("GET", "/boleto/confirmation", nil) 60 61 router.ServeHTTP(w, req) 62 63 assert.Equal(t, 200, w.Code) 64 assert.Equal(t, "OK", w.Body.String()) 65 } 66 67 func Test_setupGetBoletoSuccessResponse(t *testing.T) { 68 c, _, _ := arrangeGetBoleto() 69 url := "http://localhost:3000/boleto?fmt=html&id=1234567890&pk=1234567890" 70 c.Request, _ = http.NewRequest(http.MethodGet, url, nil) 71 72 expectedResult := models.NewGetBoletoResult(c) 73 74 setupGetBoletoSuccessResponse(c, expectedResult) 75 76 assert.Equal(t, http.StatusOK, c.Writer.Status(), "O status deve ser 200 - OK") 77 assert.Equal(t, "Information", expectedResult.LogSeverity, "O severity log deve ser Information") 78 assert.Equal(t, expectedResult, getResultFromContext(c), "O objeto result deverá estar no contexto") 79 } 80 81 func Test_PostBoletoConfirmation_ReturnOkSuccessful(t *testing.T) { 82 router := mockInstallApi() 83 84 w := httptest.NewRecorder() 85 req, _ := http.NewRequest("POST", "/boleto/confirmation", nil) 86 87 router.ServeHTTP(w, req) 88 89 assert.Equal(t, 200, w.Code) 90 assert.Equal(t, "OK", w.Body.String()) 91 } 92 93 func arrangeGetBoleto() (*gin.Context, *gin.Engine, *httptest.ResponseRecorder) { 94 os.Clearenv() 95 gin.SetMode(gin.TestMode) 96 config.Install(true, false, true) 97 w := httptest.NewRecorder() 98 c, r := gin.CreateTestContext(w) 99 r.GET("/boleto", getBoleto) 100 return c, r, w 101 }