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  }