github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/models/model_test.go (about) 1 package models 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 type ModelTestParameter struct { 11 Input interface{} 12 Expected interface{} 13 Length interface{} 14 } 15 16 var isCPFParameters = []ModelTestParameter{ 17 {Input: Document{Type: "CPF", Number: "13245678901"}, Expected: true}, 18 {Input: Document{Type: "AAA", Number: "13245678901"}, Expected: false}, 19 {Input: Document{Type: "cPf", Number: "13245678901ssa"}, Expected: true}, 20 {Input: Document{Type: "CPF", Number: "lasjdlf019239098adjal9390jflsadjf9309jfsl"}, Expected: true}, 21 } 22 23 var validateCPFParameters = []ModelTestParameter{ 24 {Input: Document{Type: "CPF", Number: "13245678901"}, Expected: true}, 25 {Input: Document{Type: "CPF", Number: "lasjdlf019239098adjal9390jflsadjf9309jfsl"}, Expected: false}, 26 } 27 28 var isCNPJParameters = []ModelTestParameter{ 29 {Input: Document{Type: "CNPJ", Number: "12123123000112"}, Expected: true}, 30 {Input: Document{Type: "AAA", Number: "12123123000112"}, Expected: false}, 31 {Input: Document{Type: "cNpJ", Number: "13245678901ssa"}, Expected: true}, 32 {Input: Document{Type: "CNPJ", Number: "lasjdlf019239098adjal9390jflsadjf9309jfsl"}, Expected: true}, 33 } 34 35 var validateCNPJParameters = []ModelTestParameter{ 36 {Input: Document{Type: "CNPJ", Number: "12123123000112"}, Expected: true}, 37 {Input: Document{Type: "CNPJ", Number: "lasjdlf019239098adjal9390jflsadjf9309jfsl"}, Expected: false}, 38 } 39 40 var titleDocumentNumberValidParameters = []ModelTestParameter{ 41 {Input: Title{DocumentNumber: "1234567891011"}, Expected: true}, 42 {Input: Title{DocumentNumber: "123x"}, Expected: true}, 43 } 44 45 var titleDocumentNumberInvalidParameters = []ModelTestParameter{ 46 {Input: Title{DocumentNumber: "xx"}, Expected: false}, 47 {Input: Title{DocumentNumber: ""}, Expected: false}, 48 } 49 50 var titleInstructionParameters = []ModelTestParameter{ 51 {Input: Title{Instructions: "Some instructions"}, Length: 100, Expected: true}, 52 {Input: Title{Instructions: "Some instructions"}, Length: 1, Expected: false}, 53 } 54 55 var titleAmountInCentsParameters = []ModelTestParameter{ 56 {Input: Title{AmountInCents: 100}, Expected: true}, 57 {Input: Title{AmountInCents: 0}, Expected: false}, 58 } 59 60 var titleParseDateParameters = []ModelTestParameter{ 61 {Input: "2021-03-05", Expected: true}, 62 {Input: "05/03/2021", Expected: false}, 63 } 64 65 var titleExpirationDateParameters = []ModelTestParameter{ 66 {Input: Title{ExpireDate: time.Now().AddDate(0, 0, 5).Format("2006-01-02")}, Expected: true}, 67 {Input: Title{ExpireDate: time.Now().AddDate(0, 0, -5).Format("2006-01-02")}, Expected: false}, 68 {Input: Title{ExpireDate: "05/03/2021"}, Expected: false}, 69 } 70 71 var agreementAgencyParameters = []ModelTestParameter{ 72 {Input: Agreement{Agency: "321"}, Expected: true}, 73 {Input: Agreement{Agency: "234-2222a"}, Expected: false}, 74 } 75 76 var agreementAgencyDigitParameters = []ModelTestParameter{ 77 {Input: Agreement{AgencyDigit: "2sssss"}, Expected: "2"}, 78 {Input: Agreement{AgencyDigit: "332sssss"}, Expected: "1"}, 79 } 80 81 var agreementAccountDigitParameters = []ModelTestParameter{ 82 {Input: Agreement{AccountDigit: "2sssss"}, Expected: "2"}, 83 {Input: Agreement{AccountDigit: "332sssss"}, Expected: "1"}, 84 } 85 86 var agreementAccountParameters = []ModelTestParameter{ 87 {Input: Agreement{Account: "1234fff"}, Length: 8, Expected: true}, 88 {Input: Agreement{Account: "654654654654654654654654654564"}, Length: 8, Expected: false}, 89 } 90 91 var payeeGuarantorParameters = []ModelTestParameter{ 92 {Input: PayeeGuarantor{Name: ""}, Expected: false}, 93 } 94 95 var stringAttributes = []ModelTestParameter{ 96 {Input: "", Expected: false}, 97 {Input: "Some content", Expected: true}, 98 } 99 100 var authenticationParameters = []ModelTestParameter{ 101 {Input: Authentication{Username: ""}, Expected: Authentication{}}, 102 {Input: Authentication{Username: "kakarotto"}, Expected: Authentication{Username: "[REDACTED]"}}, 103 {Input: Authentication{Password: ""}, Expected: Authentication{}}, 104 {Input: Authentication{Password: "umasenhaforteaqui"}, Expected: Authentication{Password: "[REDACTED]"}}, 105 {Input: Authentication{AuthorizationToken: ""}, Expected: Authentication{}}, 106 {Input: Authentication{AuthorizationToken: "654654654654654654654654654564"}, Expected: Authentication{AuthorizationToken: "[REDACTED]"}}, 107 {Input: Authentication{AccessKey: ""}, Expected: Authentication{}}, 108 {Input: Authentication{AccessKey: "123456789"}, Expected: Authentication{AccessKey: "[REDACTED]"}}, 109 {Input: Authentication{AccessKey: "123456789"}, Expected: Authentication{AccessKey: "[REDACTED]"}}, 110 {Input: Authentication{Username: "", Password: "", AuthorizationToken: "", AccessKey: ""}, Expected: Authentication{}}, 111 {Input: Authentication{Username: "kakarotto", Password: "umasenhaforteaqui"}, Expected: Authentication{Username: "[REDACTED]", Password: "[REDACTED]"}}, 112 {Input: Authentication{Username: "kakarotto", AuthorizationToken: "654654654654654654654654654564"}, Expected: Authentication{Username: "[REDACTED]", AuthorizationToken: "[REDACTED]"}}, 113 } 114 115 func TestIsCpf(t *testing.T) { 116 for _, fact := range isCPFParameters { 117 input := fact.Input.(Document) 118 result := input.IsCPF() 119 assert.Equal(t, fact.Expected, result, "Espera que o tipo de documento passado seja um CPF") 120 } 121 } 122 123 func TestValidateCPF(t *testing.T) { 124 for _, fact := range validateCPFParameters { 125 input := fact.Input.(Document) 126 result := input.ValidateCPF() == nil 127 assert.Equal(t, fact.Expected, result, "Espera que CPF seja válido") 128 } 129 } 130 131 func TestIsCnpj(t *testing.T) { 132 for _, fact := range isCNPJParameters { 133 input := fact.Input.(Document) 134 result := input.IsCNPJ() 135 assert.Equal(t, fact.Expected, result, "Espera que o tipo de documento passado seja um CNPJ") 136 } 137 } 138 139 func TestValidateCNPJ(t *testing.T) { 140 for _, fact := range validateCNPJParameters { 141 input := fact.Input.(Document) 142 result := input.ValidateCNPJ() == nil 143 assert.Equal(t, fact.Expected, result, "Espera que CNPJ seja válido") 144 } 145 } 146 147 func TestTitleValidateDocumentNumberSuccess(t *testing.T) { 148 for _, fact := range titleDocumentNumberValidParameters { 149 input := fact.Input.(Title) 150 result := input.ValidateDocumentNumber() == nil 151 assert.Equal(t, fact.Expected, result, "Espera que DocumentNumber seja válido") 152 assert.Equal(t, len(input.DocumentNumber), 10) 153 } 154 } 155 156 func TestTitleValidateDocumentNumberFailed(t *testing.T) { 157 for _, fact := range titleDocumentNumberInvalidParameters { 158 input := fact.Input.(Title) 159 result := input.ValidateDocumentNumber() != nil 160 assert.Equal(t, fact.Expected, result, "Espera que DocumentNumber seja inválido") 161 assert.Equal(t, len(input.DocumentNumber), 0) 162 } 163 } 164 165 func TestTitleValidateInstructions(t *testing.T) { 166 for _, fact := range titleInstructionParameters { 167 input := fact.Input.(Title) 168 result := input.ValidateInstructionsLength(fact.Length.(int)) == nil 169 assert.Equal(t, fact.Expected, result, "Deve validar corretamente as instruções") 170 } 171 } 172 173 func TestTitleValidateAmountInCents(t *testing.T) { 174 for _, fact := range titleAmountInCentsParameters { 175 input := fact.Input.(Title) 176 result := input.IsAmountInCentsValid() == nil 177 assert.Equal(t, fact.Expected, result, "Deve validar corretamente o valor do boleto") 178 } 179 } 180 181 func TestTitleParseDate(t *testing.T) { 182 for _, fact := range titleParseDateParameters { 183 _, err := parseDate(fact.Input.(string)) 184 result := err == nil 185 assert.Equal(t, fact.Expected, result, "Deve transformar uma string no padrão para um tipo time.Time") 186 } 187 } 188 189 func TestTitleExpireDate(t *testing.T) { 190 for _, fact := range titleExpirationDateParameters { 191 input := fact.Input.(Title) 192 result := input.IsExpireDateValid() == nil 193 assert.Equal(t, fact.Expected, result, "O ExpireDate deve ser válido") 194 } 195 } 196 197 func TestNewBoletoView(t *testing.T) { 198 expectedBarCode := "1234" 199 expectedDigitableLine := "12345" 200 201 response := BoletoResponse{ 202 BarCodeNumber: expectedBarCode, 203 DigitableLine: expectedDigitableLine, 204 } 205 206 result := NewBoletoView(BoletoRequest{}, response, "BradescoShopFacil") 207 208 assert.NotEmpty(t, result.UID) 209 assert.Equal(t, expectedBarCode, result.Barcode) 210 assert.Equal(t, expectedDigitableLine, result.DigitableLine) 211 } 212 213 func TestNewErrorResponse(t *testing.T) { 214 result := NewErrors() 215 assert.Empty(t, result, "Deve criar uma coleção de Errors vazia") 216 } 217 218 func TestAppendErrorResponse(t *testing.T) { 219 result := NewErrors() 220 221 result.Append("100", "FirstErrorMessage") 222 223 assert.NotEmpty(t, result, "Deve incrementar a coleção com um item") 224 assert.Equal(t, len(result), 1, "Deve conter um erro") 225 226 result.Append("200", "SecondErrorMessage") 227 228 assert.NotEmpty(t, result, "Deve incrementar a coleção com um item") 229 assert.Equal(t, len(result), 2, "Deve conter dois erros") 230 } 231 232 func TestAgreementIsValidAgency(t *testing.T) { 233 for _, fact := range agreementAgencyParameters { 234 input := fact.Input.(Agreement) 235 result := input.IsAgencyValid() == nil 236 assert.Equal(t, fact.Expected, result, "Deve validar corretamente a agência") 237 } 238 } 239 240 func TestAgreementCalculateAgencyDigit(t *testing.T) { 241 c := func(s string) string { 242 return "1" 243 } 244 for _, fact := range agreementAgencyDigitParameters { 245 input := fact.Input.(Agreement) 246 input.CalculateAgencyDigit(c) 247 assert.Equal(t, fact.Expected, input.AgencyDigit, "Deve calcular corretamente o dígito da agência") 248 } 249 } 250 251 func TestAgreementCalculateAccountDigit(t *testing.T) { 252 c := func(s, y string) string { 253 return "1" 254 } 255 for _, fact := range agreementAccountDigitParameters { 256 input := fact.Input.(Agreement) 257 input.CalculateAccountDigit(c) 258 assert.Equal(t, fact.Expected, input.AccountDigit, "Deve calcular corretamente o dígito da conta") 259 } 260 } 261 262 func TestAgreementIsAccountValid(t *testing.T) { 263 for _, fact := range agreementAccountParameters { 264 input := fact.Input.(Agreement) 265 result := input.IsAccountValid(fact.Length.(int)) == nil 266 assert.Equal(t, fact.Expected, result, "Verifica se a conta é valida") 267 } 268 } 269 270 func TestPayeeGuarantorNameIsValid(t *testing.T) { 271 for _, fact := range payeeGuarantorParameters { 272 input := fact.Input.(PayeeGuarantor) 273 result := input.HasName() 274 assert.Equal(t, fact.Expected, result, "Verifica se o nome do PayeeGuarantor está preenchido") 275 } 276 } 277 278 func TestIsemptyString(t *testing.T) { 279 for _, fact := range stringAttributes { 280 input := fact.Input.(string) 281 result := isNotEmptyString(input) 282 assert.Equal(t, fact.Expected, result, "Verifica se uma string não é vazia") 283 } 284 } 285 286 func TestMaskAuthenticationNode(t *testing.T) { 287 for _, fact := range authenticationParameters { 288 input := fact.Input.(Authentication) 289 result := input.maskAuthenticationNode() 290 assert.Equal(t, fact.Expected, result, "Aplica mascara nos atributos do nó Authentication") 291 } 292 }