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 }