github.com/moov-io/imagecashletter@v0.10.1/checkDetailAddendumA_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  // mockCheckDetailAddendumA creates a CheckDetailAddendumA
    16  func mockCheckDetailAddendumA() CheckDetailAddendumA {
    17  	cdAddendumA := NewCheckDetailAddendumA()
    18  	cdAddendumA.RecordNumber = 1
    19  	cdAddendumA.ReturnLocationRoutingNumber = "121042882"
    20  	cdAddendumA.BOFDEndorsementDate = time.Now()
    21  	cdAddendumA.BOFDItemSequenceNumber = "1              "
    22  	cdAddendumA.BOFDAccountNumber = "938383"
    23  	cdAddendumA.BOFDBranchCode = "01"
    24  	cdAddendumA.PayeeName = "Test Payee"
    25  	cdAddendumA.TruncationIndicator = "Y"
    26  	cdAddendumA.BOFDConversionIndicator = "1"
    27  	cdAddendumA.BOFDCorrectionIndicator = 0
    28  	cdAddendumA.UserField = ""
    29  	return cdAddendumA
    30  }
    31  
    32  func TestCheckDetailAddendumParseErr(t *testing.T) {
    33  	var c CheckDetailAddendumA
    34  	c.Parse("asdshfaksjs")
    35  	require.Equal(t, 0, c.RecordNumber)
    36  }
    37  
    38  // TestMockCheckDetailAddendumA creates a CheckDetailAddendumA
    39  func TestMockCheckDetailAddendumA(t *testing.T) {
    40  	cdAddendumA := mockCheckDetailAddendumA()
    41  	require.NoError(t, cdAddendumA.Validate())
    42  	require.Equal(t, "26", cdAddendumA.recordType)
    43  	require.Equal(t, 1, cdAddendumA.RecordNumber)
    44  	require.Equal(t, "121042882", cdAddendumA.ReturnLocationRoutingNumber)
    45  	require.Equal(t, "1              ", cdAddendumA.BOFDItemSequenceNumber)
    46  	require.Equal(t, "938383", cdAddendumA.BOFDAccountNumber)
    47  	require.Equal(t, "01", cdAddendumA.BOFDBranchCode)
    48  	require.Equal(t, "Test Payee", cdAddendumA.PayeeName)
    49  	require.Equal(t, "Y", cdAddendumA.TruncationIndicator)
    50  	require.Equal(t, "1", cdAddendumA.BOFDConversionIndicator)
    51  	require.Equal(t, 0, cdAddendumA.BOFDCorrectionIndicator)
    52  	require.Equal(t, "", cdAddendumA.UserField)
    53  }
    54  
    55  // TestParseCheckDetailAddendumA validates parsing a CheckDetailAddendumA
    56  func TestParseCheckDetailAddendumA(t *testing.T) {
    57  	var line = "261121042882201809051              938383            01   Test Payee     Y10    "
    58  	r := NewReader(strings.NewReader(line))
    59  	r.line = line
    60  	clh := mockCashLetterHeader()
    61  	r.addCurrentCashLetter(NewCashLetter(clh))
    62  	bh := mockBundleHeader()
    63  	b := NewBundle(bh)
    64  	r.currentCashLetter.AddBundle(b)
    65  	r.addCurrentBundle(b)
    66  	cd := mockCheckDetail()
    67  	r.currentCashLetter.currentBundle.AddCheckDetail(cd)
    68  
    69  	require.NoError(t, r.parseCheckDetailAddendumA())
    70  	record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumA[0]
    71  
    72  	require.Equal(t, "26", record.recordType)
    73  	require.Equal(t, "1", record.RecordNumberField())
    74  	require.Equal(t, "121042882", record.ReturnLocationRoutingNumberField())
    75  	require.Equal(t, "20180905", record.BOFDEndorsementDateField())
    76  	require.Equal(t, "1              ", record.BOFDItemSequenceNumberField())
    77  	require.Equal(t, "938383            ", record.BOFDAccountNumberField())
    78  	require.Equal(t, "01   ", record.BOFDBranchCodeField())
    79  	require.Equal(t, "Test Payee     ", record.PayeeNameField())
    80  	require.Equal(t, "Y", record.TruncationIndicatorField())
    81  	require.Equal(t, "1", record.BOFDConversionIndicatorField())
    82  	require.Equal(t, "0", record.BOFDCorrectionIndicatorField())
    83  	require.Equal(t, " ", record.UserFieldField())
    84  	require.Equal(t, "   ", record.reservedField())
    85  }
    86  
    87  // testCDAddendumAString validates that a known parsed CheckDetailAddendumA can return to a string of the same value
    88  func testCDAddendumAString(t testing.TB) {
    89  	var line = "261121042882201809051              938383            01   Test Payee     Y10    "
    90  	r := NewReader(strings.NewReader(line))
    91  	r.line = line
    92  	clh := mockCashLetterHeader()
    93  	r.addCurrentCashLetter(NewCashLetter(clh))
    94  	bh := mockBundleHeader()
    95  	b := NewBundle(bh)
    96  	r.currentCashLetter.AddBundle(b)
    97  	r.addCurrentBundle(b)
    98  	cd := mockCheckDetail()
    99  	r.currentCashLetter.currentBundle.AddCheckDetail(cd)
   100  
   101  	require.NoError(t, r.parseCheckDetailAddendumA())
   102  	record := r.currentCashLetter.currentBundle.GetChecks()[0].CheckDetailAddendumA[0]
   103  
   104  	require.Equal(t, line, record.String())
   105  }
   106  
   107  // TestCDAddendumAString tests validating that a known parsed CheckDetailAddendumA can return to a string of the
   108  // same value
   109  func TestCDAddendumAString(t *testing.T) {
   110  	testCDAddendumAString(t)
   111  }
   112  
   113  // BenchmarkCDAddendumAString benchmarks validating that a known parsed CheckDetailAddendumA
   114  // can return to a string of the same value
   115  func BenchmarkCDAddendumAString(b *testing.B) {
   116  	b.ReportAllocs()
   117  	for i := 0; i < b.N; i++ {
   118  		testCDAddendumAString(b)
   119  	}
   120  }
   121  
   122  // TestCDAddendumARecordType validation
   123  func TestCDAddendumARecordType(t *testing.T) {
   124  	cdAddendumA := mockCheckDetailAddendumA()
   125  	cdAddendumA.recordType = "00"
   126  	err := cdAddendumA.Validate()
   127  	var e *FieldError
   128  	require.ErrorAs(t, err, &e)
   129  	require.Equal(t, "recordType", e.FieldName)
   130  }
   131  
   132  // TestCDAddendumAReturnLocationRoutingNumber validation
   133  func TestCDAddendumAReturnLocationRoutingNumber(t *testing.T) {
   134  	cdAddendumA := mockCheckDetailAddendumA()
   135  	cdAddendumA.ReturnLocationRoutingNumber = "X"
   136  	err := cdAddendumA.Validate()
   137  	var e *FieldError
   138  	require.ErrorAs(t, err, &e)
   139  	require.Equal(t, "ReturnLocationRoutingNumber", e.FieldName)
   140  }
   141  
   142  // TestCDAddendumABOFDAccountNumber validation
   143  func TestCDAddendumABOFDAccountNumber(t *testing.T) {
   144  	cdAddendumA := mockCheckDetailAddendumA()
   145  	cdAddendumA.BOFDAccountNumber = "®©"
   146  	err := cdAddendumA.Validate()
   147  	var e *FieldError
   148  	require.ErrorAs(t, err, &e)
   149  	require.Equal(t, "BOFDAccountNumber", e.FieldName)
   150  }
   151  
   152  // TestCDAddendumABOFDBranchCode validation
   153  func TestCDAddendumABOFDBranchCode(t *testing.T) {
   154  	cdAddendumA := mockCheckDetailAddendumA()
   155  	cdAddendumA.BOFDBranchCode = "®©"
   156  	err := cdAddendumA.Validate()
   157  	var e *FieldError
   158  	require.ErrorAs(t, err, &e)
   159  	require.Equal(t, "BOFDBranchCode", e.FieldName)
   160  }
   161  
   162  // TestCDAddendumAPayeeName validation
   163  func TestCDAddendumAPayeeName(t *testing.T) {
   164  	cdAddendumA := mockCheckDetailAddendumA()
   165  	cdAddendumA.PayeeName = "®©"
   166  	err := cdAddendumA.Validate()
   167  	var e *FieldError
   168  	require.ErrorAs(t, err, &e)
   169  	require.Equal(t, "PayeeName", e.FieldName)
   170  }
   171  
   172  // TestCDAddendumATruncationIndicator validation
   173  func TestCDAddendumATruncationIndicator(t *testing.T) {
   174  	cdAddendumA := mockCheckDetailAddendumA()
   175  	cdAddendumA.TruncationIndicator = "A"
   176  	err := cdAddendumA.Validate()
   177  	var e *FieldError
   178  	require.ErrorAs(t, err, &e)
   179  	require.Equal(t, "TruncationIndicator", e.FieldName)
   180  }
   181  
   182  // TestCDAddendumABOFDConversionIndicator validation
   183  func TestCDAddendumABOFDConversionIndicator(t *testing.T) {
   184  	cdAddendumA := mockCheckDetailAddendumA()
   185  	cdAddendumA.BOFDConversionIndicator = "99"
   186  	err := cdAddendumA.Validate()
   187  	var e *FieldError
   188  	require.ErrorAs(t, err, &e)
   189  	require.Equal(t, "BOFDConversionIndicator", e.FieldName)
   190  }
   191  
   192  // TestCDAddendumABOFDCorrectionIndicator validation
   193  func TestCDAddendumABOFDCorrectionIndicator(t *testing.T) {
   194  	cdAddendumA := mockCheckDetailAddendumA()
   195  	cdAddendumA.BOFDCorrectionIndicator = 10
   196  	err := cdAddendumA.Validate()
   197  	var e *FieldError
   198  	require.ErrorAs(t, err, &e)
   199  	require.Equal(t, "BOFDCorrectionIndicator", e.FieldName)
   200  }
   201  
   202  // TestCDAddendumAUserField validation
   203  func TestCDAddendumAUserField(t *testing.T) {
   204  	cdAddendumA := mockCheckDetailAddendumA()
   205  	cdAddendumA.UserField = "®©"
   206  	err := cdAddendumA.Validate()
   207  	var e *FieldError
   208  	require.ErrorAs(t, err, &e)
   209  	require.Equal(t, "UserField", e.FieldName)
   210  }
   211  
   212  // Field Inclusion
   213  
   214  // TestCDAddendumAFIRecordType validation
   215  func TestCDAddendumAFIRecordType(t *testing.T) {
   216  	cdAddendumA := mockCheckDetailAddendumA()
   217  	cdAddendumA.recordType = ""
   218  	err := cdAddendumA.Validate()
   219  	var e *FieldError
   220  	require.ErrorAs(t, err, &e)
   221  	require.Equal(t, "recordType", e.FieldName)
   222  }
   223  
   224  // TestCDAddendumAFIRecordNumber validation
   225  func TestCDAddendumAFIRecordNumber(t *testing.T) {
   226  	cdAddendumA := mockCheckDetailAddendumA()
   227  	cdAddendumA.RecordNumber = 0
   228  	err := cdAddendumA.Validate()
   229  	var e *FieldError
   230  	require.ErrorAs(t, err, &e)
   231  	require.Equal(t, "RecordNumber", e.FieldName)
   232  }
   233  
   234  // TestCDAddendumAFIReturnLocationRoutingNumber validation
   235  func TestCDAddendumAFIReturnLocationRoutingNumber(t *testing.T) {
   236  	cdAddendumA := mockCheckDetailAddendumA()
   237  	cdAddendumA.ReturnLocationRoutingNumber = ""
   238  	err := cdAddendumA.Validate()
   239  	var e *FieldError
   240  	require.ErrorAs(t, err, &e)
   241  	require.Equal(t, "ReturnLocationRoutingNumber", e.FieldName)
   242  }
   243  
   244  // TestCDAddendumAFIReturnLocationRoutingNumberZero validation
   245  func TestCDAddendumAFIReturnLocationRoutingNumberZero(t *testing.T) {
   246  	cdAddendumA := mockCheckDetailAddendumA()
   247  	cdAddendumA.ReturnLocationRoutingNumber = "000000000"
   248  	err := cdAddendumA.Validate()
   249  	var e *FieldError
   250  	require.ErrorAs(t, err, &e)
   251  	require.Equal(t, "ReturnLocationRoutingNumber", e.FieldName)
   252  }
   253  
   254  // TestCDAddendumAFIBOFDEndorsementDate validation
   255  func TestCDAddendumAFIBOFDEndorsementDate(t *testing.T) {
   256  	cdAddendumA := mockCheckDetailAddendumA()
   257  	cdAddendumA.BOFDEndorsementDate = time.Time{}
   258  	err := cdAddendumA.Validate()
   259  	var e *FieldError
   260  	require.ErrorAs(t, err, &e)
   261  	require.Equal(t, "BOFDEndorsementDate", e.FieldName)
   262  }
   263  
   264  // TestCDAddendumAFIBOFDItemSequenceNumber validation
   265  func TestCDAddendumAFIBOFDItemSequenceNumber(t *testing.T) {
   266  	cdAddendumA := mockCheckDetailAddendumA()
   267  	cdAddendumA.BOFDItemSequenceNumber = "               "
   268  	err := cdAddendumA.Validate()
   269  	var e *FieldError
   270  	require.ErrorAs(t, err, &e)
   271  	require.Equal(t, "BOFDItemSequenceNumber", e.FieldName)
   272  }
   273  
   274  // TestCDAddendumAFITruncationIndicator validation
   275  func TestCDAddendumAFITruncationIndicator(t *testing.T) {
   276  	cdAddendumA := mockCheckDetailAddendumA()
   277  	cdAddendumA.TruncationIndicator = ""
   278  	err := cdAddendumA.Validate()
   279  	var e *FieldError
   280  	require.ErrorAs(t, err, &e)
   281  	require.Equal(t, "TruncationIndicator", e.FieldName)
   282  }
   283  
   284  // End FieldInclusion
   285  
   286  // TestAlphaFieldTrim validation
   287  func TestAlphaFieldTrim(t *testing.T) {
   288  	cdAddendumA := mockCheckDetailAddendumA()
   289  	cdAddendumA.PayeeName = "Payee Name James Steel"
   290  	require.Len(t, cdAddendumA.PayeeNameField(), 15)
   291  }
   292  
   293  // TestStringFieldTrim validation
   294  func TestStringFieldTrim(t *testing.T) {
   295  	cdAddendumA := mockCheckDetailAddendumA()
   296  	cdAddendumA.ReturnLocationRoutingNumber = "12345678912345"
   297  	require.Len(t, cdAddendumA.ReturnLocationRoutingNumberField(), 9)
   298  }