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  }