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

     1  package bank
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/mundipagg/boleto-api/bank/services/jpmorgan"
     7  	"github.com/mundipagg/boleto-api/bb"
     8  	"github.com/mundipagg/boleto-api/bradescoNetEmpresa"
     9  	"github.com/mundipagg/boleto-api/bradescoShopFacil"
    10  	"github.com/mundipagg/boleto-api/caixa"
    11  	"github.com/mundipagg/boleto-api/citibank"
    12  	"github.com/mundipagg/boleto-api/env"
    13  	"github.com/mundipagg/boleto-api/itau"
    14  	"github.com/mundipagg/boleto-api/models"
    15  	"github.com/mundipagg/boleto-api/pefisa"
    16  	"github.com/mundipagg/boleto-api/santander"
    17  	"github.com/mundipagg/boleto-api/stone"
    18  
    19  	"github.com/stretchr/testify/assert"
    20  )
    21  
    22  type dataTest struct {
    23  	request    models.BoletoRequest
    24  	bankNumber models.BankNumber
    25  	bank       Bank
    26  }
    27  
    28  var bradescoNetEmpresaInstance = bradescoNetEmpresa.New()
    29  var bradescoShopFacilInstance = bradescoShopFacil.New()
    30  var bancoDoBrasilInstance = bb.New()
    31  var citibankInstance, _ = citibank.New()
    32  var santanderInstance, _ = santander.New()
    33  var itauInstance = itau.New()
    34  var caixaInstance = caixa.New()
    35  var pefisaInstance = pefisa.New()
    36  var stoneInstance = stone.New()
    37  var jpInstanceInstance, _ = jpmorgan.New()
    38  
    39  var getBankTestData = []dataTest{
    40  	{models.BoletoRequest{BankNumber: models.Bradesco, Agreement: models.Agreement{Wallet: 9}}, models.Bradesco, bradescoNetEmpresaInstance},
    41  	{models.BoletoRequest{BankNumber: models.Bradesco, Agreement: models.Agreement{Wallet: 25}}, models.Bradesco, bradescoShopFacilInstance},
    42  	{models.BoletoRequest{BankNumber: models.BancoDoBrasil}, models.BancoDoBrasil, bancoDoBrasilInstance},
    43  	{models.BoletoRequest{BankNumber: models.Citibank}, models.Citibank, citibankInstance},
    44  	{models.BoletoRequest{BankNumber: models.Santander}, models.Santander, santanderInstance},
    45  	{models.BoletoRequest{BankNumber: models.Itau}, models.Itau, itauInstance},
    46  	{models.BoletoRequest{BankNumber: models.Caixa}, models.Caixa, caixaInstance},
    47  	{models.BoletoRequest{BankNumber: models.Pefisa}, models.Pefisa, pefisaInstance},
    48  	{models.BoletoRequest{BankNumber: models.Stone}, models.Stone, stoneInstance},
    49  	{models.BoletoRequest{BankNumber: models.JPMorgan}, models.JPMorgan, jpInstanceInstance},
    50  }
    51  
    52  func TestShouldExecuteBankStrategy(t *testing.T) {
    53  	env.Config(true, true, true)
    54  	for _, fact := range getBankTestData {
    55  		bank, err := Get(fact.request)
    56  		number := bank.GetBankNumber()
    57  		assert.Nil(t, err, "Não deve haver erro")
    58  		assert.True(t, number.IsBankNumberValid(), "Deve ser um banco válido")
    59  		assert.Equal(t, fact.bankNumber, number, "Deve conter o bankNumber correto")
    60  		assert.IsType(t, fact.bank, bank, "Deve ter instaciado o banco correto")
    61  	}
    62  }
    63  
    64  func TestGetBank_WhenInvalidBank_ReturnError(t *testing.T) {
    65  	request := models.BoletoRequest{BankNumber: 0}
    66  
    67  	result, err := Get(request)
    68  
    69  	assert.Nil(t, result, "Não deve haver banco")
    70  	assert.NotNil(t, err, "Deve haver erro")
    71  	assert.Equal(t, err.(models.ErrorResponse).Code, "MPBankNumber")
    72  	assert.Equal(t, err.(models.ErrorResponse).Message, "Banco 0 não existe")
    73  }