github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/itau/itau_test.go (about)

     1  package itau
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/mundipagg/boleto-api/mock"
     7  	"github.com/mundipagg/boleto-api/models"
     8  	"github.com/mundipagg/boleto-api/test"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  var boletoTypeParameters = []test.Parameter{
    13  	{Input: models.Title{BoletoType: ""}, Expected: "01"},
    14  	{Input: models.Title{BoletoType: "NSA"}, Expected: "01"},
    15  	{Input: models.Title{BoletoType: "BDP"}, Expected: "18"},
    16  	{Input: models.Title{BoletoType: "DM"}, Expected: "01"},
    17  	{Input: models.Title{BoletoType: "DS"}, Expected: "08"},
    18  	{Input: models.Title{BoletoType: "NP"}, Expected: "02"},
    19  	{Input: models.Title{BoletoType: "RC"}, Expected: "05"},
    20  	{Input: models.Title{BoletoType: "OUT"}, Expected: "99"},
    21  }
    22  
    23  func TestProcessBoleto_WhenServiceRespondsSuccessfully_ShouldHasSuccessfulBoletoResponse(t *testing.T) {
    24  	mock.StartMockService("9041")
    25  	input := newStubBoletoRequestItau().Build()
    26  	bank := New()
    27  
    28  	output, _ := bank.ProcessBoleto(input)
    29  
    30  	test.AssertProcessBoletoWithSuccess(t, output)
    31  }
    32  
    33  func TestProcessBoleto_WhenServiceRespondsFailed_ShouldHasFailedBoletoResponse(t *testing.T) {
    34  	mock.StartMockService("9039")
    35  	input := newStubBoletoRequestItau().WithAmountInCents(400).Build()
    36  
    37  	bank := New()
    38  
    39  	output, err := bank.ProcessBoleto(input)
    40  
    41  	assert.Nil(t, err, "Não deve haver um erro")
    42  	test.AssertProcessBoletoFailed(t, output)
    43  }
    44  
    45  func TestProcessBoleto_WhenServiceRespondsFailedWithWrongContentAndStatusCodeIs500_ShouldHasFailedBoletoResponseWithWrongContentAndStatusCodeIs500(t *testing.T) {
    46  	mock.StartMockService("9040")
    47  	input := newStubBoletoRequestItau().WithAmountInCents(500).Build()
    48  
    49  	bank := New()
    50  
    51  	_, errProcessBoleto := bank.ProcessBoleto(input)
    52  
    53  	test.AssertError(t, errProcessBoleto, models.BadGatewayError{})
    54  }
    55  
    56  func TestProcessBoleto_WhenRequestHasInvalidAccountParameters_ShouldHasFailedBoletoResponse(t *testing.T) {
    57  	mock.StartMockService("9037")
    58  	input := newStubBoletoRequestItau().WithAmountInCents(200).WithAgreementAccount("").Build()
    59  
    60  	bank := New()
    61  
    62  	output, _ := bank.ProcessBoleto(input)
    63  
    64  	test.AssertProcessBoletoFailed(t, output)
    65  }
    66  
    67  func TestProcessBoleto_WhenRequestHasInvalidUserNameParameter_ShouldHasFailedBoletoResponse(t *testing.T) {
    68  	mock.StartMockService("9038")
    69  	input := newStubBoletoRequestItau().WithAuthenticationUserName("").WithAmountInCents(200).Build()
    70  
    71  	bank := New()
    72  
    73  	_, err := bank.ProcessBoleto(input)
    74  
    75  	assert.NotNil(t, err, "Deve ocorrer um erro")
    76  }
    77  
    78  func TestGetBoletoType_WhenCalled_ShouldBeMapTypeSuccessful(t *testing.T) {
    79  	request := newStubBoletoRequestItau().Build()
    80  	for _, fact := range boletoTypeParameters {
    81  		request.Title = fact.Input.(models.Title)
    82  		_, result := getBoletoType(request)
    83  		assert.Equal(t, fact.Expected, result, "Deve mapear o boleto type corretamente")
    84  	}
    85  }
    86  
    87  func TestTemplateResponse_WhenRequestHasSpecialCharacter_ShouldBeParsedSuccessful(t *testing.T) {
    88  	mock.StartMockService("9042")
    89  	input := newStubBoletoRequestItau().WithBuyerName("Usuario \tTeste").Build()
    90  	bank := New()
    91  
    92  	output, _ := bank.ProcessBoleto(input)
    93  
    94  	test.AssertProcessBoletoWithSuccess(t, output)
    95  }