suretax 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +27 -0
- data/.travis.yml +14 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +74 -0
- data/Gemfile.travis +12 -0
- data/LICENSE.txt +22 -0
- data/NOTES.md +3 -0
- data/README.md +58 -0
- data/Rakefile +1 -0
- data/circle.yml +7 -0
- data/lib/suretax.rb +24 -0
- data/lib/suretax/api.rb +7 -0
- data/lib/suretax/api/cancel_request.rb +64 -0
- data/lib/suretax/api/group.rb +16 -0
- data/lib/suretax/api/item_message.rb +13 -0
- data/lib/suretax/api/request.rb +133 -0
- data/lib/suretax/api/request_item.rb +84 -0
- data/lib/suretax/api/response.rb +53 -0
- data/lib/suretax/api/tax.rb +25 -0
- data/lib/suretax/api/tax_amount.rb +46 -0
- data/lib/suretax/concerns.rb +7 -0
- data/lib/suretax/concerns/validatable.rb +208 -0
- data/lib/suretax/configuration.rb +84 -0
- data/lib/suretax/connection.rb +48 -0
- data/lib/suretax/constants.rb +7 -0
- data/lib/suretax/constants/regulatory_codes.rb +11 -0
- data/lib/suretax/constants/response_groups.rb +8 -0
- data/lib/suretax/constants/sales_type_codes.rb +8 -0
- data/lib/suretax/constants/tax_situs_codes.rb +12 -0
- data/lib/suretax/constants/transaction_type_codes.rb +505 -0
- data/lib/suretax/response.rb +70 -0
- data/lib/suretax/version.rb +3 -0
- data/spec/lib/suretax/api/group_spec.rb +50 -0
- data/spec/lib/suretax/api/request_item_spec.rb +54 -0
- data/spec/lib/suretax/api/request_item_validations_spec.rb +237 -0
- data/spec/lib/suretax/api/request_spec.rb +197 -0
- data/spec/lib/suretax/api/request_validations_spec.rb +384 -0
- data/spec/lib/suretax/api/response_spec.rb +165 -0
- data/spec/lib/suretax/api/tax_amount_spec.rb +37 -0
- data/spec/lib/suretax/api/tax_spec.rb +59 -0
- data/spec/lib/suretax/configuration_spec.rb +97 -0
- data/spec/lib/suretax/connection_spec.rb +77 -0
- data/spec/lib/suretax/response_spec.rb +136 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/cancellation_helper.rb +31 -0
- data/spec/support/connection_shared_examples.rb +37 -0
- data/spec/support/request_helper.rb +309 -0
- data/spec/support/suretax_helper.rb +27 -0
- data/spec/support/validations_shared_examples.rb +28 -0
- data/suretax.gemspec +33 -0
- metadata +281 -0
@@ -0,0 +1,384 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Suretax API Request Validations" do
|
4
|
+
|
5
|
+
let(:request) do
|
6
|
+
Suretax::Api::Request.new(suretax_valid_request_params)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#items" do
|
10
|
+
context "when valid" do
|
11
|
+
it "shows errors" do
|
12
|
+
expect(request.errors.any?).to eq false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when invalid" do
|
17
|
+
it "shows no errors" do
|
18
|
+
item = Suretax::Api::RequestItem.new(suretax_valid_request_item_params)
|
19
|
+
item.customer_number = 'a' * 9
|
20
|
+
item.regulatory_code = 11111
|
21
|
+
request.items = [item]
|
22
|
+
|
23
|
+
expect(request.errors.any?).to eq true
|
24
|
+
expect(request.errors.messages).to \
|
25
|
+
eq([%Q{Invalid items: ["Invalid customer_number: aaaaaaaaa, Invalid regulatory_code: 11111"]}])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#client_number' do
|
31
|
+
context 'when present' do
|
32
|
+
it 'can be ten characters or less' do
|
33
|
+
request.client_number = '1234567890'
|
34
|
+
expect(request.errors.any?).to eq false
|
35
|
+
|
36
|
+
request.client_number = '12345678901'
|
37
|
+
expect(request.errors.any?).to eq true
|
38
|
+
expect(request.errors.messages).to eq [%Q{Invalid client_number: 12345678901}]
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'must be a number' do
|
42
|
+
request.client_number = '1'
|
43
|
+
expect(request.errors.any?).to eq false
|
44
|
+
|
45
|
+
request.client_number = 'abcdefghij'
|
46
|
+
expect(request.errors.any?).to eq true
|
47
|
+
expect(request.errors.messages).to eq [%Q{Invalid client_number: abcdefghij}]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when absent' do
|
52
|
+
it 'should fail validation' do
|
53
|
+
request.client_number = nil
|
54
|
+
expect(request.errors.any?).to eq true
|
55
|
+
expect(request.errors.messages).to eq [%Q{Invalid client_number: nil}]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#business_unit' do
|
61
|
+
context 'when present' do
|
62
|
+
it 'can be blank' do
|
63
|
+
request.business_unit = nil
|
64
|
+
expect(request.errors.any?).to eq false
|
65
|
+
|
66
|
+
request.business_unit = ''
|
67
|
+
expect(request.errors.any?).to eq false
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'can be 20 characters or less' do
|
71
|
+
request.business_unit = 'a' * 5
|
72
|
+
expect(request.errors.any?).to eq false
|
73
|
+
|
74
|
+
request.business_unit = 'a' * 20
|
75
|
+
expect(request.errors.any?).to eq false
|
76
|
+
|
77
|
+
request.business_unit = 'a' * 21
|
78
|
+
expect(request.errors.any?).to eq true
|
79
|
+
expect(request.errors.messages).to eq [%Q{Invalid business_unit: #{'a' * 21}}]
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'must be alphanumeric' do
|
83
|
+
request.business_unit = 'aa124'
|
84
|
+
expect(request.errors.any?).to eq false
|
85
|
+
|
86
|
+
request.business_unit = 'a_34'
|
87
|
+
expect(request.errors.any?).to eq true
|
88
|
+
expect(request.errors.messages).to eq [%Q{Invalid business_unit: a_34}]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when absent' do
|
93
|
+
it 'should pass validation' do
|
94
|
+
request.business_unit = nil
|
95
|
+
expect(request.errors.any?).to eq false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#validation_key' do
|
101
|
+
context 'when present' do
|
102
|
+
it 'must be a maximum of 36 characters' do
|
103
|
+
request.validation_key = 'a' * 36
|
104
|
+
expect(request.errors.any?).to eq false
|
105
|
+
|
106
|
+
request.validation_key = 'a' * 37
|
107
|
+
expect(request.errors.any?).to eq true
|
108
|
+
expect(request.errors.messages).to eq [%Q{Invalid validation_key: #{'a' * 37}}]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when absent' do
|
113
|
+
it 'should fail validation' do
|
114
|
+
request.validation_key = nil
|
115
|
+
expect(request.errors.any?).to eq true
|
116
|
+
expect(request.errors.messages).to eq [%Q{Invalid validation_key: nil}]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '#data_year' do
|
122
|
+
context 'when present' do
|
123
|
+
it 'must be a number' do
|
124
|
+
request.data_year = 'b' * 4
|
125
|
+
expect(request.errors.any?).to eq true
|
126
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: #{'b' * 4}}]
|
127
|
+
|
128
|
+
request.data_year = '-' * 4
|
129
|
+
expect(request.errors.any?).to eq true
|
130
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: #{'-' * 4}}]
|
131
|
+
|
132
|
+
request.data_year = '2014'
|
133
|
+
expect(request.errors.any?).to eq false
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'must be exactly four digits' do
|
137
|
+
request.data_year = '2014'
|
138
|
+
expect(request.errors.any?).to eq false
|
139
|
+
|
140
|
+
request.data_year = '20120'
|
141
|
+
expect(request.errors.any?).to eq true
|
142
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: 20120}]
|
143
|
+
|
144
|
+
request.data_year = '201'
|
145
|
+
expect(request.errors.any?).to eq true
|
146
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: 201}]
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'must be in the range 1990-2050' do
|
150
|
+
request.data_year = '1989'
|
151
|
+
expect(request.errors.any?).to eq true
|
152
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: 1989}]
|
153
|
+
|
154
|
+
request.data_year = '2051'
|
155
|
+
expect(request.errors.any?).to eq true
|
156
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: 2051}]
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'when absent' do
|
161
|
+
it 'fails validation' do
|
162
|
+
request.data_year = nil
|
163
|
+
expect(request.errors.any?).to eq true
|
164
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_year: nil}]
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe '#data_month' do
|
170
|
+
context 'when present' do
|
171
|
+
it "must allow all valid month numbers" do
|
172
|
+
(1..12).each do |month_number|
|
173
|
+
request.data_month = month_number.to_s
|
174
|
+
expect(request.errors.any?).to eq false
|
175
|
+
|
176
|
+
request.data_month = "%02d" % month_number.to_s
|
177
|
+
expect(request.errors.any?).to eq false
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
it "must allow all valid month numbers with a preceding zero" do
|
182
|
+
(1..12).each do |month_number|
|
183
|
+
request.data_month = "%02d" % month_number.to_s
|
184
|
+
expect(request.errors.any?).to eq false
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'must not allow invalid months' do
|
189
|
+
request.data_month = '13'
|
190
|
+
expect(request.errors.any?).to eq true
|
191
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_month: 13}]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context 'when absent' do
|
196
|
+
it 'should fail validation' do
|
197
|
+
request.data_month = nil
|
198
|
+
expect(request.errors.any?).to eq true
|
199
|
+
expect(request.errors.messages).to eq [%Q{Invalid data_month: nil}]
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
describe '#total_revenue' do
|
205
|
+
context 'when present' do
|
206
|
+
it 'can only be digits and the minus symbol' do
|
207
|
+
request.total_revenue = 'abcdefghi.jklm'
|
208
|
+
expect(request.errors.any?).to eq true
|
209
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: abcdefghi.jklm}]
|
210
|
+
|
211
|
+
request.total_revenue = '+1234'
|
212
|
+
expect(request.errors.any?).to eq true
|
213
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: +1234}]
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'can have up to four decimal places' do
|
217
|
+
request.total_revenue = '123456789.1234'
|
218
|
+
expect(request.errors.any?).to eq false
|
219
|
+
|
220
|
+
request.total_revenue = '123456789.1'
|
221
|
+
expect(request.errors.any?).to eq false
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'must not have more than four decimal places' do
|
225
|
+
request.total_revenue = '123456789.12345'
|
226
|
+
expect(request.errors.any?).to eq true
|
227
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: 123456789.12345}]
|
228
|
+
end
|
229
|
+
|
230
|
+
context 'and when the value is positive' do
|
231
|
+
it 'should have no symbol' do
|
232
|
+
request.total_revenue = '+23456789.1234'
|
233
|
+
expect(request.errors.any?).to eq true
|
234
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: +23456789.1234}]
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'can have up to nine positions to the left of the decimal' do
|
238
|
+
request.total_revenue = '123456789.1234'
|
239
|
+
expect(request.errors.any?).to eq false
|
240
|
+
|
241
|
+
request.total_revenue = '1.1234'
|
242
|
+
expect(request.errors.any?).to eq false
|
243
|
+
|
244
|
+
request.total_revenue = '1234567890.1234'
|
245
|
+
expect(request.errors.any?).to eq true
|
246
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: 1234567890.1234}]
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'can be a simple integer' do
|
250
|
+
request.total_revenue = '1'
|
251
|
+
expect(request.errors.any?).to eq false
|
252
|
+
end
|
253
|
+
|
254
|
+
end
|
255
|
+
|
256
|
+
context 'and when the value is negative' do
|
257
|
+
it 'should have a "minus" symbol in the first position' do
|
258
|
+
request.total_revenue = '-23456789.1234'
|
259
|
+
expect(request.errors.any?).to eq false
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'must have nine positions to the left of the decimal' do
|
263
|
+
request.total_revenue = '-23456789.1234'
|
264
|
+
expect(request.errors.any?).to eq false
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'must not have more than nine positions to the left of the decimal' do
|
268
|
+
request.total_revenue = '-234567890.1234'
|
269
|
+
expect(request.errors.any?).to eq true
|
270
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: -234567890.1234}]
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
context 'when absent' do
|
276
|
+
it 'should fail validation' do
|
277
|
+
request.total_revenue = nil
|
278
|
+
expect(request.errors.any?).to eq true
|
279
|
+
expect(request.errors.messages).to eq [%Q{Invalid total_revenue: nil}]
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
describe '#client_tracking' do
|
285
|
+
context 'when present' do
|
286
|
+
it 'must not be longer than 100 characters' do
|
287
|
+
request.client_tracking = 'a' * 101
|
288
|
+
expect(request.errors.any?).to eq true
|
289
|
+
expect(request.errors.messages).to eq [%Q{Invalid client_tracking: #{'a' * 101}}]
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
context 'when absent' do
|
294
|
+
it 'should pass validation' do
|
295
|
+
request.client_tracking = nil
|
296
|
+
expect(request.errors.any?).to eq false
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
describe '#return_file_code' do
|
302
|
+
context 'when present' do
|
303
|
+
it 'must be a valid code' do
|
304
|
+
request.return_file_code = 0
|
305
|
+
expect(request.errors.any?).to eq false
|
306
|
+
|
307
|
+
request.return_file_code = 'Q'
|
308
|
+
expect(request.errors.any?).to eq false
|
309
|
+
end
|
310
|
+
|
311
|
+
it 'cannot be any other value' do
|
312
|
+
request.return_file_code = 'a'
|
313
|
+
expect(request.errors.any?).to eq true
|
314
|
+
expect(request.errors.messages).to eq [%Q{Invalid return_file_code: a}]
|
315
|
+
|
316
|
+
request.return_file_code = 1
|
317
|
+
expect(request.errors.any?).to eq true
|
318
|
+
expect(request.errors.messages).to eq [%Q{Invalid return_file_code: 1}]
|
319
|
+
|
320
|
+
request.return_file_code = '_'
|
321
|
+
expect(request.errors.any?).to eq true
|
322
|
+
expect(request.errors.messages).to eq [%Q{Invalid return_file_code: _}]
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
context 'when absent' do
|
327
|
+
it 'should fail validation' do
|
328
|
+
request.return_file_code = nil
|
329
|
+
expect(request.errors.any?).to eq true
|
330
|
+
expect(request.errors.messages).to eq [%Q{Invalid return_file_code: nil}]
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe '#response_group' do
|
336
|
+
context 'when present' do
|
337
|
+
it "must be a valid code" do
|
338
|
+
%w{00 01 02 03}.each do |code|
|
339
|
+
request.response_group = code
|
340
|
+
expect(request.errors.any?).to eq false
|
341
|
+
end
|
342
|
+
|
343
|
+
%w{a 04 _}.each do |wrong_value|
|
344
|
+
request.response_group = wrong_value
|
345
|
+
expect(request.errors.any?).to eq true
|
346
|
+
expect(request.errors.messages).to eq [%Q{Invalid response_group: #{wrong_value}}]
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
context 'when absent' do
|
352
|
+
it 'should fail validation' do
|
353
|
+
request.response_group = nil
|
354
|
+
expect(request.errors.any?).to eq true
|
355
|
+
expect(request.errors.messages).to eq [%Q{Invalid response_group: nil}]
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
describe '#response_type' do
|
361
|
+
context 'when present' do
|
362
|
+
it "must be a valid code combination'" do
|
363
|
+
%w{D1 D9 S1 S9}.each do |type|
|
364
|
+
request.response_type = type
|
365
|
+
expect(request.errors.any?).to eq false
|
366
|
+
end
|
367
|
+
|
368
|
+
%w{a D0 S10 _}.each do |bad_type|
|
369
|
+
request.response_type = bad_type
|
370
|
+
expect(request.errors.any?).to eq true
|
371
|
+
expect(request.errors.messages).to eq [%Q{Invalid response_type: #{bad_type}}]
|
372
|
+
end
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
context 'when absent' do
|
377
|
+
it 'should fail validation' do
|
378
|
+
request.response_type = nil
|
379
|
+
expect(request.errors.any?).to eq true
|
380
|
+
expect(request.errors.messages).to eq [%Q{Invalid response_type: nil}]
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Suretax::Api::Response do
|
4
|
+
|
5
|
+
let(:api_response) { Suretax::Api::Response.new(response_body) }
|
6
|
+
|
7
|
+
|
8
|
+
context 'for a normal post request' do
|
9
|
+
context 'with a successful response' do
|
10
|
+
let(:response_body) { valid_test_response_body }
|
11
|
+
|
12
|
+
it 'should return the API status code' do
|
13
|
+
expect(api_response.status).to eql('9999')
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should be successful' do
|
17
|
+
expect(api_response).to be_success
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should not have item errors' do
|
21
|
+
expect(api_response).not_to be_item_errors
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should have a message of "Success"' do
|
25
|
+
expect(api_response.message).to eql('Success')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should have the correct total tax' do
|
29
|
+
expect(api_response.total_tax.to_f).to eql(1.394490)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should have a transaction id' do
|
33
|
+
expect(api_response.transaction).to eql('2664495')
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'invoice groups' do
|
37
|
+
it 'should be the correct number' do
|
38
|
+
expect(api_response.groups.count).to eql(1)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should respond to #invoice' do
|
42
|
+
expect(api_response.groups.first).to respond_to(:invoice)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with a partially successful response' do
|
48
|
+
let(:response_body) { success_with_item_errors }
|
49
|
+
|
50
|
+
describe '#status' do
|
51
|
+
it 'should return the API status code' do
|
52
|
+
expect(api_response.status).to eql('9001')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#success?' do
|
57
|
+
it 'should be true' do
|
58
|
+
expect(api_response).to be_success
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#item_errors?" do
|
63
|
+
it 'should be true' do
|
64
|
+
expect(api_response).to be_item_errors
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#item_messages" do
|
69
|
+
it 'should be the correct number' do
|
70
|
+
expect(api_response.item_messages.size).to eql(1)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should response to #message' do
|
74
|
+
expect(api_response.item_messages.first).to respond_to(:message)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#message' do
|
79
|
+
it 'should start with "Failure"' do
|
80
|
+
expect(api_response.message).to match(/\ASuccess with item errors/i)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'with a failure response' do
|
86
|
+
let(:response_body) { post_failed_response_body }
|
87
|
+
|
88
|
+
describe '#status' do
|
89
|
+
it 'should return the API status code' do
|
90
|
+
expect(api_response.status).to eql('1101')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#success?' do
|
95
|
+
it 'should be false' do
|
96
|
+
expect(api_response.success?).to eql false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#item_errors?" do
|
101
|
+
it 'should be false' do
|
102
|
+
expect(api_response).not_to be_item_errors
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#message' do
|
107
|
+
it 'should start with "Failure"' do
|
108
|
+
expect(api_response.message).to match(/\AFailure/)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'for a cancel post request' do
|
115
|
+
context 'with a successful response' do
|
116
|
+
let(:response_body) { cancel_response_body }
|
117
|
+
|
118
|
+
it 'should return the API status code' do
|
119
|
+
expect(api_response.status).to eql('9999')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should be successful' do
|
123
|
+
expect(api_response).to be_success
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should have a message of "Success"' do
|
127
|
+
expect(api_response.message).to eql('Success')
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should have a transaction id' do
|
131
|
+
expect(api_response.transaction).to eql('0')
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should have the client tracking code set' do
|
135
|
+
expect(api_response.client_tracking).to eql('test')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'with a failed request' do
|
140
|
+
|
141
|
+
let(:response_body) { cancel_failed_response_body }
|
142
|
+
|
143
|
+
it 'should return the API status code' do
|
144
|
+
expect(api_response.status).to be_nil
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should be successful' do
|
148
|
+
expect(api_response).to_not be_success
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'should have a message of "Success"' do
|
152
|
+
expect(api_response.message).to be_nil
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should have a transaction id' do
|
156
|
+
expect(api_response.transaction).to eql('0')
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should have the client tracking code set' do
|
160
|
+
expect(api_response.client_tracking).to be_nil
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|