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

     1  package test
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/mundipagg/boleto-api/models"
     7  )
     8  
     9  //StubBoletoRequest Stub base para criação de BoletoRequest
    10  type StubBoletoRequest struct {
    11  	BuilderBoletoRequest
    12  	Authentication models.Authentication
    13  	Agreement      models.Agreement
    14  	Title          models.Title
    15  	Recipient      models.Recipient
    16  	PayeeGuarantor *models.PayeeGuarantor
    17  	Buyer          models.Buyer
    18  	bank           models.BankNumber
    19  }
    20  
    21  func NewStubBoletoRequest(bank models.BankNumber) *StubBoletoRequest {
    22  	s := &StubBoletoRequest{
    23  		BuilderBoletoRequest: NewBuilderBoletoRequest(),
    24  	}
    25  
    26  	s.bank = bank
    27  
    28  	s.Authentication = models.Authentication{}
    29  	s.Agreement = models.Agreement{}
    30  	s.Title = models.Title{}
    31  	s.Recipient = models.Recipient{}
    32  	s.Buyer = models.Buyer{}
    33  
    34  	return s
    35  }
    36  
    37  func (s *StubBoletoRequest) WithAgreementNumber(number uint) *StubBoletoRequest {
    38  	s.Agreement.AgreementNumber = number
    39  	return s
    40  }
    41  
    42  func (s *StubBoletoRequest) WithAgreementAgency(agency string) *StubBoletoRequest {
    43  	s.Agreement.Agency = agency
    44  	return s
    45  }
    46  
    47  func (s *StubBoletoRequest) WithAgreementAccount(account string) *StubBoletoRequest {
    48  	s.Agreement.Account = account
    49  	return s
    50  }
    51  
    52  func (s *StubBoletoRequest) WithWallet(wallet uint16) *StubBoletoRequest {
    53  	s.Agreement.Wallet = wallet
    54  	return s
    55  }
    56  
    57  func (s *StubBoletoRequest) WithAuthentication(authentication models.Authentication) *StubBoletoRequest {
    58  	s.Authentication = authentication
    59  	return s
    60  }
    61  
    62  func (s *StubBoletoRequest) WithAmountInCents(amount uint64) *StubBoletoRequest {
    63  	s.Title.AmountInCents = amount
    64  	return s
    65  }
    66  
    67  func (s *StubBoletoRequest) WithOurNumber(ourNumber uint) *StubBoletoRequest {
    68  	s.Title.OurNumber = ourNumber
    69  	return s
    70  }
    71  
    72  func (s *StubBoletoRequest) WithExpirationDate(expiredAt time.Time) *StubBoletoRequest {
    73  	s.Title.ExpireDateTime = expiredAt
    74  	s.Title.ExpireDate = expiredAt.Format("2006-01-02")
    75  	return s
    76  }
    77  
    78  func (s *StubBoletoRequest) WithDocumentNumber(documentNumber string) *StubBoletoRequest {
    79  	s.Title.DocumentNumber = documentNumber
    80  	return s
    81  }
    82  
    83  func (s *StubBoletoRequest) WithInstructions(instructions string) *StubBoletoRequest {
    84  	s.Title.Instructions = instructions
    85  	return s
    86  }
    87  
    88  func (s *StubBoletoRequest) WithAcceptDivergentAmount(accepted bool) *StubBoletoRequest {
    89  	if !s.Title.HasRules() {
    90  		s.Title.Rules = &models.Rules{}
    91  	}
    92  
    93  	s.Title.Rules.AcceptDivergentAmount = accepted
    94  	return s
    95  }
    96  
    97  func (s *StubBoletoRequest) WithMaxDaysToPayPastDue(days uint) *StubBoletoRequest {
    98  	if !s.Title.HasRules() {
    99  		s.Title.Rules = &models.Rules{}
   100  	}
   101  
   102  	s.Title.Rules.MaxDaysToPayPastDue = days
   103  	return s
   104  }
   105  
   106  func (s *StubBoletoRequest) WithBoletoType(title models.Title) *StubBoletoRequest {
   107  	s.Title.BoletoType = title.BoletoType
   108  	s.Title.BoletoTypeCode = title.BoletoTypeCode
   109  	return s
   110  }
   111  
   112  func (s *StubBoletoRequest) WithRecipientDocumentNumber(docNumber string) *StubBoletoRequest {
   113  	s.Recipient.Document.Number = docNumber
   114  	return s
   115  }
   116  
   117  func (s *StubBoletoRequest) WithBuyerName(buyerName string) *StubBoletoRequest {
   118  	s.Buyer.Name = buyerName
   119  	return s
   120  }
   121  
   122  func (s *StubBoletoRequest) WithBuyerZipCode(zipcode string) *StubBoletoRequest {
   123  	s.Buyer.Address.ZipCode = zipcode
   124  	return s
   125  }
   126  
   127  func (s *StubBoletoRequest) WithRecipientDocumentType(documentType string) *StubBoletoRequest {
   128  	s.Recipient.Document.Type = documentType
   129  	return s
   130  }
   131  
   132  func (s *StubBoletoRequest) WithRecipientName(recipientName string) *StubBoletoRequest {
   133  	s.Recipient.Name = recipientName
   134  	return s
   135  }
   136  
   137  func (s *StubBoletoRequest) WithPayeeGuarantorName(PayeeGuarantorName string) *StubBoletoRequest {
   138  	s.createStubPayeeGuarantor()
   139  	s.PayeeGuarantor.Name = PayeeGuarantorName
   140  	return s
   141  }
   142  
   143  func (s *StubBoletoRequest) WithPayeeGuarantorDocumentNumber(docNumber string) *StubBoletoRequest {
   144  	s.createStubPayeeGuarantor()
   145  	s.PayeeGuarantor.Document.Number = docNumber
   146  	return s
   147  }
   148  
   149  func (s *StubBoletoRequest) WithPayeeGuarantorDocumentType(documentType string) *StubBoletoRequest {
   150  	s.createStubPayeeGuarantor()
   151  	s.PayeeGuarantor.Document.Type = documentType
   152  	return s
   153  }
   154  
   155  func (s *StubBoletoRequest) createStubPayeeGuarantor() {
   156  	if !s.hasStubPayeeGuarantor() {
   157  		s.PayeeGuarantor = &models.PayeeGuarantor{}
   158  	}
   159  }
   160  
   161  func (s *StubBoletoRequest) hasStubPayeeGuarantor() bool {
   162  	return s.PayeeGuarantor != nil
   163  }
   164  
   165  func (s *StubBoletoRequest) WithFine(daysAfterExpirationDate uint, amountInCents uint64, percentageOnTotal float64) *StubBoletoRequest {
   166  	if !s.Title.HasFees() {
   167  		s.Title.Fees = &models.Fees{}
   168  	}
   169  
   170  	s.Title.Fees.Fine = &models.Fine{
   171  		DaysAfterExpirationDate: daysAfterExpirationDate,
   172  		AmountInCents:           amountInCents,
   173  		PercentageOnTotal:       percentageOnTotal,
   174  	}
   175  	return s
   176  }
   177  
   178  func (s *StubBoletoRequest) WithInterest(daysAfterExpirationDate uint, amountPerDayInCents uint64, percentagePerMonth float64) *StubBoletoRequest {
   179  	if !s.Title.HasFees() {
   180  		s.Title.Fees = &models.Fees{}
   181  	}
   182  
   183  	s.Title.Fees.Interest = &models.Interest{
   184  		DaysAfterExpirationDate: daysAfterExpirationDate,
   185  		AmountPerDayInCents:     amountPerDayInCents,
   186  		PercentagePerMonth:      percentagePerMonth,
   187  	}
   188  	return s
   189  }
   190  
   191  func (s *StubBoletoRequest) Build() *models.BoletoRequest {
   192  	s.SetAuthentication(s.Authentication)
   193  	s.SetAgreement(s.Agreement)
   194  	s.SetTitle(s.Title)
   195  	s.SetRecipient(s.Recipient)
   196  	s.SetPayeeGuarantor(s.PayeeGuarantor)
   197  	s.SetBuyer(s.Buyer)
   198  	s.SetBank(s.bank)
   199  	return s.BoletoRequest()
   200  }