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  }