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 }