-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathsenderSupplied_test.go
160 lines (120 loc) · 4.62 KB
/
senderSupplied_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package wire
import (
"errors"
"strings"
"testing"
"github.com/moov-io/base"
"github.com/stretchr/testify/require"
)
// mockSenderSupplied creates a SenderSupplied
func mockSenderSupplied() *SenderSupplied {
ss := NewSenderSupplied()
ss.UserRequestCorrelation = "User Req"
ss.MessageDuplicationCode = MessageDuplicationOriginal
return ss
}
// TestMockSenderSupplied validates mockSenderSupplied
func TestMockSenderSupplied(t *testing.T) {
ss := mockSenderSupplied()
require.NoError(t, ss.Validate(), "mockSenderSupplied does not validate and will break other tests")
}
// TestSenderSuppliedUserRequestCorrelationAlphaNumeric validates SenderSupplied UserRequestCorrelation is alphanumeric
func TestSenderSuppliedUserRequestCorrelationAlphaNumeric(t *testing.T) {
ss := mockSenderSupplied()
ss.UserRequestCorrelation = "®"
err := ss.Validate()
require.EqualError(t, err, fieldError("UserRequestCorrelation", ErrNonAlphanumeric, ss.UserRequestCorrelation).Error())
}
// TestSenderSuppliedFormatVersionValid validates SenderSupplied FormatVersion
func TestSenderSuppliedFormatVersionValid(t *testing.T) {
ss := mockSenderSupplied()
ss.FormatVersion = "55"
err := ss.Validate()
if !base.Match(err, ErrFormatVersion) {
t.Errorf("%T: %s", err, err)
}
}
// TestSenderSuppliedProductionCodeValid validates SenderSupplied ProductionCode
func TestSenderSuppliedProductionCodeValid(t *testing.T) {
ss := mockSenderSupplied()
ss.TestProductionCode = "Z"
err := ss.Validate()
if !base.Match(err, ErrTestProductionCode) {
t.Errorf("%T: %s", err, err)
}
}
// TestSenderSuppliedMessageDuplicationCodeValid validates SenderSupplied MessageDuplicationCode
func TestSenderSuppliedMessageDuplicationCodeValid(t *testing.T) {
ss := mockSenderSupplied()
ss.MessageDuplicationCode = "Z"
err := ss.Validate()
if !base.Match(err, ErrMessageDuplicationCode) {
t.Errorf("%T: %s", err, err)
}
}
// TestSenderSuppliedUserRequestCorrelation validates SenderSupplied UserRequestCorrelation is optional
func TestSenderSuppliedUserRequestCorrelation(t *testing.T) {
ss := mockSenderSupplied()
ss.UserRequestCorrelation = ""
err := ss.Validate()
require.NoError(t, err)
var line = "{1500}30 T "
r := NewReader(strings.NewReader(line))
r.line = line
err = r.parseSenderSupplied()
require.NoError(t, err)
}
// TestParseSenderSuppliedWrongLength parses a wrong SenderSupplied record length
func TestParseSenderSuppliedWrongLength(t *testing.T) {
var line = "{1500}30P"
r := NewReader(strings.NewReader(line))
r.line = line
err := r.parseSenderSupplied()
require.EqualError(t, err, r.parseError(NewTagMinLengthErr(11, len(r.line))).Error())
}
// TestParseSenderSuppliedReaderParseError parses a wrong SenderSupplied reader parse error
func TestParseSenderSuppliedReaderParseError(t *testing.T) {
var line = "{1500}25User ReqP "
r := NewReader(strings.NewReader(line))
r.line = line
err := r.parseSenderSupplied()
require.EqualError(t, err, r.parseError(fieldError("FormatVersion", ErrFormatVersion, "25")).Error())
_, err = r.Read()
require.EqualError(t, err, r.parseError(fieldError("FormatVersion", ErrFormatVersion, "25")).Error())
}
// TestSenderSuppliedTagError validates a SenderSupplied tag
func TestSenderSuppliedTagError(t *testing.T) {
ss := mockSenderSupplied()
ss.tag = "{9999}"
require.EqualError(t, ss.Validate(), fieldError("tag", ErrValidTagForType, ss.tag).Error())
}
// TestStringSenderSuppliedVariableLength parses using variable length
func TestStringSenderSuppliedVariableLength(t *testing.T) {
var line = "{1500}301*T "
r := NewReader(strings.NewReader(line))
r.line = line
err := r.parseSenderSupplied()
require.ErrorContains(t, err, ErrValidLength.Error())
line = "{1500}301 T NNN "
r = NewReader(strings.NewReader(line))
r.line = line
err = r.parseSenderSupplied()
require.ErrorContains(t, err, r.parseError(NewTagMaxLengthErr(errors.New(""))).Error())
line = "{1500}301*T** "
r = NewReader(strings.NewReader(line))
r.line = line
err = r.parseSenderSupplied()
require.ErrorContains(t, err, ErrValidLength.Error())
}
// TestStringSenderSuppliedOptions validates Format() formatted according to the FormatOptions
func TestStringSenderSuppliedOptions(t *testing.T) {
var line = "{1500}301 T "
r := NewReader(strings.NewReader(line))
r.line = line
err := r.parseSenderSupplied()
require.NoError(t, err)
record := r.currentFEDWireMessage.SenderSupplied
require.Equal(t, "{1500}301 T ", record.String())
require.Equal(t, "{1500}301 T ", record.Format(FormatOptions{VariableLengthFields: true}))
require.Equal(t, record.String(), record.Format(FormatOptions{VariableLengthFields: false}))
}