github.com/moov-io/imagecashletter@v0.10.1/routingNumberSummary_test.go (about) 1 // Copyright 2020 The Moov Authors 2 // Use of this source code is governed by an Apache License 3 // license that can be found in the LICENSE file. 4 5 package imagecashletter 6 7 import ( 8 "strings" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 // mockRoutingNumberSummary creates a RoutingNumberSummary 15 func mockRoutingNumberSummary() *RoutingNumberSummary { 16 rns := NewRoutingNumberSummary() 17 rns.CashLetterRoutingNumber = "231380104" 18 rns.RoutingNumberTotalAmount = 100000 19 rns.RoutingNumberItemCount = 1 20 rns.UserField = "" 21 return rns 22 } 23 24 func TestRoutingNumberSummaryParseErr(t *testing.T) { 25 var r RoutingNumberSummary 26 r.Parse("asdlahsakjajf") 27 require.Equal(t, "", r.CashLetterRoutingNumber) 28 } 29 30 // TestRoutingNumberSummary creates a ReturnRoutingNumberSummary 31 func TestRoutingNumberSummary(t *testing.T) { 32 rns := mockRoutingNumberSummary() 33 require.NoError(t, rns.Validate()) 34 } 35 36 // TestParseRoutingNumberSummary validates parsing a RoutingNumberSummary 37 func TestParseRoutingNumberSummary(t *testing.T) { 38 var line = "8523138010400000000100000000001 " 39 r := NewReader(strings.NewReader(line)) 40 r.line = line 41 clh := mockCashLetterHeader() 42 r.addCurrentCashLetter(NewCashLetter(clh)) 43 bh := mockBundleHeader() 44 b := NewBundle(bh) 45 rns := mockRoutingNumberSummary() 46 r.currentCashLetter.AddBundle(b) 47 r.addCurrentBundle(b) 48 r.currentCashLetter.AddRoutingNumberSummary(rns) 49 r.addCurrentRoutingNumberSummary(rns) 50 51 require.NoError(t, r.parseRoutingNumberSummary()) 52 record := r.currentCashLetter.currentRoutingNumberSummary 53 54 require.Equal(t, "85", record.recordType) 55 require.Equal(t, "231380104", record.CashLetterRoutingNumberField()) 56 require.Equal(t, "00000000100000", record.RoutingNumberTotalAmountField()) 57 require.Equal(t, "000001", record.RoutingNumberItemCountField()) 58 } 59 60 // testRoutingNumberSummaryString validates that a known parsed RoutingNumberSummary can return to a string of the same value 61 func testRoutingNumberSummaryString(t testing.TB) { 62 var line = "8523138010400000000100000000001 " 63 r := NewReader(strings.NewReader(line)) 64 r.line = line 65 clh := mockCashLetterHeader() 66 r.addCurrentCashLetter(NewCashLetter(clh)) 67 bh := mockBundleHeader() 68 rb := NewBundle(bh) 69 rns := mockRoutingNumberSummary() 70 r.currentCashLetter.AddBundle(rb) 71 r.addCurrentBundle(rb) 72 r.currentCashLetter.AddRoutingNumberSummary(rns) 73 r.addCurrentRoutingNumberSummary(rns) 74 75 require.NoError(t, r.parseRoutingNumberSummary()) 76 record := r.currentCashLetter.currentRoutingNumberSummary 77 78 require.Equal(t, line, record.String()) 79 } 80 81 // TestRoutingNumberSummaryString tests validating that a known parsed RoutingNumberSummary an return to a string of the 82 // same value 83 func TestRoutingNumberSummaryString(t *testing.T) { 84 testRoutingNumberSummaryString(t) 85 } 86 87 // BenchmarkRoutingNumberSummaryString benchmarks validating that a known parsed RoutingNumberSummary 88 // can return to a string of the same value 89 func BenchmarkRoutingNumberSummaryString(b *testing.B) { 90 b.ReportAllocs() 91 for i := 0; i < b.N; i++ { 92 testRoutingNumberSummaryString(b) 93 } 94 } 95 96 // TestRoutingNumberSummaryRecordType validation 97 func TestRoutingNumberSummaryRecordType(t *testing.T) { 98 rns := mockRoutingNumberSummary() 99 rns.recordType = "00" 100 err := rns.Validate() 101 var e *FieldError 102 require.ErrorAs(t, err, &e) 103 require.Equal(t, "recordType", e.FieldName) 104 } 105 106 // TestRoutingNumberSummaryUserField validation 107 func TestRoutingNumberSummaryUserField(t *testing.T) { 108 rns := mockRoutingNumberSummary() 109 rns.UserField = "®©" 110 err := rns.Validate() 111 var e *FieldError 112 require.ErrorAs(t, err, &e) 113 require.Equal(t, "UserField", e.FieldName) 114 } 115 116 // Field Inclusion 117 118 // TestRoutingNumberSummaryFIRecordType validation 119 func TestRoutingNumberSummaryFIRecordType(t *testing.T) { 120 rns := mockRoutingNumberSummary() 121 rns.recordType = "" 122 err := rns.Validate() 123 var e *FieldError 124 require.ErrorAs(t, err, &e) 125 require.Equal(t, "recordType", e.FieldName) 126 } 127 128 // TestRoutingNumberSummaryFICashLetterRoutingNumber validation 129 func TestRoutingNumberSummaryFICashLetterRoutingNumber(t *testing.T) { 130 rns := mockRoutingNumberSummary() 131 rns.CashLetterRoutingNumber = "" 132 err := rns.Validate() 133 var e *FieldError 134 require.ErrorAs(t, err, &e) 135 require.Equal(t, "CashLetterRoutingNumber", e.FieldName) 136 }