github.com/moov-io/imagecashletter@v0.10.1/imageViewAnalysis_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 // mockImageViewAnalysis crates an imageViewAnalysis 15 func mockImageViewAnalysis() ImageViewAnalysis { 16 ivAnalysis := NewImageViewAnalysis() 17 ivAnalysis.GlobalImageQuality = 2 18 ivAnalysis.GlobalImageUsability = 2 19 ivAnalysis.ImagingBankSpecificTest = 0 20 ivAnalysis.PartialImage = 2 21 ivAnalysis.ExcessiveImageSkew = 2 22 ivAnalysis.PiggybackImage = 2 23 ivAnalysis.TooLightOrTooDark = 2 24 ivAnalysis.StreaksAndOrBands = 2 25 ivAnalysis.BelowMinimumImageSize = 2 26 ivAnalysis.ExceedsMaximumImageSize = 2 27 ivAnalysis.ImageEnabledPOD = 1 28 ivAnalysis.SourceDocumentBad = 0 29 ivAnalysis.DateUsability = 2 30 ivAnalysis.PayeeUsability = 2 31 ivAnalysis.ConvenienceAmountUsability = 2 32 ivAnalysis.AmountInWordsUsability = 2 33 ivAnalysis.SignatureUsability = 2 34 ivAnalysis.PayorNameAddressUsability = 2 35 ivAnalysis.MICRLineUsability = 2 36 ivAnalysis.MemoLineUsability = 2 37 ivAnalysis.PayorBankNameAddressUsability = 2 38 ivAnalysis.PayeeEndorsementUsability = 2 39 ivAnalysis.BOFDEndorsementUsability = 2 40 ivAnalysis.TransitEndorsementUsability = 2 41 return ivAnalysis 42 } 43 44 // TestMockImageViewAnalysis creates an ImageViewAnalysis 45 func TestMockImageViewAnalysis(t *testing.T) { 46 ivAnalysis := mockImageViewAnalysis() 47 require.NoError(t, ivAnalysis.Validate()) 48 require.Equal(t, 2, ivAnalysis.GlobalImageQuality) 49 require.Equal(t, 2, ivAnalysis.GlobalImageUsability) 50 require.Equal(t, 0, ivAnalysis.ImagingBankSpecificTest) 51 require.Equal(t, 2, ivAnalysis.PartialImage) 52 require.Equal(t, 2, ivAnalysis.ExcessiveImageSkew) 53 require.Equal(t, 2, ivAnalysis.PiggybackImage) 54 require.Equal(t, 2, ivAnalysis.TooLightOrTooDark) 55 require.Equal(t, 2, ivAnalysis.StreaksAndOrBands) 56 require.Equal(t, 2, ivAnalysis.BelowMinimumImageSize) 57 require.Equal(t, 2, ivAnalysis.ExceedsMaximumImageSize) 58 59 _ = additionalIVAnalysisFields(ivAnalysis, t) 60 } 61 62 func additionalIVAnalysisFields(ivAnalysis ImageViewAnalysis, t *testing.T) string { 63 require.Equal(t, 1, ivAnalysis.ImageEnabledPOD) 64 require.Equal(t, 0, ivAnalysis.SourceDocumentBad) 65 require.Equal(t, 2, ivAnalysis.DateUsability) 66 require.Equal(t, 2, ivAnalysis.PayeeUsability) 67 require.Equal(t, 2, ivAnalysis.ConvenienceAmountUsability) 68 require.Equal(t, 2, ivAnalysis.AmountInWordsUsability) 69 require.Equal(t, 2, ivAnalysis.SignatureUsability) 70 require.Equal(t, 2, ivAnalysis.PayorNameAddressUsability) 71 require.Equal(t, 2, ivAnalysis.MICRLineUsability) 72 require.Equal(t, 2, ivAnalysis.MemoLineUsability) 73 require.Equal(t, 2, ivAnalysis.PayorBankNameAddressUsability) 74 require.Equal(t, 2, ivAnalysis.PayeeEndorsementUsability) 75 require.Equal(t, 2, ivAnalysis.BOFDEndorsementUsability) 76 require.Equal(t, 2, ivAnalysis.TransitEndorsementUsability) 77 return "" 78 } 79 80 // testIVAnalysisString validates that a known parsed ImageViewAnalysis can return to a string of the same value 81 func testIVAnalysisString(t testing.TB) { 82 var line = "542202222222 10222222222222 " 83 r := NewReader(strings.NewReader(line)) 84 r.line = line 85 clh := mockCashLetterHeader() 86 r.addCurrentCashLetter(NewCashLetter(clh)) 87 bh := mockBundleHeader() 88 b := NewBundle(bh) 89 r.currentCashLetter.AddBundle(b) 90 r.addCurrentBundle(b) 91 cd := mockCheckDetail() 92 r.currentCashLetter.currentBundle.AddCheckDetail(cd) 93 94 require.NoError(t, r.parseImageViewAnalysis()) 95 record := r.currentCashLetter.currentBundle.GetChecks()[0].ImageViewAnalysis[0] 96 97 require.Equal(t, line, record.String()) 98 } 99 100 // TestIVAnalysisString tests validating that a known parsed ImageViewAnalysis an return to a string of the 101 // same value 102 func TestIVAnalysisString(t *testing.T) { 103 testIVAnalysisString(t) 104 } 105 106 // BenchmarkIVAnalysisString benchmarks validating that a known parsed ImageViewAnalysis 107 // can return to a string of the same value 108 func BenchmarkIVAnalysisString(b *testing.B) { 109 b.ReportAllocs() 110 for i := 0; i < b.N; i++ { 111 testIVAnalysisString(b) 112 } 113 } 114 115 // TestIVAnalysisRecordType validation 116 func TestIVAnalysisRecordType(t *testing.T) { 117 ivAnalysis := mockImageViewAnalysis() 118 ivAnalysis.recordType = "00" 119 err := ivAnalysis.Validate() 120 var e *FieldError 121 require.ErrorAs(t, err, &e) 122 require.Equal(t, "recordType", e.FieldName) 123 } 124 125 // TestIVAnalysisGlobalImageQuality validation 126 func TestIVAnalysisGlobalImageQuality(t *testing.T) { 127 ivAnalysis := mockImageViewAnalysis() 128 ivAnalysis.GlobalImageQuality = 5 129 err := ivAnalysis.Validate() 130 var e *FieldError 131 require.ErrorAs(t, err, &e) 132 require.Equal(t, "GlobalImageQuality", e.FieldName) 133 } 134 135 // TestIVAnalysisGlobalImageUsability validation 136 func TestIVAnalysisGlobalImageUsability(t *testing.T) { 137 ivAnalysis := mockImageViewAnalysis() 138 ivAnalysis.GlobalImageUsability = 5 139 err := ivAnalysis.Validate() 140 var e *FieldError 141 require.ErrorAs(t, err, &e) 142 require.Equal(t, "GlobalImageUsability", e.FieldName) 143 } 144 145 // TestIVAnalysisImagingBankSpecificTest validation 146 func TestIVAnalysisImagingBankSpecificTest(t *testing.T) { 147 ivAnalysis := mockImageViewAnalysis() 148 ivAnalysis.ImagingBankSpecificTest = 5 149 err := ivAnalysis.Validate() 150 var e *FieldError 151 require.ErrorAs(t, err, &e) 152 require.Equal(t, "ImagingBankSpecificTest", e.FieldName) 153 } 154 155 // TestIVAnalysisPartialImage validation 156 func TestIVAnalysisPartialImage(t *testing.T) { 157 ivAnalysis := mockImageViewAnalysis() 158 ivAnalysis.PartialImage = 5 159 err := ivAnalysis.Validate() 160 var e *FieldError 161 require.ErrorAs(t, err, &e) 162 require.Equal(t, "PartialImage", e.FieldName) 163 } 164 165 // TestIVAnalysisExcessiveImageSkew validation 166 func TestIVAnalysisExcessiveImageSkew(t *testing.T) { 167 ivAnalysis := mockImageViewAnalysis() 168 ivAnalysis.ExcessiveImageSkew = 5 169 err := ivAnalysis.Validate() 170 var e *FieldError 171 require.ErrorAs(t, err, &e) 172 require.Equal(t, "ExcessiveImageSkew", e.FieldName) 173 } 174 175 // TestIVAnalysisPiggybackImage validation 176 func TestIVAnalysisPiggybackImage(t *testing.T) { 177 ivAnalysis := mockImageViewAnalysis() 178 ivAnalysis.PiggybackImage = 5 179 err := ivAnalysis.Validate() 180 var e *FieldError 181 require.ErrorAs(t, err, &e) 182 require.Equal(t, "PiggybackImage", e.FieldName) 183 } 184 185 // TestIVAnalysisTooLightOrTooDark validation 186 func TestIVAnalysisTooLightOrTooDarke(t *testing.T) { 187 ivAnalysis := mockImageViewAnalysis() 188 ivAnalysis.TooLightOrTooDark = 5 189 err := ivAnalysis.Validate() 190 var e *FieldError 191 require.ErrorAs(t, err, &e) 192 require.Equal(t, "TooLightOrTooDark", e.FieldName) 193 } 194 195 // TestIVAnalysisStreaksAndOrBands validation 196 func TestIVAnalysisStreaksAndOrBands(t *testing.T) { 197 ivAnalysis := mockImageViewAnalysis() 198 ivAnalysis.StreaksAndOrBands = 5 199 err := ivAnalysis.Validate() 200 var e *FieldError 201 require.ErrorAs(t, err, &e) 202 require.Equal(t, "StreaksAndOrBands", e.FieldName) 203 } 204 205 // TestIVAnalysisBelowMinimumImageSize validation 206 func TestIVAnalysisBelowMinimumImageSize(t *testing.T) { 207 ivAnalysis := mockImageViewAnalysis() 208 ivAnalysis.BelowMinimumImageSize = 5 209 err := ivAnalysis.Validate() 210 var e *FieldError 211 require.ErrorAs(t, err, &e) 212 require.Equal(t, "BelowMinimumImageSize", e.FieldName) 213 } 214 215 // TestIVAnalysisExceedsMaximumImageSize validation 216 func TestIVAnalysisExceedsMaximumImageSize(t *testing.T) { 217 ivAnalysis := mockImageViewAnalysis() 218 ivAnalysis.ExceedsMaximumImageSize = 5 219 err := ivAnalysis.Validate() 220 var e *FieldError 221 require.ErrorAs(t, err, &e) 222 require.Equal(t, "ExceedsMaximumImageSize", e.FieldName) 223 } 224 225 // TestIVAnalysisImageEnabledPOD validation 226 func TestIVAnalysisImageEnabledPOD(t *testing.T) { 227 ivAnalysis := mockImageViewAnalysis() 228 ivAnalysis.ImageEnabledPOD = 5 229 err := ivAnalysis.Validate() 230 var e *FieldError 231 require.ErrorAs(t, err, &e) 232 require.Equal(t, "ImageEnabledPOD", e.FieldName) 233 } 234 235 // TestIVAnalysisSourceDocumentBad validation 236 func TestIVAnalysisSourceDocumentBad(t *testing.T) { 237 ivAnalysis := mockImageViewAnalysis() 238 ivAnalysis.SourceDocumentBad = 5 239 err := ivAnalysis.Validate() 240 var e *FieldError 241 require.ErrorAs(t, err, &e) 242 require.Equal(t, "SourceDocumentBad", e.FieldName) 243 } 244 245 // TestIVAnalysisDateUsability validation 246 func TestIVAnalysisDateUsability(t *testing.T) { 247 ivAnalysis := mockImageViewAnalysis() 248 ivAnalysis.DateUsability = 5 249 err := ivAnalysis.Validate() 250 var e *FieldError 251 require.ErrorAs(t, err, &e) 252 require.Equal(t, "DateUsability", e.FieldName) 253 } 254 255 // TestIVAnalysisPayeeUsability validation 256 func TestIVAnalysisPayeeUsability(t *testing.T) { 257 ivAnalysis := mockImageViewAnalysis() 258 ivAnalysis.PayeeUsability = 5 259 err := ivAnalysis.Validate() 260 var e *FieldError 261 require.ErrorAs(t, err, &e) 262 require.Equal(t, "PayeeUsability", e.FieldName) 263 } 264 265 // TestIVAnalysisConvenienceAmountUsability validation 266 func TestIVAnalysisConvenienceAmountUsability(t *testing.T) { 267 ivAnalysis := mockImageViewAnalysis() 268 ivAnalysis.ConvenienceAmountUsability = 5 269 err := ivAnalysis.Validate() 270 var e *FieldError 271 require.ErrorAs(t, err, &e) 272 require.Equal(t, "ConvenienceAmountUsability", e.FieldName) 273 } 274 275 // TestIVAnalysisAmountInWordsUsability validation 276 func TestIVAnalysisAmountInWordsUsability(t *testing.T) { 277 ivAnalysis := mockImageViewAnalysis() 278 ivAnalysis.AmountInWordsUsability = 57 279 err := ivAnalysis.Validate() 280 var e *FieldError 281 require.ErrorAs(t, err, &e) 282 require.Equal(t, "AmountInWordsUsability", e.FieldName) 283 } 284 285 // TestIVAnalysisSignatureUsability validation 286 func TestIVAnalysisSignatureUsability(t *testing.T) { 287 ivAnalysis := mockImageViewAnalysis() 288 ivAnalysis.SignatureUsability = 5 289 err := ivAnalysis.Validate() 290 var e *FieldError 291 require.ErrorAs(t, err, &e) 292 require.Equal(t, "SignatureUsability", e.FieldName) 293 } 294 295 // TestIVAnalysisPayorNameAddressUsability validation 296 func TestIVAnalysisPayorNameAddressUsability(t *testing.T) { 297 ivAnalysis := mockImageViewAnalysis() 298 ivAnalysis.PayorNameAddressUsability = 5 299 err := ivAnalysis.Validate() 300 var e *FieldError 301 require.ErrorAs(t, err, &e) 302 require.Equal(t, "PayorNameAddressUsability", e.FieldName) 303 } 304 305 // TestIVAnalysisMICRLineUsability validation 306 func TestIVAnalysisMICRLineUsability(t *testing.T) { 307 ivAnalysis := mockImageViewAnalysis() 308 ivAnalysis.MICRLineUsability = 5 309 err := ivAnalysis.Validate() 310 var e *FieldError 311 require.ErrorAs(t, err, &e) 312 require.Equal(t, "MICRLineUsability", e.FieldName) 313 } 314 315 // TestIVAnalysisMemoLineUsability validation 316 func TestIVAnalysisMemoLineUsability(t *testing.T) { 317 ivAnalysis := mockImageViewAnalysis() 318 ivAnalysis.MemoLineUsability = 5 319 err := ivAnalysis.Validate() 320 var e *FieldError 321 require.ErrorAs(t, err, &e) 322 require.Equal(t, "MemoLineUsability", e.FieldName) 323 } 324 325 // TestIVAnalysisPayorBankNameAddressUsability validation 326 func TestIVAnalysisPayorBankNameAddressUsability(t *testing.T) { 327 ivAnalysis := mockImageViewAnalysis() 328 ivAnalysis.PayorBankNameAddressUsability = 5 329 err := ivAnalysis.Validate() 330 var e *FieldError 331 require.ErrorAs(t, err, &e) 332 require.Equal(t, "PayorBankNameAddressUsability", e.FieldName) 333 } 334 335 // TestIVAnalysisPayeeEndorsementUsability validation 336 func TestIVAnalysisPayeeEndorsementUsability(t *testing.T) { 337 ivAnalysis := mockImageViewAnalysis() 338 ivAnalysis.PayeeEndorsementUsability = 5 339 err := ivAnalysis.Validate() 340 var e *FieldError 341 require.ErrorAs(t, err, &e) 342 require.Equal(t, "PayeeEndorsementUsability", e.FieldName) 343 } 344 345 // TestIVAnalysisBOFDEndorsementUsability validation 346 func TestIVAnalysisBOFDEndorsementUsability(t *testing.T) { 347 ivAnalysis := mockImageViewAnalysis() 348 ivAnalysis.BOFDEndorsementUsability = 5 349 err := ivAnalysis.Validate() 350 var e *FieldError 351 require.ErrorAs(t, err, &e) 352 require.Equal(t, "BOFDEndorsementUsability", e.FieldName) 353 } 354 355 // TestIVAnalysisTransitEndorsementUsability validation 356 func TestIVAnalysisTransitEndorsementUsability(t *testing.T) { 357 ivAnalysis := mockImageViewAnalysis() 358 ivAnalysis.TransitEndorsementUsability = 5 359 err := ivAnalysis.Validate() 360 var e *FieldError 361 require.ErrorAs(t, err, &e) 362 require.Equal(t, "TransitEndorsementUsability", e.FieldName) 363 } 364 365 // TestIVAnalysisUserField validation 366 func TestIVAnalysisUserField(t *testing.T) { 367 ivAnalysis := mockImageViewAnalysis() 368 ivAnalysis.UserField = "®©" 369 err := ivAnalysis.Validate() 370 var e *FieldError 371 require.ErrorAs(t, err, &e) 372 require.Equal(t, "UserField", e.FieldName) 373 } 374 375 // Field Inclusion 376 377 // TestIVAnalysisFIRecordType validation 378 func TestIVAnalysisFIRecordType(t *testing.T) { 379 ivAnalysis := mockImageViewAnalysis() 380 ivAnalysis.recordType = "" 381 err := ivAnalysis.Validate() 382 var e *FieldError 383 require.ErrorAs(t, err, &e) 384 require.Equal(t, "recordType", e.FieldName) 385 } 386 387 // TestIVAnalysisRuneCountInString validates RuneCountInString 388 func TestIVAnalysisRuneCountInString(t *testing.T) { 389 ivAnalysis := NewImageViewAnalysis() 390 var line = "54" 391 ivAnalysis.Parse(line) 392 393 require.Equal(t, 0, ivAnalysis.AmountInWordsUsability) 394 }