github.com/moov-io/imagecashletter@v0.10.1/routingNumberSummary_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  // mockRoutingNumberSummary creates a RoutingNumberSummary
    15  func mockRoutingNumberSummary() *RoutingNumberSummary {
    16  	rns := NewRoutingNumberSummary()
    17  	rns.CashLetterRoutingNumber = "231380104"
    18  	rns.RoutingNumberTotalAmount = 100000
    19  	rns.RoutingNumberItemCount = 1
    20  	rns.UserField = ""
    21  	return rns
    22  }
    23  
    24  func TestRoutingNumberSummaryParseErr(t *testing.T) {
    25  	var r RoutingNumberSummary
    26  	r.Parse("asdlahsakjajf")
    27  	require.Equal(t, "", r.CashLetterRoutingNumber)
    28  }
    29  
    30  // TestRoutingNumberSummary creates a ReturnRoutingNumberSummary
    31  func TestRoutingNumberSummary(t *testing.T) {
    32  	rns := mockRoutingNumberSummary()
    33  	require.NoError(t, rns.Validate())
    34  }
    35  
    36  // TestParseRoutingNumberSummary validates parsing a RoutingNumberSummary
    37  func TestParseRoutingNumberSummary(t *testing.T) {
    38  	var line = "8523138010400000000100000000001                                                 "
    39  	r := NewReader(strings.NewReader(line))
    40  	r.line = line
    41  	clh := mockCashLetterHeader()
    42  	r.addCurrentCashLetter(NewCashLetter(clh))
    43  	bh := mockBundleHeader()
    44  	b := NewBundle(bh)
    45  	rns := mockRoutingNumberSummary()
    46  	r.currentCashLetter.AddBundle(b)
    47  	r.addCurrentBundle(b)
    48  	r.currentCashLetter.AddRoutingNumberSummary(rns)
    49  	r.addCurrentRoutingNumberSummary(rns)
    50  
    51  	require.NoError(t, r.parseRoutingNumberSummary())
    52  	record := r.currentCashLetter.currentRoutingNumberSummary
    53  
    54  	require.Equal(t, "85", record.recordType)
    55  	require.Equal(t, "231380104", record.CashLetterRoutingNumberField())
    56  	require.Equal(t, "00000000100000", record.RoutingNumberTotalAmountField())
    57  	require.Equal(t, "000001", record.RoutingNumberItemCountField())
    58  }
    59  
    60  // testRoutingNumberSummaryString validates that a known parsed RoutingNumberSummary can return to a string of the same value
    61  func testRoutingNumberSummaryString(t testing.TB) {
    62  	var line = "8523138010400000000100000000001                                                 "
    63  	r := NewReader(strings.NewReader(line))
    64  	r.line = line
    65  	clh := mockCashLetterHeader()
    66  	r.addCurrentCashLetter(NewCashLetter(clh))
    67  	bh := mockBundleHeader()
    68  	rb := NewBundle(bh)
    69  	rns := mockRoutingNumberSummary()
    70  	r.currentCashLetter.AddBundle(rb)
    71  	r.addCurrentBundle(rb)
    72  	r.currentCashLetter.AddRoutingNumberSummary(rns)
    73  	r.addCurrentRoutingNumberSummary(rns)
    74  
    75  	require.NoError(t, r.parseRoutingNumberSummary())
    76  	record := r.currentCashLetter.currentRoutingNumberSummary
    77  
    78  	require.Equal(t, line, record.String())
    79  }
    80  
    81  // TestRoutingNumberSummaryString tests validating that a known parsed RoutingNumberSummary an return to a string of the
    82  // same value
    83  func TestRoutingNumberSummaryString(t *testing.T) {
    84  	testRoutingNumberSummaryString(t)
    85  }
    86  
    87  // BenchmarkRoutingNumberSummaryString benchmarks validating that a known parsed RoutingNumberSummary
    88  // can return to a string of the same value
    89  func BenchmarkRoutingNumberSummaryString(b *testing.B) {
    90  	b.ReportAllocs()
    91  	for i := 0; i < b.N; i++ {
    92  		testRoutingNumberSummaryString(b)
    93  	}
    94  }
    95  
    96  // TestRoutingNumberSummaryRecordType validation
    97  func TestRoutingNumberSummaryRecordType(t *testing.T) {
    98  	rns := mockRoutingNumberSummary()
    99  	rns.recordType = "00"
   100  	err := rns.Validate()
   101  	var e *FieldError
   102  	require.ErrorAs(t, err, &e)
   103  	require.Equal(t, "recordType", e.FieldName)
   104  }
   105  
   106  // TestRoutingNumberSummaryUserField validation
   107  func TestRoutingNumberSummaryUserField(t *testing.T) {
   108  	rns := mockRoutingNumberSummary()
   109  	rns.UserField = "®©"
   110  	err := rns.Validate()
   111  	var e *FieldError
   112  	require.ErrorAs(t, err, &e)
   113  	require.Equal(t, "UserField", e.FieldName)
   114  }
   115  
   116  // Field Inclusion
   117  
   118  // TestRoutingNumberSummaryFIRecordType validation
   119  func TestRoutingNumberSummaryFIRecordType(t *testing.T) {
   120  	rns := mockRoutingNumberSummary()
   121  	rns.recordType = ""
   122  	err := rns.Validate()
   123  	var e *FieldError
   124  	require.ErrorAs(t, err, &e)
   125  	require.Equal(t, "recordType", e.FieldName)
   126  }
   127  
   128  // TestRoutingNumberSummaryFICashLetterRoutingNumber validation
   129  func TestRoutingNumberSummaryFICashLetterRoutingNumber(t *testing.T) {
   130  	rns := mockRoutingNumberSummary()
   131  	rns.CashLetterRoutingNumber = ""
   132  	err := rns.Validate()
   133  	var e *FieldError
   134  	require.ErrorAs(t, err, &e)
   135  	require.Equal(t, "CashLetterRoutingNumber", e.FieldName)
   136  }