Skip to content

Commit dacb89f

Browse files
zherrcbusbey
authored andcommitted
More verbose error text on conditionally required field BMR + unit test coverage for errors.go (#131)
1 parent 66b8da5 commit dacb89f

File tree

2 files changed

+256
-1
lines changed

2 files changed

+256
-1
lines changed

errors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func ValueIsIncorrect(tag Tag) MessageRejectError {
7878

7979
//ConditionallyRequiredFieldMissing indicates that the requested field could not be found in the FIX message.
8080
func ConditionallyRequiredFieldMissing(tag Tag) MessageRejectError {
81-
return NewBusinessMessageRejectError("Conditionally required field missing", rejectReasonConditionallyRequiredFieldMissing, &tag)
81+
return NewBusinessMessageRejectError(fmt.Sprintf("Conditionally Required Field Missing (%d)", tag), rejectReasonConditionallyRequiredFieldMissing, &tag)
8282
}
8383

8484
//valueIsIncorrectNoTag returns an error indicating a field with value that is not valid.

errors_test.go

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
package quickfix
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
"testing"
7+
)
8+
9+
func TestNewMessageRejectError(t *testing.T) {
10+
var (
11+
expectedErrorString = "Custom error"
12+
expectedRejectReason = 5
13+
expectedRefTagID Tag = 44
14+
expectedIsBusinessReject = false
15+
)
16+
msgRej := NewMessageRejectError(expectedErrorString, expectedRejectReason, &expectedRefTagID)
17+
18+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
19+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
20+
}
21+
if msgRej.RejectReason() != expectedRejectReason {
22+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
23+
}
24+
if *msgRej.RefTagID() != expectedRefTagID {
25+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
26+
}
27+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
28+
t.Error("Expected IsBusinessReject to be false\n")
29+
}
30+
}
31+
32+
func TestNewBusinessMessageRejectError(t *testing.T) {
33+
var (
34+
expectedErrorString = "Custom error"
35+
expectedRejectReason = 5
36+
expectedRefTagID Tag = 44
37+
expectedIsBusinessReject = true
38+
)
39+
msgRej := NewBusinessMessageRejectError(expectedErrorString, expectedRejectReason, &expectedRefTagID)
40+
41+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
42+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
43+
}
44+
if msgRej.RejectReason() != expectedRejectReason {
45+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
46+
}
47+
if *msgRej.RefTagID() != expectedRefTagID {
48+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
49+
}
50+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
51+
t.Error("Expected IsBusinessReject to be true\n")
52+
}
53+
}
54+
55+
func TestIncorrectDataFormatForValue(t *testing.T) {
56+
var (
57+
expectedErrorString = "Incorrect data format for value"
58+
expectedRejectReason = 6
59+
expectedRefTagID Tag = 44
60+
expectedIsBusinessReject = false
61+
)
62+
msgRej := IncorrectDataFormatForValue(expectedRefTagID)
63+
64+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
65+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
66+
}
67+
if msgRej.RejectReason() != expectedRejectReason {
68+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
69+
}
70+
if *msgRej.RefTagID() != expectedRefTagID {
71+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
72+
}
73+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
74+
t.Error("Expected IsBusinessReject to be false\n")
75+
}
76+
}
77+
78+
func TestValueIsIncorrect(t *testing.T) {
79+
var (
80+
expectedErrorString = "Value is incorrect (out of range) for this tag"
81+
expectedRejectReason = 5
82+
expectedRefTagID Tag = 44
83+
expectedIsBusinessReject = false
84+
)
85+
msgRej := ValueIsIncorrect(expectedRefTagID)
86+
if *msgRej.RefTagID() != expectedRefTagID {
87+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
88+
}
89+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
90+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
91+
}
92+
if msgRej.RejectReason() != expectedRejectReason {
93+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
94+
}
95+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
96+
t.Error("Expected IsBusinessReject to be false\n")
97+
}
98+
}
99+
100+
func TestConditionallyRequiredFieldMissing(t *testing.T) {
101+
var (
102+
expectedRejectReason = 5
103+
expectedRefTagID Tag = 44
104+
expectedErrorString = fmt.Sprintf("Conditionally Required Field Missing (%d)", expectedRefTagID)
105+
expectedIsBusinessReject = true
106+
)
107+
msgRej := ConditionallyRequiredFieldMissing(expectedRefTagID)
108+
if *msgRej.RefTagID() != expectedRefTagID {
109+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
110+
}
111+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
112+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
113+
}
114+
if msgRej.RejectReason() != expectedRejectReason {
115+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
116+
}
117+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
118+
t.Error("Expected IsBusinessReject to be true\n")
119+
}
120+
}
121+
122+
func TestInvalidMessageType(t *testing.T) {
123+
var (
124+
expectedErrorString = "Invalid MsgType"
125+
expectedRejectReason = 11
126+
expectedIsBusinessReject = false
127+
)
128+
msgRej := InvalidMessageType()
129+
130+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
131+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
132+
}
133+
if msgRej.RejectReason() != expectedRejectReason {
134+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
135+
}
136+
if msgRej.RefTagID() != nil {
137+
t.Errorf("expected: nil, got: %d\n", msgRej.RefTagID())
138+
}
139+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
140+
t.Error("Expected IsBusinessReject to be false\n")
141+
}
142+
}
143+
144+
func TestUnsupportedMessageType(t *testing.T) {
145+
var (
146+
expectedRejectReason = 3
147+
expectedErrorString = "Unsupported Message Type"
148+
expectedIsBusinessReject = true
149+
)
150+
msgRej := UnsupportedMessageType()
151+
if msgRej.RefTagID() != nil {
152+
t.Errorf("expected: nil, got: %d\n", msgRej.RefTagID())
153+
}
154+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
155+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
156+
}
157+
if msgRej.RejectReason() != expectedRejectReason {
158+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
159+
}
160+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
161+
t.Error("Expected IsBusinessReject to be true\n")
162+
}
163+
}
164+
165+
func TestTagNotDefinedForThisMessageType(t *testing.T) {
166+
var (
167+
expectedErrorString = "Tag not defined for this message type"
168+
expectedRejectReason = 2
169+
expectedRefTagID Tag = 44
170+
expectedIsBusinessReject = false
171+
)
172+
msgRej := TagNotDefinedForThisMessageType(expectedRefTagID)
173+
174+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
175+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
176+
}
177+
if msgRej.RejectReason() != expectedRejectReason {
178+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
179+
}
180+
if *msgRej.RefTagID() != expectedRefTagID {
181+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
182+
}
183+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
184+
t.Error("Expected IsBusinessReject to be false\n")
185+
}
186+
}
187+
188+
func TestRequiredTagMissing(t *testing.T) {
189+
var (
190+
expectedErrorString = "Required tag missing"
191+
expectedRejectReason = 1
192+
expectedRefTagID Tag = 44
193+
expectedIsBusinessReject = false
194+
)
195+
msgRej := RequiredTagMissing(expectedRefTagID)
196+
197+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
198+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
199+
}
200+
if msgRej.RejectReason() != expectedRejectReason {
201+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
202+
}
203+
if *msgRej.RefTagID() != expectedRefTagID {
204+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
205+
}
206+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
207+
t.Error("Expected IsBusinessReject to be false\n")
208+
}
209+
}
210+
211+
func TestTagSpecifiedWithoutAValue(t *testing.T) {
212+
var (
213+
expectedErrorString = "Tag specified without a value"
214+
expectedRejectReason = 4
215+
expectedRefTagID Tag = 44
216+
expectedIsBusinessReject = false
217+
)
218+
msgRej := TagSpecifiedWithoutAValue(expectedRefTagID)
219+
220+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
221+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
222+
}
223+
if msgRej.RejectReason() != expectedRejectReason {
224+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
225+
}
226+
if *msgRej.RefTagID() != expectedRefTagID {
227+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
228+
}
229+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
230+
t.Error("Expected IsBusinessReject to be false\n")
231+
}
232+
}
233+
234+
func TestInvalidTagNumber(t *testing.T) {
235+
var (
236+
expectedErrorString = "Invalid tag number"
237+
expectedRejectReason = 0
238+
expectedRefTagID Tag = 44
239+
expectedIsBusinessReject = false
240+
)
241+
msgRej := InvalidTagNumber(expectedRefTagID)
242+
243+
if strings.Compare(msgRej.Error(), expectedErrorString) != 0 {
244+
t.Errorf("expected: %s, got: %s\n", expectedErrorString, msgRej.Error())
245+
}
246+
if msgRej.RejectReason() != expectedRejectReason {
247+
t.Errorf("expected: %d, got: %d\n", expectedRejectReason, msgRej.RejectReason())
248+
}
249+
if *msgRej.RefTagID() != expectedRefTagID {
250+
t.Errorf("expected: %d, got: %d\n", expectedRefTagID, msgRej.RefTagID())
251+
}
252+
if msgRej.IsBusinessReject() != expectedIsBusinessReject {
253+
t.Error("Expected IsBusinessReject to be false\n")
254+
}
255+
}

0 commit comments

Comments
 (0)