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  }