github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/models/fine_test.go (about) 1 package models 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 type testFineParameter struct { 11 Line interface{} 12 Input interface{} 13 Expected interface{} 14 } 15 16 var hasFineParameters = []testFineParameter{ 17 {Line: 4, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 1, PercentageOnTotal: 0}, Expected: true}, 18 {Line: 5, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 0, PercentageOnTotal: 1.20}, Expected: true}, 19 {Line: 6, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 200, PercentageOnTotal: 3}, Expected: true}, 20 } 21 22 var hasAmountInCentsParameters = []testFineParameter{ 23 {Line: 1, Input: Fine{AmountInCents: 0}, Expected: false}, 24 {Line: 2, Input: Fine{AmountInCents: 1}, Expected: true}, 25 {Line: 3, Input: Fine{AmountInCents: 20034}, Expected: true}, 26 } 27 28 var validateFineParameters = []testFineParameter{ 29 {Line: 1, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 0, PercentageOnTotal: 0}, Expected: false}, 30 {Line: 2, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 1, PercentageOnTotal: 0}, Expected: true}, 31 {Line: 3, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 0, PercentageOnTotal: 1}, Expected: true}, 32 {Line: 4, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 1, PercentageOnTotal: 1}, Expected: false}, 33 {Line: 5, Input: Fine{DaysAfterExpirationDate: 1, PercentageOnTotal: -1}, Expected: false}, 34 {Line: 6, Input: Fine{DaysAfterExpirationDate: 1, PercentageOnTotal: -2.34}, Expected: false}, 35 {Line: 7, Input: Fine{DaysAfterExpirationDate: 1, PercentageOnTotal: 0}, Expected: false}, 36 {Line: 8, Input: Fine{DaysAfterExpirationDate: 1, PercentageOnTotal: 0.0}, Expected: false}, 37 {Line: 9, Input: Fine{DaysAfterExpirationDate: 1, PercentageOnTotal: 1}, Expected: true}, 38 {Line: 10, Input: Fine{DaysAfterExpirationDate: 1, PercentageOnTotal: 2.23}, Expected: true}, 39 {Line: 11, Input: Fine{DaysAfterExpirationDate: 0, AmountInCents: 0, PercentageOnTotal: 0}, Expected: false}, 40 {Line: 12, Input: Fine{DaysAfterExpirationDate: 0, AmountInCents: 1, PercentageOnTotal: 0}, Expected: false}, 41 {Line: 13, Input: Fine{DaysAfterExpirationDate: 0, AmountInCents: 0, PercentageOnTotal: 1.2}, Expected: false}, 42 {Line: 14, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 1, PercentageOnTotal: 0.0}, Expected: true}, 43 {Line: 15, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 0, PercentageOnTotal: 1.2}, Expected: true}, 44 {Line: 16, Input: Fine{DaysAfterExpirationDate: 2, AmountInCents: 0, PercentageOnTotal: 1.2}, Expected: true}, 45 } 46 47 var hasExclusiveRateValuesFineParameters = []testFineParameter{ 48 {Line: 1, Input: Fine{AmountInCents: 0, PercentageOnTotal: 0}, Expected: false}, 49 {Line: 2, Input: Fine{AmountInCents: 1, PercentageOnTotal: 0}, Expected: true}, 50 {Line: 3, Input: Fine{AmountInCents: 0, PercentageOnTotal: 1}, Expected: true}, 51 {Line: 4, Input: Fine{AmountInCents: 1, PercentageOnTotal: 1}, Expected: false}, 52 } 53 54 var hasPercentageOnTotalParameters = []testFineParameter{ 55 {Line: 1, Input: Fine{PercentageOnTotal: -1}, Expected: false}, 56 {Line: 2, Input: Fine{PercentageOnTotal: -2.34}, Expected: false}, 57 {Line: 3, Input: Fine{PercentageOnTotal: 0}, Expected: false}, 58 {Line: 4, Input: Fine{PercentageOnTotal: 0.0}, Expected: false}, 59 {Line: 5, Input: Fine{PercentageOnTotal: 1}, Expected: true}, 60 {Line: 6, Input: Fine{PercentageOnTotal: 2.23}, Expected: true}, 61 } 62 63 var hasDaysAfterExpirationDateFineParameters = []testFineParameter{ 64 {Line: 1, Input: Fine{DaysAfterExpirationDate: 0, AmountInCents: 0, PercentageOnTotal: 0}, Expected: false}, 65 {Line: 2, Input: Fine{DaysAfterExpirationDate: 0, AmountInCents: 1, PercentageOnTotal: 0}, Expected: false}, 66 {Line: 3, Input: Fine{DaysAfterExpirationDate: 0, AmountInCents: 0, PercentageOnTotal: 1.2}, Expected: false}, 67 {Line: 4, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 1, PercentageOnTotal: 0.0}, Expected: true}, 68 {Line: 5, Input: Fine{DaysAfterExpirationDate: 1, AmountInCents: 0, PercentageOnTotal: 1.2}, Expected: true}, 69 {Line: 6, Input: Fine{DaysAfterExpirationDate: 2, AmountInCents: 0, PercentageOnTotal: 1.2}, Expected: true}, 70 } 71 72 func TestHasFine(t *testing.T) { 73 for _, fact := range hasFineParameters { 74 input := fact.Input.(Fine) 75 76 result := input.HasFine() 77 78 assert.Equal(t, fact.Expected, result, fmt.Sprintf("HasFine - Linha %d: Deve verificar corretamente se possui multa", fact.Line.(int))) 79 } 80 } 81 82 func TestHasAmountInCents(t *testing.T) { 83 for _, fact := range hasAmountInCentsParameters { 84 input := fact.Input.(Fine) 85 86 result := input.HasAmountInCents() 87 88 assert.Equal(t, fact.Expected, result, fmt.Sprintf("HasAmountInCents - Linha %d: Deve verificar corretamente se possui multa por valor", fact.Line.(int))) 89 } 90 } 91 92 func TestFineValidate(t *testing.T) { 93 for _, fact := range validateFineParameters { 94 input := fact.Input.(Fine) 95 96 result := input.Validate() == nil 97 98 assert.Equal(t, fact.Expected, result, fmt.Sprintf("Validate - Linha %d: Deve validar a struct de multa", fact.Line.(int))) 99 } 100 } 101 102 func TestFineHasExclusiveRateValues(t *testing.T) { 103 for _, fact := range hasExclusiveRateValuesFineParameters { 104 input := fact.Input.(Fine) 105 106 result := input.HasExclusiveRateValues() 107 108 assert.Equal(t, fact.Expected, result, fmt.Sprintf("HasExclusiveRateValues - Linha %d: Deve validar corretamente as regras de valores", fact.Line.(int))) 109 } 110 } 111 112 func TestHasPercentageOnTotal(t *testing.T) { 113 for _, fact := range hasPercentageOnTotalParameters { 114 input := fact.Input.(Fine) 115 116 result := input.HasPercentageOnTotal() 117 118 assert.Equal(t, fact.Expected, result, fmt.Sprintf("HasPercentageOnTotal - Linha %d: Deve validar corretamente o campo Percentage", fact.Line.(int))) 119 } 120 } 121 122 func TestFineHasDaysAfterExpirationDate(t *testing.T) { 123 for _, fact := range hasDaysAfterExpirationDateFineParameters { 124 input := fact.Input.(Fine) 125 126 result := input.HasDaysAfterExpirationDate() 127 128 assert.Equal(t, fact.Expected, result, fmt.Sprintf("HasDaysAfterExpirationDate - Linha %d: Deve validar corretamente o campo Days", fact.Line.(int))) 129 } 130 }