github.com/moov-io/imagecashletter@v0.10.1/checkDetailAddendumC_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 "time" 11 12 "github.com/stretchr/testify/require" 13 ) 14 15 // mockCheckDetailAddendumC creates a CheckDetailAddendumC 16 func mockCheckDetailAddendumC() CheckDetailAddendumC { 17 cdAddendumC := NewCheckDetailAddendumC() 18 cdAddendumC.RecordNumber = 1 19 cdAddendumC.EndorsingBankRoutingNumber = "121042882" 20 cdAddendumC.BOFDEndorsementBusinessDate = time.Now() 21 cdAddendumC.EndorsingBankItemSequenceNumber = "1 " 22 cdAddendumC.TruncationIndicator = "Y" 23 cdAddendumC.EndorsingBankConversionIndicator = "1" 24 cdAddendumC.EndorsingBankCorrectionIndicator = 0 25 cdAddendumC.ReturnReason = "A" 26 cdAddendumC.UserField = "" 27 cdAddendumC.EndorsingBankIdentifier = 0 28 return cdAddendumC 29 } 30 31 // TestMockCheckDetailAddendumC creates a CheckDetailAddendumC 32 func TestMockCheckDetailAddendumC(t *testing.T) { 33 cdAddendumC := mockCheckDetailAddendumC() 34 require.NoError(t, cdAddendumC.Validate()) 35 require.Equal(t, "28", cdAddendumC.recordType) 36 require.Equal(t, 1, cdAddendumC.RecordNumber) 37 require.Equal(t, "121042882", cdAddendumC.EndorsingBankRoutingNumber) 38 require.Equal(t, "1 ", cdAddendumC.EndorsingBankItemSequenceNumber) 39 require.Equal(t, "Y", cdAddendumC.TruncationIndicator) 40 require.Equal(t, "A", cdAddendumC.ReturnReason) 41 require.Equal(t, "1", cdAddendumC.EndorsingBankConversionIndicator) 42 require.Equal(t, 0, cdAddendumC.EndorsingBankCorrectionIndicator) 43 require.Equal(t, "", cdAddendumC.UserField) 44 require.Equal(t, 0, cdAddendumC.EndorsingBankIdentifier) 45 } 46 47 func TestParseCheckDetailAddendumCErr(t *testing.T) { 48 var c CheckDetailAddendumC 49 c.Parse("asdsakjahsfa") 50 require.Equal(t, 0, c.RecordNumber) 51 } 52 53 // TestParseCheckDetailAddendumC validates parsing a CheckDetailAddendumC 54 func TestParseCheckDetailAddendumC(t *testing.T) { 55 var line = "2801121042882201809051 Y10A 0 " 56 r := NewReader(strings.NewReader(line)) 57 r.line = line 58 clh := mockCashLetterHeader() 59 r.addCurrentCashLetter(NewCashLetter(clh)) 60 bh := mockBundleHeader() 61 b := NewBundle(bh) 62 r.currentCashLetter.AddBundle(b) 63 r.addCurrentBundle(b) 64 cd := mockCheckDetail() 65 r.currentCashLetter.currentBundle.AddCheckDetail(cd) 66 67 require.NoError(t, r.parseCheckDetailAddendumC()) 68 record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumC[0] 69 70 require.Equal(t, "28", record.recordType) 71 require.Equal(t, "01", record.RecordNumberField()) 72 73 require.Equal(t, "121042882", record.EndorsingBankRoutingNumberField()) 74 require.Equal(t, "20180905", record.BOFDEndorsementBusinessDateField()) 75 require.Equal(t, "1 ", record.EndorsingBankItemSequenceNumberField()) 76 require.Equal(t, "Y", record.TruncationIndicatorField()) 77 require.Equal(t, "1", record.EndorsingBankConversionIndicatorField()) 78 require.Equal(t, "0", record.EndorsingBankCorrectionIndicatorField()) 79 require.Equal(t, "A", record.ReturnReasonField()) 80 require.Equal(t, " ", record.UserFieldField()) 81 require.Equal(t, " ", record.reservedField()) 82 } 83 84 // testCDAddendumCString validates that a known parsed CheckDetailAddendumC can return to a string of the same value 85 func testCDAddendumCString(t testing.TB) { 86 var line = "2801121042882201809051 Y10A 0 " 87 r := NewReader(strings.NewReader(line)) 88 r.line = line 89 clh := mockCashLetterHeader() 90 r.addCurrentCashLetter(NewCashLetter(clh)) 91 bh := mockBundleHeader() 92 b := NewBundle(bh) 93 r.currentCashLetter.AddBundle(b) 94 r.addCurrentBundle(b) 95 cd := mockCheckDetail() 96 r.currentCashLetter.currentBundle.AddCheckDetail(cd) 97 98 require.NoError(t, r.parseCheckDetailAddendumC()) 99 record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumC[0] 100 101 require.Equal(t, line, record.String()) 102 } 103 104 // TestCDAddendumCString tests validating that a known parsed CheckDetailAddendumC can return to a string of the 105 // same value 106 func TestCDAddendumCString(t *testing.T) { 107 testCDAddendumCString(t) 108 } 109 110 // BenchmarkCDAddendumCString benchmarks validating that a known parsed CheckDetailAddendumC 111 // can return to a string of the same value 112 func BenchmarkCDAddendumCString(b *testing.B) { 113 b.ReportAllocs() 114 for i := 0; i < b.N; i++ { 115 testCDAddendumCString(b) 116 } 117 } 118 119 // TestCDAddendumCRecordType validation 120 func TestCDAddendumCRecordType(t *testing.T) { 121 cdAddendumC := mockCheckDetailAddendumC() 122 cdAddendumC.recordType = "00" 123 err := cdAddendumC.Validate() 124 var e *FieldError 125 require.ErrorAs(t, err, &e) 126 require.Equal(t, "recordType", e.FieldName) 127 } 128 129 // TestCDAddendumCEndorsingBankRoutingNumber validation 130 func TestCDAddendumCEndorsingBankRoutingNumber(t *testing.T) { 131 cdAddendumC := mockCheckDetailAddendumC() 132 cdAddendumC.EndorsingBankRoutingNumber = "Z" 133 err := cdAddendumC.Validate() 134 var e *FieldError 135 require.ErrorAs(t, err, &e) 136 require.Equal(t, "EndorsingBankRoutingNumber", e.FieldName) 137 } 138 139 // TestCDAddendumCTruncationIndicator validation 140 func TestCDAddendumCTruncationIndicator(t *testing.T) { 141 cdAddendumC := mockCheckDetailAddendumC() 142 cdAddendumC.TruncationIndicator = "A" 143 err := cdAddendumC.Validate() 144 var e *FieldError 145 require.ErrorAs(t, err, &e) 146 require.Equal(t, "TruncationIndicator", e.FieldName) 147 } 148 149 // TestCDAddendumCEndorsingBankConversionIndicator validation 150 func TestCDAddendumCPayeeName(t *testing.T) { 151 cdAddendumC := mockCheckDetailAddendumC() 152 cdAddendumC.EndorsingBankConversionIndicator = "10" 153 err := cdAddendumC.Validate() 154 var e *FieldError 155 require.ErrorAs(t, err, &e) 156 require.Equal(t, "EndorsingBankConversionIndicator", e.FieldName) 157 } 158 159 // TestCDAddendumCEndorsingBankCorrectionIndicator validation 160 func TestCDAddendumCEndorsingBankCorrectionIndicator(t *testing.T) { 161 cdAddendumC := mockCheckDetailAddendumC() 162 cdAddendumC.EndorsingBankCorrectionIndicator = 6 163 err := cdAddendumC.Validate() 164 var e *FieldError 165 require.ErrorAs(t, err, &e) 166 require.Equal(t, "EndorsingBankCorrectionIndicator", e.FieldName) 167 } 168 169 // TestCDAddendumCBOFDReturnReason validation 170 func TestCDAddendumCBOFDReturnReason(t *testing.T) { 171 cdAddendumC := mockCheckDetailAddendumC() 172 cdAddendumC.ReturnReason = "®©" 173 err := cdAddendumC.Validate() 174 var e *FieldError 175 require.ErrorAs(t, err, &e) 176 require.Equal(t, "ReturnReason", e.FieldName) 177 } 178 179 // TestCDAddendumCUserField validation 180 func TestCDAddendumCUserField(t *testing.T) { 181 cdAddendumC := mockCheckDetailAddendumC() 182 cdAddendumC.UserField = "®©" 183 err := cdAddendumC.Validate() 184 var e *FieldError 185 require.ErrorAs(t, err, &e) 186 require.Equal(t, "UserField", e.FieldName) 187 } 188 189 // TestCDAddendumCEndorsingBankIdentifier validation 190 func TestCDAddendumCEndorsingBankIdentifier(t *testing.T) { 191 cdAddendumC := mockCheckDetailAddendumC() 192 cdAddendumC.EndorsingBankIdentifier = 10 193 err := cdAddendumC.Validate() 194 var e *FieldError 195 require.ErrorAs(t, err, &e) 196 require.Equal(t, "EndorsingBankIdentifier", e.FieldName) 197 } 198 199 // FieldInclusion 200 201 // TestCDAddendumCFIRecordType validation 202 func TestCDAddendumCFIRecordType(t *testing.T) { 203 cdAddendumC := mockCheckDetailAddendumC() 204 cdAddendumC.recordType = "" 205 err := cdAddendumC.Validate() 206 var e *FieldError 207 require.ErrorAs(t, err, &e) 208 require.Equal(t, "recordType", e.FieldName) 209 } 210 211 // TestCDAddendumCFIRecordNumber validation 212 func TestCDAddendumCFIRecordNumber(t *testing.T) { 213 cdAddendumC := mockCheckDetailAddendumC() 214 cdAddendumC.RecordNumber = 0 215 err := cdAddendumC.Validate() 216 var e *FieldError 217 require.ErrorAs(t, err, &e) 218 require.Equal(t, "RecordNumber", e.FieldName) 219 } 220 221 // TestCDAddendumCFIEndorsingBankRoutingNumber validation 222 func TestCDAddendumCFIEndorsingBankRoutingNumber(t *testing.T) { 223 cdAddendumC := mockCheckDetailAddendumC() 224 cdAddendumC.EndorsingBankRoutingNumber = "" 225 err := cdAddendumC.Validate() 226 var e *FieldError 227 require.ErrorAs(t, err, &e) 228 require.Equal(t, "EndorsingBankRoutingNumber", e.FieldName) 229 } 230 231 // TestCDAddendumCFIEndorsingBankRoutingNumberZero validation 232 func TestCDAddendumCFIEndorsingBankRoutingNumberZero(t *testing.T) { 233 cdAddendumC := mockCheckDetailAddendumC() 234 cdAddendumC.EndorsingBankRoutingNumber = "000000000" 235 err := cdAddendumC.Validate() 236 var e *FieldError 237 require.ErrorAs(t, err, &e) 238 require.Equal(t, "EndorsingBankRoutingNumber", e.FieldName) 239 } 240 241 // TestCDAddendumCFIBOFDEndorsementBusinessDate validation 242 func TestCDAddendumCFIBOFDEndorsementBusinessDate(t *testing.T) { 243 cdAddendumC := mockCheckDetailAddendumC() 244 cdAddendumC.BOFDEndorsementBusinessDate = time.Time{} 245 err := cdAddendumC.Validate() 246 var e *FieldError 247 require.ErrorAs(t, err, &e) 248 require.Equal(t, "BOFDEndorsementBusinessDate", e.FieldName) 249 } 250 251 // TestCDAddendumCFIEndorsingBankItemSequenceNumber validation 252 func TestCDAddendumCFIEndorsingBankItemSequenceNumber(t *testing.T) { 253 cdAddendumC := mockCheckDetailAddendumC() 254 cdAddendumC.EndorsingBankItemSequenceNumber = " " 255 err := cdAddendumC.Validate() 256 var e *FieldError 257 require.ErrorAs(t, err, &e) 258 require.Equal(t, "EndorsingBankItemSequenceNumber", e.FieldName) 259 } 260 261 // TestCDAddendumCFITruncationIndicator validation 262 func TestCDAddendumCFITruncationIndicator(t *testing.T) { 263 cdAddendumC := mockCheckDetailAddendumC() 264 cdAddendumC.TruncationIndicator = "" 265 err := cdAddendumC.Validate() 266 var e *FieldError 267 require.ErrorAs(t, err, &e) 268 require.Equal(t, "TruncationIndicator", e.FieldName) 269 }