github.com/moov-io/imagecashletter@v0.10.1/checkDetailAddendumC_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  	"time"
    11  
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  // mockCheckDetailAddendumC creates a CheckDetailAddendumC
    16  func mockCheckDetailAddendumC() CheckDetailAddendumC {
    17  	cdAddendumC := NewCheckDetailAddendumC()
    18  	cdAddendumC.RecordNumber = 1
    19  	cdAddendumC.EndorsingBankRoutingNumber = "121042882"
    20  	cdAddendumC.BOFDEndorsementBusinessDate = time.Now()
    21  	cdAddendumC.EndorsingBankItemSequenceNumber = "1              "
    22  	cdAddendumC.TruncationIndicator = "Y"
    23  	cdAddendumC.EndorsingBankConversionIndicator = "1"
    24  	cdAddendumC.EndorsingBankCorrectionIndicator = 0
    25  	cdAddendumC.ReturnReason = "A"
    26  	cdAddendumC.UserField = ""
    27  	cdAddendumC.EndorsingBankIdentifier = 0
    28  	return cdAddendumC
    29  }
    30  
    31  // TestMockCheckDetailAddendumC creates a CheckDetailAddendumC
    32  func TestMockCheckDetailAddendumC(t *testing.T) {
    33  	cdAddendumC := mockCheckDetailAddendumC()
    34  	require.NoError(t, cdAddendumC.Validate())
    35  	require.Equal(t, "28", cdAddendumC.recordType)
    36  	require.Equal(t, 1, cdAddendumC.RecordNumber)
    37  	require.Equal(t, "121042882", cdAddendumC.EndorsingBankRoutingNumber)
    38  	require.Equal(t, "1              ", cdAddendumC.EndorsingBankItemSequenceNumber)
    39  	require.Equal(t, "Y", cdAddendumC.TruncationIndicator)
    40  	require.Equal(t, "A", cdAddendumC.ReturnReason)
    41  	require.Equal(t, "1", cdAddendumC.EndorsingBankConversionIndicator)
    42  	require.Equal(t, 0, cdAddendumC.EndorsingBankCorrectionIndicator)
    43  	require.Equal(t, "", cdAddendumC.UserField)
    44  	require.Equal(t, 0, cdAddendumC.EndorsingBankIdentifier)
    45  }
    46  
    47  func TestParseCheckDetailAddendumCErr(t *testing.T) {
    48  	var c CheckDetailAddendumC
    49  	c.Parse("asdsakjahsfa")
    50  	require.Equal(t, 0, c.RecordNumber)
    51  }
    52  
    53  // TestParseCheckDetailAddendumC validates parsing a CheckDetailAddendumC
    54  func TestParseCheckDetailAddendumC(t *testing.T) {
    55  	var line = "2801121042882201809051              Y10A                   0                    "
    56  	r := NewReader(strings.NewReader(line))
    57  	r.line = line
    58  	clh := mockCashLetterHeader()
    59  	r.addCurrentCashLetter(NewCashLetter(clh))
    60  	bh := mockBundleHeader()
    61  	b := NewBundle(bh)
    62  	r.currentCashLetter.AddBundle(b)
    63  	r.addCurrentBundle(b)
    64  	cd := mockCheckDetail()
    65  	r.currentCashLetter.currentBundle.AddCheckDetail(cd)
    66  
    67  	require.NoError(t, r.parseCheckDetailAddendumC())
    68  	record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumC[0]
    69  
    70  	require.Equal(t, "28", record.recordType)
    71  	require.Equal(t, "01", record.RecordNumberField())
    72  
    73  	require.Equal(t, "121042882", record.EndorsingBankRoutingNumberField())
    74  	require.Equal(t, "20180905", record.BOFDEndorsementBusinessDateField())
    75  	require.Equal(t, "1              ", record.EndorsingBankItemSequenceNumberField())
    76  	require.Equal(t, "Y", record.TruncationIndicatorField())
    77  	require.Equal(t, "1", record.EndorsingBankConversionIndicatorField())
    78  	require.Equal(t, "0", record.EndorsingBankCorrectionIndicatorField())
    79  	require.Equal(t, "A", record.ReturnReasonField())
    80  	require.Equal(t, "                   ", record.UserFieldField())
    81  	require.Equal(t, "                    ", record.reservedField())
    82  }
    83  
    84  // testCDAddendumCString validates that a known parsed CheckDetailAddendumC can return to a string of the same value
    85  func testCDAddendumCString(t testing.TB) {
    86  	var line = "2801121042882201809051              Y10A                   0                    "
    87  	r := NewReader(strings.NewReader(line))
    88  	r.line = line
    89  	clh := mockCashLetterHeader()
    90  	r.addCurrentCashLetter(NewCashLetter(clh))
    91  	bh := mockBundleHeader()
    92  	b := NewBundle(bh)
    93  	r.currentCashLetter.AddBundle(b)
    94  	r.addCurrentBundle(b)
    95  	cd := mockCheckDetail()
    96  	r.currentCashLetter.currentBundle.AddCheckDetail(cd)
    97  
    98  	require.NoError(t, r.parseCheckDetailAddendumC())
    99  	record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumC[0]
   100  
   101  	require.Equal(t, line, record.String())
   102  }
   103  
   104  // TestCDAddendumCString tests validating that a known parsed CheckDetailAddendumC can return to a string of the
   105  // same value
   106  func TestCDAddendumCString(t *testing.T) {
   107  	testCDAddendumCString(t)
   108  }
   109  
   110  // BenchmarkCDAddendumCString benchmarks validating that a known parsed CheckDetailAddendumC
   111  // can return to a string of the same value
   112  func BenchmarkCDAddendumCString(b *testing.B) {
   113  	b.ReportAllocs()
   114  	for i := 0; i < b.N; i++ {
   115  		testCDAddendumCString(b)
   116  	}
   117  }
   118  
   119  // TestCDAddendumCRecordType validation
   120  func TestCDAddendumCRecordType(t *testing.T) {
   121  	cdAddendumC := mockCheckDetailAddendumC()
   122  	cdAddendumC.recordType = "00"
   123  	err := cdAddendumC.Validate()
   124  	var e *FieldError
   125  	require.ErrorAs(t, err, &e)
   126  	require.Equal(t, "recordType", e.FieldName)
   127  }
   128  
   129  // TestCDAddendumCEndorsingBankRoutingNumber validation
   130  func TestCDAddendumCEndorsingBankRoutingNumber(t *testing.T) {
   131  	cdAddendumC := mockCheckDetailAddendumC()
   132  	cdAddendumC.EndorsingBankRoutingNumber = "Z"
   133  	err := cdAddendumC.Validate()
   134  	var e *FieldError
   135  	require.ErrorAs(t, err, &e)
   136  	require.Equal(t, "EndorsingBankRoutingNumber", e.FieldName)
   137  }
   138  
   139  // TestCDAddendumCTruncationIndicator validation
   140  func TestCDAddendumCTruncationIndicator(t *testing.T) {
   141  	cdAddendumC := mockCheckDetailAddendumC()
   142  	cdAddendumC.TruncationIndicator = "A"
   143  	err := cdAddendumC.Validate()
   144  	var e *FieldError
   145  	require.ErrorAs(t, err, &e)
   146  	require.Equal(t, "TruncationIndicator", e.FieldName)
   147  }
   148  
   149  // TestCDAddendumCEndorsingBankConversionIndicator validation
   150  func TestCDAddendumCPayeeName(t *testing.T) {
   151  	cdAddendumC := mockCheckDetailAddendumC()
   152  	cdAddendumC.EndorsingBankConversionIndicator = "10"
   153  	err := cdAddendumC.Validate()
   154  	var e *FieldError
   155  	require.ErrorAs(t, err, &e)
   156  	require.Equal(t, "EndorsingBankConversionIndicator", e.FieldName)
   157  }
   158  
   159  // TestCDAddendumCEndorsingBankCorrectionIndicator validation
   160  func TestCDAddendumCEndorsingBankCorrectionIndicator(t *testing.T) {
   161  	cdAddendumC := mockCheckDetailAddendumC()
   162  	cdAddendumC.EndorsingBankCorrectionIndicator = 6
   163  	err := cdAddendumC.Validate()
   164  	var e *FieldError
   165  	require.ErrorAs(t, err, &e)
   166  	require.Equal(t, "EndorsingBankCorrectionIndicator", e.FieldName)
   167  }
   168  
   169  // TestCDAddendumCBOFDReturnReason validation
   170  func TestCDAddendumCBOFDReturnReason(t *testing.T) {
   171  	cdAddendumC := mockCheckDetailAddendumC()
   172  	cdAddendumC.ReturnReason = "®©"
   173  	err := cdAddendumC.Validate()
   174  	var e *FieldError
   175  	require.ErrorAs(t, err, &e)
   176  	require.Equal(t, "ReturnReason", e.FieldName)
   177  }
   178  
   179  // TestCDAddendumCUserField validation
   180  func TestCDAddendumCUserField(t *testing.T) {
   181  	cdAddendumC := mockCheckDetailAddendumC()
   182  	cdAddendumC.UserField = "®©"
   183  	err := cdAddendumC.Validate()
   184  	var e *FieldError
   185  	require.ErrorAs(t, err, &e)
   186  	require.Equal(t, "UserField", e.FieldName)
   187  }
   188  
   189  // TestCDAddendumCEndorsingBankIdentifier validation
   190  func TestCDAddendumCEndorsingBankIdentifier(t *testing.T) {
   191  	cdAddendumC := mockCheckDetailAddendumC()
   192  	cdAddendumC.EndorsingBankIdentifier = 10
   193  	err := cdAddendumC.Validate()
   194  	var e *FieldError
   195  	require.ErrorAs(t, err, &e)
   196  	require.Equal(t, "EndorsingBankIdentifier", e.FieldName)
   197  }
   198  
   199  // FieldInclusion
   200  
   201  // TestCDAddendumCFIRecordType validation
   202  func TestCDAddendumCFIRecordType(t *testing.T) {
   203  	cdAddendumC := mockCheckDetailAddendumC()
   204  	cdAddendumC.recordType = ""
   205  	err := cdAddendumC.Validate()
   206  	var e *FieldError
   207  	require.ErrorAs(t, err, &e)
   208  	require.Equal(t, "recordType", e.FieldName)
   209  }
   210  
   211  // TestCDAddendumCFIRecordNumber validation
   212  func TestCDAddendumCFIRecordNumber(t *testing.T) {
   213  	cdAddendumC := mockCheckDetailAddendumC()
   214  	cdAddendumC.RecordNumber = 0
   215  	err := cdAddendumC.Validate()
   216  	var e *FieldError
   217  	require.ErrorAs(t, err, &e)
   218  	require.Equal(t, "RecordNumber", e.FieldName)
   219  }
   220  
   221  // TestCDAddendumCFIEndorsingBankRoutingNumber validation
   222  func TestCDAddendumCFIEndorsingBankRoutingNumber(t *testing.T) {
   223  	cdAddendumC := mockCheckDetailAddendumC()
   224  	cdAddendumC.EndorsingBankRoutingNumber = ""
   225  	err := cdAddendumC.Validate()
   226  	var e *FieldError
   227  	require.ErrorAs(t, err, &e)
   228  	require.Equal(t, "EndorsingBankRoutingNumber", e.FieldName)
   229  }
   230  
   231  // TestCDAddendumCFIEndorsingBankRoutingNumberZero validation
   232  func TestCDAddendumCFIEndorsingBankRoutingNumberZero(t *testing.T) {
   233  	cdAddendumC := mockCheckDetailAddendumC()
   234  	cdAddendumC.EndorsingBankRoutingNumber = "000000000"
   235  	err := cdAddendumC.Validate()
   236  	var e *FieldError
   237  	require.ErrorAs(t, err, &e)
   238  	require.Equal(t, "EndorsingBankRoutingNumber", e.FieldName)
   239  }
   240  
   241  // TestCDAddendumCFIBOFDEndorsementBusinessDate validation
   242  func TestCDAddendumCFIBOFDEndorsementBusinessDate(t *testing.T) {
   243  	cdAddendumC := mockCheckDetailAddendumC()
   244  	cdAddendumC.BOFDEndorsementBusinessDate = time.Time{}
   245  	err := cdAddendumC.Validate()
   246  	var e *FieldError
   247  	require.ErrorAs(t, err, &e)
   248  	require.Equal(t, "BOFDEndorsementBusinessDate", e.FieldName)
   249  }
   250  
   251  // TestCDAddendumCFIEndorsingBankItemSequenceNumber validation
   252  func TestCDAddendumCFIEndorsingBankItemSequenceNumber(t *testing.T) {
   253  	cdAddendumC := mockCheckDetailAddendumC()
   254  	cdAddendumC.EndorsingBankItemSequenceNumber = "               "
   255  	err := cdAddendumC.Validate()
   256  	var e *FieldError
   257  	require.ErrorAs(t, err, &e)
   258  	require.Equal(t, "EndorsingBankItemSequenceNumber", e.FieldName)
   259  }
   260  
   261  // TestCDAddendumCFITruncationIndicator validation
   262  func TestCDAddendumCFITruncationIndicator(t *testing.T) {
   263  	cdAddendumC := mockCheckDetailAddendumC()
   264  	cdAddendumC.TruncationIndicator = ""
   265  	err := cdAddendumC.Validate()
   266  	var e *FieldError
   267  	require.ErrorAs(t, err, &e)
   268  	require.Equal(t, "TruncationIndicator", e.FieldName)
   269  }