github.com/moov-io/imagecashletter@v0.10.1/bundle_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  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  // mockBundleChecks
    14  func mockBundleChecks(t *testing.T) *Bundle {
    15  	t.Helper()
    16  
    17  	bundle := &Bundle{}
    18  	bundle.SetHeader(mockBundleHeader())
    19  	bundle.AddCheckDetail(mockCheckDetail())
    20  	bundle.Checks[0].AddCheckDetailAddendumA(mockCheckDetailAddendumA())
    21  	bundle.Checks[0].AddCheckDetailAddendumB(mockCheckDetailAddendumB())
    22  	bundle.Checks[0].AddCheckDetailAddendumC(mockCheckDetailAddendumC())
    23  	bundle.Checks[0].AddImageViewDetail(mockImageViewDetail())
    24  	bundle.Checks[0].AddImageViewData(mockImageViewData())
    25  	bundle.Checks[0].AddImageViewAnalysis(mockImageViewAnalysis())
    26  
    27  	require.NoError(t, bundle.build())
    28  
    29  	return bundle
    30  }
    31  
    32  // mockBundleReturns
    33  func mockBundleReturns(t *testing.T) *Bundle {
    34  	t.Helper()
    35  
    36  	bundle := &Bundle{}
    37  	bundle.SetHeader(mockBundleHeader())
    38  	bundle.AddReturnDetail(mockReturnDetail())
    39  	bundle.Returns[0].AddReturnDetailAddendumA(mockReturnDetailAddendumA())
    40  	bundle.Returns[0].AddReturnDetailAddendumB(mockReturnDetailAddendumB())
    41  	bundle.Returns[0].AddReturnDetailAddendumC(mockReturnDetailAddendumC())
    42  	bundle.Returns[0].AddReturnDetailAddendumD(mockReturnDetailAddendumD())
    43  	bundle.Returns[0].AddImageViewDetail(mockImageViewDetail())
    44  	bundle.Returns[0].AddImageViewData(mockImageViewData())
    45  	bundle.Returns[0].AddImageViewAnalysis(mockImageViewAnalysis())
    46  
    47  	require.NoError(t, bundle.build())
    48  
    49  	return bundle
    50  }
    51  
    52  // TestMockBundleChecks creates a Bundle of checks
    53  func TestMockBundleChecks(t *testing.T) {
    54  	bundle := mockBundleChecks(t)
    55  	require.NoError(t, bundle.Validate())
    56  
    57  	bundle = nil // ensure we don't panic
    58  	require.NotPanics(t, func() {
    59  		checks := bundle.GetChecks()
    60  		require.Nil(t, checks)
    61  	})
    62  }
    63  
    64  // TestMockBundleReturns creates a Bundle of returns
    65  func TestMockBundleReturns(t *testing.T) {
    66  	bundle := mockBundleReturns(t)
    67  	require.NoError(t, bundle.Validate())
    68  
    69  	bundle = nil // ensure we don't panic
    70  	require.NotPanics(t, func() {
    71  		returns := bundle.GetReturns()
    72  		require.Nil(t, returns)
    73  	})
    74  }
    75  
    76  func TestBundleValidate(t *testing.T) {
    77  	header := mockBundleHeader()
    78  	bundle := NewBundle(header)
    79  	require.Error(t, bundle.Validate())
    80  }
    81  
    82  // TestCheckDetailAddendumCount validates CheckDetail AddendumCount
    83  func TestCheckDetailAddendumCount(t *testing.T) {
    84  	cd := mockCheckDetail()
    85  	cd.AddendumCount = 2 // incorrect count should cause error
    86  	cd.AddCheckDetailAddendumA(mockCheckDetailAddendumA())
    87  	cd.AddCheckDetailAddendumB(mockCheckDetailAddendumB())
    88  	cd.AddCheckDetailAddendumC(mockCheckDetailAddendumC())
    89  	cd.AddImageViewDetail(mockImageViewDetail())
    90  	cd.AddImageViewData(mockImageViewData())
    91  	cd.AddImageViewAnalysis(mockImageViewAnalysis())
    92  	bundle := NewBundle(mockBundleHeader())
    93  	bundle.AddCheckDetail(cd)
    94  
    95  	err := bundle.Validate()
    96  	var bundleErr *BundleError
    97  	require.ErrorAs(t, err, &bundleErr)
    98  	require.Equal(t, "AddendumCount", bundleErr.FieldName)
    99  }
   100  
   101  // TestCheckDetailAddendumACount validates CheckDetailAddendumA AddendaCount
   102  func TestCheckDetailAddendumACount(t *testing.T) {
   103  	cd := mockCheckDetail()
   104  	cd.AddendumCount = 12 // incorrect count should cause error
   105  	for i := 0; i < 10; i++ {
   106  		cd.AddCheckDetailAddendumA(mockCheckDetailAddendumA())
   107  	}
   108  	cd.AddCheckDetailAddendumB(mockCheckDetailAddendumB())
   109  	cd.AddCheckDetailAddendumC(mockCheckDetailAddendumC())
   110  	cd.AddImageViewDetail(mockImageViewDetail())
   111  	cd.AddImageViewData(mockImageViewData())
   112  	cd.AddImageViewAnalysis(mockImageViewAnalysis())
   113  	bundle := NewBundle(mockBundleHeader())
   114  	bundle.AddCheckDetail(cd)
   115  
   116  	err := bundle.Validate()
   117  	var bundleErr *BundleError
   118  	require.ErrorAs(t, err, &bundleErr)
   119  	require.Equal(t, "CheckDetailAddendumA", bundleErr.FieldName)
   120  }
   121  
   122  // TestCheckDetailAddendumBCount validates CheckDetailAddendumB AddendaCount
   123  func TestCheckDetailAddendumBCount(t *testing.T) {
   124  	cd := mockCheckDetail()
   125  	cd.AddendumCount = 4
   126  	cd.AddCheckDetailAddendumA(mockCheckDetailAddendumA())
   127  	cd.AddCheckDetailAddendumB(mockCheckDetailAddendumB())
   128  	cd.AddCheckDetailAddendumB(mockCheckDetailAddendumB())
   129  	cd.AddCheckDetailAddendumC(mockCheckDetailAddendumC())
   130  	cd.AddImageViewDetail(mockImageViewDetail())
   131  	cd.AddImageViewData(mockImageViewData())
   132  	cd.AddImageViewAnalysis(mockImageViewAnalysis())
   133  	bundle := NewBundle(mockBundleHeader())
   134  	bundle.AddCheckDetail(cd)
   135  
   136  	err := bundle.Validate()
   137  	var bundleErr *BundleError
   138  	require.ErrorAs(t, err, &bundleErr)
   139  	require.Equal(t, "CheckDetailAddendumB", bundleErr.FieldName)
   140  }
   141  
   142  // TestCheckDetailAddendumCCount validates CheckDetailAddendumC AddendaCount
   143  func TestCheckDetailAddendumCCount(t *testing.T) {
   144  	cd := mockCheckDetail()
   145  	cd.AddendumCount = 102
   146  	cd.AddCheckDetailAddendumA(mockCheckDetailAddendumA())
   147  	cd.AddCheckDetailAddendumB(mockCheckDetailAddendumB())
   148  	for i := 0; i < 100; i++ {
   149  		cd.AddCheckDetailAddendumC(mockCheckDetailAddendumC())
   150  	}
   151  	cd.AddImageViewDetail(mockImageViewDetail())
   152  	cd.AddImageViewData(mockImageViewData())
   153  	cd.AddImageViewAnalysis(mockImageViewAnalysis())
   154  	bundle := NewBundle(mockBundleHeader())
   155  	bundle.AddCheckDetail(cd)
   156  
   157  	err := bundle.Validate()
   158  	var bundleErr *BundleError
   159  	require.ErrorAs(t, err, &bundleErr)
   160  	require.Equal(t, "CheckDetailAddendumC", bundleErr.FieldName)
   161  }
   162  
   163  // TestReturnDetailAddendumCount validates ReturnDetail AddendumCount
   164  func TestReturnDetailAddendumCount(t *testing.T) {
   165  	// Create ReturnDetail
   166  	rd := mockReturnDetail()
   167  	rd.AddendumCount = 3
   168  	rd.AddReturnDetailAddendumA(mockReturnDetailAddendumA())
   169  	rd.AddReturnDetailAddendumB(mockReturnDetailAddendumB())
   170  	rd.AddReturnDetailAddendumC(mockReturnDetailAddendumC())
   171  	rd.AddReturnDetailAddendumD(mockReturnDetailAddendumD())
   172  	rd.AddImageViewDetail(mockImageViewDetail())
   173  	rd.AddImageViewData(mockImageViewData())
   174  	rd.AddImageViewAnalysis(mockImageViewAnalysis())
   175  	returnBundle := NewBundle(mockBundleHeader())
   176  	returnBundle.AddReturnDetail(rd)
   177  
   178  	err := returnBundle.Validate()
   179  	var bundleErr *BundleError
   180  	require.ErrorAs(t, err, &bundleErr)
   181  	require.Equal(t, "AddendumCount", bundleErr.FieldName)
   182  }
   183  
   184  // TestReturnDetailAddendumACount validates ReturnDetailAddendumA Count
   185  func TestReturnDetailAddendumACount(t *testing.T) {
   186  	// Create ReturnDetail
   187  	rd := mockReturnDetail()
   188  	rd.AddendumCount = 13
   189  	for i := 0; i < 10; i++ {
   190  		rd.AddReturnDetailAddendumA(mockReturnDetailAddendumA())
   191  	}
   192  	rd.AddReturnDetailAddendumB(mockReturnDetailAddendumB())
   193  	rd.AddReturnDetailAddendumC(mockReturnDetailAddendumC())
   194  	rd.AddReturnDetailAddendumD(mockReturnDetailAddendumD())
   195  	rd.AddImageViewDetail(mockImageViewDetail())
   196  	rd.AddImageViewData(mockImageViewData())
   197  	rd.AddImageViewAnalysis(mockImageViewAnalysis())
   198  	returnBundle := NewBundle(mockBundleHeader())
   199  	returnBundle.AddReturnDetail(rd)
   200  
   201  	err := returnBundle.Validate()
   202  	var bundleErr *BundleError
   203  	require.ErrorAs(t, err, &bundleErr)
   204  	require.Equal(t, "ReturnDetailAddendumA", bundleErr.FieldName)
   205  }
   206  
   207  // TestReturnDetailAddendumBCount validates ReturnDetailAddendumB Count
   208  func TestReturnDetailAddendumBCount(t *testing.T) {
   209  	// Create ReturnDetail
   210  	rd := mockReturnDetail()
   211  	rd.AddendumCount = 5
   212  	rd.AddReturnDetailAddendumA(mockReturnDetailAddendumA())
   213  	rd.AddReturnDetailAddendumB(mockReturnDetailAddendumB())
   214  	rd.AddReturnDetailAddendumB(mockReturnDetailAddendumB())
   215  	rd.AddReturnDetailAddendumC(mockReturnDetailAddendumC())
   216  	rd.AddReturnDetailAddendumD(mockReturnDetailAddendumD())
   217  	rd.AddImageViewDetail(mockImageViewDetail())
   218  	rd.AddImageViewData(mockImageViewData())
   219  	rd.AddImageViewAnalysis(mockImageViewAnalysis())
   220  	returnBundle := NewBundle(mockBundleHeader())
   221  	returnBundle.AddReturnDetail(rd)
   222  
   223  	err := returnBundle.Validate()
   224  	var bundleErr *BundleError
   225  	require.ErrorAs(t, err, &bundleErr)
   226  	require.Equal(t, "ReturnDetailAddendumB", bundleErr.FieldName)
   227  }
   228  
   229  // TestReturnDetailAddendumCCount validates ReturnDetailAddendumC Count
   230  func TestReturnDetailAddendumCCount(t *testing.T) {
   231  	// Create ReturnDetail
   232  	rd := mockReturnDetail()
   233  	rd.AddendumCount = 5
   234  	rd.AddReturnDetailAddendumA(mockReturnDetailAddendumA())
   235  	rd.AddReturnDetailAddendumB(mockReturnDetailAddendumB())
   236  	rd.AddReturnDetailAddendumC(mockReturnDetailAddendumC())
   237  	rd.AddReturnDetailAddendumC(mockReturnDetailAddendumC())
   238  	rd.AddReturnDetailAddendumD(mockReturnDetailAddendumD())
   239  	rd.AddImageViewDetail(mockImageViewDetail())
   240  	rd.AddImageViewData(mockImageViewData())
   241  	rd.AddImageViewAnalysis(mockImageViewAnalysis())
   242  	returnBundle := NewBundle(mockBundleHeader())
   243  	returnBundle.AddReturnDetail(rd)
   244  
   245  	err := returnBundle.Validate()
   246  	var bundleErr *BundleError
   247  	require.ErrorAs(t, err, &bundleErr)
   248  	require.Equal(t, "ReturnDetailAddendumC", bundleErr.FieldName)
   249  }
   250  
   251  // TestReturnDetailAddendumDCount validates ReturnDetailAddendumD Count
   252  func TestReturnDetailAddendumDCount(t *testing.T) {
   253  	// Create ReturnDetail
   254  	rd := mockReturnDetail()
   255  	rd.AddendumCount = 103
   256  	rd.AddReturnDetailAddendumA(mockReturnDetailAddendumA())
   257  	rd.AddReturnDetailAddendumB(mockReturnDetailAddendumB())
   258  	rd.AddReturnDetailAddendumC(mockReturnDetailAddendumC())
   259  	for i := 0; i < 100; i++ {
   260  		rd.AddReturnDetailAddendumD(mockReturnDetailAddendumD())
   261  	}
   262  	rd.AddImageViewDetail(mockImageViewDetail())
   263  	rd.AddImageViewData(mockImageViewData())
   264  	rd.AddImageViewAnalysis(mockImageViewAnalysis())
   265  	returnBundle := NewBundle(mockBundleHeader())
   266  	returnBundle.AddReturnDetail(rd)
   267  
   268  	err := returnBundle.Validate()
   269  	var bundleErr *BundleError
   270  	require.ErrorAs(t, err, &bundleErr)
   271  	require.Equal(t, "ReturnDetailAddendumD", bundleErr.FieldName)
   272  }