github.com/moov-io/imagecashletter@v0.10.1/checkDetailAddendumB_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 // mockCheckDetailAddendumB creates a CheckDetailAddendumB 15 func mockCheckDetailAddendumB() CheckDetailAddendumB { 16 cdAddendumB := NewCheckDetailAddendumB() 17 cdAddendumB.ImageReferenceKeyIndicator = 1 18 cdAddendumB.MicrofilmArchiveSequenceNumber = "1A " 19 cdAddendumB.LengthImageReferenceKey = "0034" 20 cdAddendumB.ImageReferenceKey = "0" 21 cdAddendumB.Description = "CD Addendum B" 22 cdAddendumB.UserField = "" 23 return cdAddendumB 24 } 25 26 func TestCheckDetailAddendumBParseErr(t *testing.T) { 27 var c CheckDetailAddendumB 28 c.Parse("asdhfakjfsa") 29 require.Equal(t, 0, c.ImageReferenceKeyIndicator) 30 c.Parse("2711A 00340 CD Addendum B") 31 require.Equal(t, 1, c.ImageReferenceKeyIndicator) 32 require.Equal(t, "", c.ImageReferenceKey) 33 } 34 35 // TestMockCheckDetailAddendumB creates a CheckDetailAddendumB 36 func TestMockCheckDetailAddendumB(t *testing.T) { 37 cdAddendumB := mockCheckDetailAddendumB() 38 require.NoError(t, cdAddendumB.Validate()) 39 require.Equal(t, "27", cdAddendumB.recordType) 40 require.Equal(t, 1, cdAddendumB.ImageReferenceKeyIndicator) 41 require.Equal(t, "1A ", cdAddendumB.MicrofilmArchiveSequenceNumber) 42 require.Equal(t, "0034", cdAddendumB.LengthImageReferenceKey) 43 require.Equal(t, "0", cdAddendumB.ImageReferenceKey) 44 require.Equal(t, "CD Addendum B", cdAddendumB.Description) 45 require.Equal(t, "", cdAddendumB.UserField) 46 } 47 48 // TestParseCheckDetailAddendumB validates parsing a CheckDetailAddendumB 49 func TestParseCheckDetailAddendumB(t *testing.T) { 50 var line = "2711A 00340 CD Addendum B " 51 r := NewReader(strings.NewReader(line)) 52 r.line = line 53 clh := mockCashLetterHeader() 54 r.addCurrentCashLetter(NewCashLetter(clh)) 55 bh := mockBundleHeader() 56 b := NewBundle(bh) 57 r.currentCashLetter.AddBundle(b) 58 r.addCurrentBundle(b) 59 cd := mockCheckDetail() 60 r.currentCashLetter.currentBundle.AddCheckDetail(cd) 61 62 require.NoError(t, r.parseCheckDetailAddendumB()) 63 record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumB[0] 64 require.Equal(t, "27", record.recordType) 65 require.Equal(t, "1", record.ImageReferenceKeyIndicatorField()) 66 require.Equal(t, "1A ", record.MicrofilmArchiveSequenceNumberField()) 67 require.Equal(t, "0034", record.LengthImageReferenceKeyField()) 68 require.Equal(t, "0 ", record.ImageReferenceKeyField()) 69 require.Equal(t, "CD Addendum B ", record.DescriptionField()) 70 require.Equal(t, " ", record.UserFieldField()) 71 require.Equal(t, " ", record.reservedField()) 72 } 73 74 // testCDAddendumBString validates that a known parsed CheckDetailAddendumB can return to a string of the same value 75 func testCDAddendumBString(t testing.TB) { 76 var line = "2711A 00340 CD Addendum B " 77 r := NewReader(strings.NewReader(line)) 78 r.line = line 79 clh := mockCashLetterHeader() 80 r.addCurrentCashLetter(NewCashLetter(clh)) 81 bh := mockBundleHeader() 82 b := NewBundle(bh) 83 r.currentCashLetter.AddBundle(b) 84 r.addCurrentBundle(b) 85 cd := mockCheckDetail() 86 r.currentCashLetter.currentBundle.AddCheckDetail(cd) 87 88 require.NoError(t, r.parseCheckDetailAddendumB()) 89 record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumB[0] 90 91 require.Equal(t, line, record.String()) 92 } 93 94 // TestCDAddendumB String tests validating that a known parsed CheckDetailAddendumB can return to a string of the 95 // same value 96 func TestCDAddendumBString(t *testing.T) { 97 testCDAddendumBString(t) 98 } 99 100 // BenchmarkCDAddendumB String benchmarks validating that a known parsed CheckDetailAddendumB 101 // can return to a string of the same value 102 func BenchmarkCDAddendumBString(b *testing.B) { 103 b.ReportAllocs() 104 for i := 0; i < b.N; i++ { 105 testCDAddendumBString(b) 106 } 107 } 108 109 // TestCDAddendumBRecordType validation 110 func TestCDAddendumBRecordType(t *testing.T) { 111 cdAddendumB := mockCheckDetailAddendumB() 112 cdAddendumB.recordType = "00" 113 err := cdAddendumB.Validate() 114 var e *FieldError 115 require.ErrorAs(t, err, &e) 116 require.Equal(t, "recordType", e.FieldName) 117 } 118 119 // TestCDAddendumBImageReferenceKeyIndicator validation 120 func TestCDAddendumBImageReferenceKeyIndicator(t *testing.T) { 121 cdAddendumB := mockCheckDetailAddendumB() 122 cdAddendumB.ImageReferenceKeyIndicator = 5 123 err := cdAddendumB.Validate() 124 var e *FieldError 125 require.ErrorAs(t, err, &e) 126 require.Equal(t, "ImageReferenceKeyIndicator", e.FieldName) 127 } 128 129 // TestCDAddendumBImageReferenceKey validation 130 func TestCDAddendumBImageReferenceKey(t *testing.T) { 131 cdAddendumB := mockCheckDetailAddendumB() 132 cdAddendumB.ImageReferenceKey = "®©" 133 err := cdAddendumB.Validate() 134 var e *FieldError 135 require.ErrorAs(t, err, &e) 136 require.Equal(t, "ImageReferenceKey", e.FieldName) 137 } 138 139 // TestCDAddendumBDescription validation 140 func TestCDAddendumBDescription(t *testing.T) { 141 cdAddendumB := mockCheckDetailAddendumB() 142 cdAddendumB.Description = "®©" 143 err := cdAddendumB.Validate() 144 var e *FieldError 145 require.ErrorAs(t, err, &e) 146 require.Equal(t, "Description", e.FieldName) 147 } 148 149 // TestCDAddendumBUserField validation 150 func TestCDAddendumBUserField(t *testing.T) { 151 cdAddendumB := mockCheckDetailAddendumB() 152 cdAddendumB.UserField = "®©" 153 err := cdAddendumB.Validate() 154 var e *FieldError 155 require.ErrorAs(t, err, &e) 156 require.Equal(t, "UserField", e.FieldName) 157 } 158 159 // Field Inclusion 160 161 // TestCDAddendumBFIRecordType validation 162 func TestCDAddendumBFIRecordType(t *testing.T) { 163 cdAddendumB := mockCheckDetailAddendumB() 164 cdAddendumB.recordType = "" 165 err := cdAddendumB.Validate() 166 var e *FieldError 167 require.ErrorAs(t, err, &e) 168 require.Equal(t, "recordType", e.FieldName) 169 } 170 171 // TestCDAddendumBFIMicrofilmArchiveSequenceNumber validation 172 func TestCDAddendumBFIMicrofilmArchiveSequenceNumber(t *testing.T) { 173 cdAddendumB := mockCheckDetailAddendumB() 174 cdAddendumB.MicrofilmArchiveSequenceNumber = " " 175 err := cdAddendumB.Validate() 176 var e *FieldError 177 require.ErrorAs(t, err, &e) 178 require.Equal(t, "MicrofilmArchiveSequenceNumber", e.FieldName) 179 } 180 181 // End FieldInclusion 182 183 // TestNBSMFieldTrim validation 184 func TestNBSMFieldTrim(t *testing.T) { 185 rdAddendumB := mockReturnDetailAddendumB() 186 rdAddendumB.AuxiliaryOnUs = "12345678901234567890" 187 require.Len(t, rdAddendumB.AuxiliaryOnUsField(), 15) 188 }