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

     1  package bradescoNetEmpresa
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/mundipagg/boleto-api/models"
     6  	"github.com/mundipagg/boleto-api/test"
     7  	"github.com/mundipagg/boleto-api/validations"
     8  	"github.com/stretchr/testify/assert"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  var agencyNumberParameters = []test.Parameter{
    14  	{Input: "1", Expected: true},
    15  	{Input: "12", Expected: true},
    16  	{Input: "123", Expected: true},
    17  	{Input: "1234", Expected: true},
    18  	{Input: "123A", Expected: true},
    19  	{Input: "", Expected: false},
    20  	{Input: "  ", Expected: false},
    21  	{Input: "123456789", Expected: false},
    22  }
    23  
    24  var accountNumberParameters = []test.Parameter{
    25  	{Input: "1", Expected: true},
    26  	{Input: "12", Expected: true},
    27  	{Input: "123", Expected: true},
    28  	{Input: "1234", Expected: true},
    29  	{Input: "123A", Expected: true},
    30  	{Input: "123456789", Expected: false},
    31  	{Input: "  ", Expected: false},
    32  	{Input: "", Expected: false},
    33  }
    34  
    35  var walletParameters = []test.Parameter{
    36  	{Input: uint16(4), Expected: true},
    37  	{Input: uint16(9), Expected: true},
    38  	{Input: uint16(19), Expected: true},
    39  	{Input: uint16(1), Expected: false},
    40  	{Input: uint16(6), Expected: false},
    41  	{Input: uint16(20), Expected: false},
    42  }
    43  
    44  var boletoTypeKeyParameters = []test.Parameter{
    45  	{Input: models.Title{BoletoType: ""}, Expected: true},
    46  	{Input: models.Title{BoletoType: "CH"}, Expected: true},
    47  	{Input: models.Title{BoletoType: "DM"}, Expected: true},
    48  	{Input: models.Title{BoletoType: "DS"}, Expected: true},
    49  	{Input: models.Title{BoletoType: "NP"}, Expected: true},
    50  	{Input: models.Title{BoletoType: "RC"}, Expected: true},
    51  	{Input: models.Title{BoletoType: "OUT"}, Expected: true},
    52  	{Input: models.Title{BoletoType: "A"}, Expected: false},
    53  	{Input: models.Title{BoletoType: "ABC"}, Expected: false},
    54  }
    55  
    56  var expirationDateParameters = []test.Parameter{
    57  	{Input: "2025-01-01", Expected: true},
    58  	{Input: "2025-02-20", Expected: true},
    59  	{Input: "2025-02-21", Expected: true},
    60  	{Input: "2025-02-22", Expected: false},
    61  	{Input: "2025-12-31", Expected: false},
    62  }
    63  
    64  func Test_AgencyValidation_WhenTypeIsBoletoRequest(t *testing.T) {
    65  
    66  	for _, fact := range agencyNumberParameters {
    67  		request := newStubBoletoRequestBradescoNetEmpresa().WithAgreementAgency(fact.Input.(string)).Build()
    68  		result := bradescoNetEmpresaValidateAgency(request)
    69  		assert.Equal(t, fact.Expected, result == nil, fmt.Sprintf("O resultado: %d não condiz com o esperado: %d, utilizando o input: %d", result, fact.Expected, fact.Input))
    70  	}
    71  }
    72  
    73  func Test_AgencyValidation_WhenTypeIsInvalid(t *testing.T) {
    74  
    75  	request := "Não é um boleto request"
    76  	result := bradescoNetEmpresaValidateAgency(request)
    77  	assert.IsType(t, models.ErrorResponse{}, result, fmt.Sprintf("O tipo do resultado: %T não condiz com o tipo esperado: %T", result, models.ErrorResponse{}))
    78  }
    79  
    80  func Test_AccountValidation_WhenTypeIsBoletoRequest(t *testing.T) {
    81  
    82  	for _, fact := range accountNumberParameters {
    83  		request := newStubBoletoRequestBradescoNetEmpresa().WithAgreementAccount(fact.Input.(string)).Build()
    84  		result := bradescoNetEmpresaValidateAccount(request)
    85  		assert.Equal(t, fact.Expected, result == nil, fmt.Sprintf("O resultado: %d não condiz com o esperado: %d, utilizando o input: %d", result, fact.Expected, fact.Input))
    86  	}
    87  }
    88  
    89  func Test_AccountValidation_WhenTypeIsInvalid(t *testing.T) {
    90  
    91  	request := "Não é um boleto request"
    92  	result := bradescoNetEmpresaValidateAccount(request)
    93  	assert.IsType(t, models.ErrorResponse{}, result, fmt.Sprintf("O tipo do resultado: %T não condiz com o tipo esperado: %T", result, models.ErrorResponse{}))
    94  }
    95  
    96  func Test_WalletValidation_WhenTypeIsBoletoRequest(t *testing.T) {
    97  
    98  	for _, fact := range walletParameters {
    99  		request := newStubBoletoRequestBradescoNetEmpresa().WithWallet(fact.Input.(uint16)).Build()
   100  		result := bradescoNetEmpresaValidateWallet(request)
   101  		assert.Equal(t, fact.Expected, result == nil, fmt.Sprintf("O resultado: %d não condiz com o esperado: %d, utilizando o input: %d", result, fact.Expected, fact.Input))
   102  	}
   103  }
   104  
   105  func Test_WalletValidation_WhenTypeIsInvalid(t *testing.T) {
   106  
   107  	request := "Não é um boleto request"
   108  	result := bradescoNetEmpresaValidateWallet(request)
   109  	assert.IsType(t, models.ErrorResponse{}, result, fmt.Sprintf("O tipo do resultado: %T não condiz com o tipo esperado: %T", result, models.ErrorResponse{}))
   110  }
   111  
   112  func Test_BoletoTypeValidation_WhenTypeIsBoletoRequest(t *testing.T) {
   113  
   114  	for _, fact := range boletoTypeKeyParameters {
   115  		request := newStubBoletoRequestBradescoNetEmpresa().WithBoletoType(fact.Input.(models.Title)).Build()
   116  		result := bradescoNetEmpresaBoletoTypeValidate(request)
   117  		assert.Equal(t, fact.Expected, result == nil, fmt.Sprintf("O resultado: %d não condiz com o esperado: %d, utilizando o input: %d", result, fact.Expected, fact.Input))
   118  	}
   119  }
   120  
   121  func Test_BoletoTypeValidation_WhenTypeIsInvalid(t *testing.T) {
   122  
   123  	request := "Não é um boleto request"
   124  	result := bradescoNetEmpresaBoletoTypeValidate(request)
   125  	assert.IsType(t, models.ErrorResponse{}, result, fmt.Sprintf("O tipo do resultado: %T não condiz com o tipo esperado: %T", result, models.ErrorResponse{}))
   126  }
   127  
   128  func Test_MaxDateExpirationBlockValidation_WhenTypeIsBoletoRequest(t *testing.T) {
   129  
   130  	for _, fact := range expirationDateParameters {
   131  		expDate, _ := time.Parse("2006-01-02", fact.Input.(string))
   132  		request := newStubBoletoRequestBradescoNetEmpresa().WithExpirationDate(expDate).Build()
   133  		result := validations.ValidateMaxExpirationDate(request)
   134  		assert.Equal(t, fact.Expected, result == nil, fmt.Sprintf("O resultado: %d não condiz com o esperado: %d, utilizando o input: %d", result, fact.Expected, fact.Input))
   135  	}
   136  }
   137  
   138  func Test_MaxDateExpirationBlockValidation_WhenTypeIsInvalid(t *testing.T) {
   139  
   140  	request := "Não é um boleto request"
   141  	result := validations.ValidateMaxExpirationDate(request)
   142  	assert.IsType(t, models.ErrorResponse{}, result, fmt.Sprintf("O tipo do resultado: %T não condiz com o tipo esperado: %T", result, models.ErrorResponse{}))
   143  }