Avatax_TaxService 1.0.11 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,148 @@
1
+ require "spec_helper"
2
+
3
+ describe "CancelTax" do
4
+ before :each do
5
+ credentials = YAML::load(File.open('credentials.yml'))
6
+ @creds = {:username => credentials['username'],
7
+ :password => credentials['password'],
8
+ :clientname => credentials['clientname'],
9
+ :use_production_url => credentials['production']}
10
+ @svc = AvaTax::TaxService.new(@creds)
11
+ @get_tax_request = {
12
+ :doctype => "SalesInvoice",
13
+ :commit => false,
14
+ :detaillevel => "Tax",
15
+ :docdate=>DateTime.now.strftime("%Y-%m-%d"),
16
+ :customercode => "CUST123",
17
+ :origincode => "456",
18
+ :destinationcode => "456",
19
+ :addresses=>[{
20
+ :addresscode=>"456",
21
+ :line1=>"7070 West Arlington Drive",
22
+ :postalcode=>"80123",
23
+ :country=>"US",
24
+ }],
25
+ :lines=>[{
26
+ :no=>"1",
27
+ :itemcode=>"Canoe",
28
+ :qty=>"1",
29
+ :amount=>"300.43",
30
+ :description=>"Blue canoe",
31
+ }]}
32
+ @get_tax_result = @svc.gettax(@get_tax_request)
33
+ @request_required = {
34
+ :companycode => @get_tax_result[:company_code],
35
+ :doctype => @get_tax_result[:doc_type],
36
+ :doccode => @get_tax_result[:doc_code],
37
+ :cancelcode => "DocVoided",
38
+ }
39
+ @request_optional = {
40
+ :docid => @get_tax_result[:doc_id]
41
+ }
42
+ end
43
+
44
+ describe "returns a meaningful" do
45
+ it "error when URL is missing" do
46
+ @creds[:use_production_url] = nil
47
+ @service = AvaTax::TaxService.new(@creds)
48
+ @service.canceltax(@request_required)[:result_code].should eql "Success"
49
+ end
50
+ it "success when URL is specified" do
51
+ @creds[:use_production_url] = false
52
+ @service = AvaTax::TaxService.new(@creds)
53
+ @service.canceltax(@request_required)[:result_code].should eql "Success"
54
+ end
55
+ it "error when username is missing" do
56
+ @creds[:username] = nil
57
+ @service = AvaTax::TaxService.new(@creds)
58
+ @service.canceltax(@request_required)[:result_code].should eql "Error"
59
+ end
60
+ it "error when password is omitted" do
61
+ @creds[:password] = nil
62
+ @service = AvaTax::TaxService.new(@creds)
63
+ @service.canceltax(@request_required)[:result_code].should eql "Error"
64
+ end
65
+ it "success when clientname is omitted" do
66
+ @creds[:clientname] = nil
67
+ @service = AvaTax::TaxService.new(@creds)
68
+ @service.canceltax(@request_required)[:result_code].should eql "Success"
69
+ end
70
+ end
71
+
72
+ describe "has consistent formatting for" do
73
+ it "server-side errors" do
74
+ @creds[:password] = nil
75
+ @service = AvaTax::TaxService.new(@creds)
76
+ @result = @service.canceltax(@request_required)
77
+ @result[:result_code].should eql "Error" and @result[:details].should eql "The user or account could not be authenticated."
78
+ end
79
+ it "successful results" do
80
+ @service = AvaTax::TaxService.new(@creds)
81
+ @result = @service.canceltax(@request_required)
82
+ @result[:result_code].should eql "Success" and @result[:transaction_id].should_not be_nil
83
+ end
84
+ end
85
+ describe "requests with" do
86
+ it "missing required parameters fail" do
87
+ @service = AvaTax::TaxService.new(@creds)
88
+ @result = @service.canceltax(@request_optional)
89
+ @result[:result_code].should eql "Error"
90
+ end
91
+ it "invalid parameters ignore them" do
92
+ @service = AvaTax::TaxService.new(@creds)
93
+ @request_required[:bogus] = "data"
94
+ @result = @service.canceltax(@request_required)
95
+ @result[:result_code].should eql "Success"
96
+ end
97
+ it "missing optional parameters succeed" do
98
+ @service = AvaTax::TaxService.new(@creds)
99
+ @result = @service.canceltax(@request_required)
100
+ @result[:result_code].should eql "Success"
101
+ end
102
+ it "all parameters succeed" do
103
+ @service = AvaTax::TaxService.new(@creds)
104
+ @result = @service.canceltax(@request_required.merge(@request_optional))
105
+ @result[:result_code].should eql "Success"
106
+ end
107
+ end
108
+ describe "workflow" do
109
+ it "should not change the status when cancel code is unspecified" do
110
+ @request_required[:cancelcode] = "Unspecified"
111
+ @result = @svc.canceltax(@request_required)
112
+ @history_request = {
113
+ :doccode => @request_required[:doccode],
114
+ :companycode => @request_required[:companycode],
115
+ :doctype => @request_required[:doctype],
116
+ }
117
+ @history_result = @svc.gettaxhistory(@history_request)
118
+ @result[:result_code].should eql "Success" and
119
+ @history_result[:get_tax_result][:doc_status].should eql "Saved"
120
+ end
121
+ it "should void documents when cancel code is DocVoided" do
122
+ @request_required[:cancelcode] = "DocVoided"
123
+ @result = @svc.canceltax(@request_required)
124
+ @history_request = {
125
+ :doccode => @request_required[:doccode],
126
+ :companycode => @request_required[:companycode],
127
+ :doctype => @request_required[:doctype],
128
+ }
129
+ @history_result = @svc.gettaxhistory(@history_request)
130
+ @result[:result_code].should eql "Success" and
131
+ @history_result[:get_tax_result][:doc_status].should eql "Cancelled"
132
+ end
133
+ it "should delete uncommitted/voided documents when cancel code is DocDeleted" do\
134
+ @request_required[:cancelcode] = "DocDeleted"
135
+ @result = @svc.canceltax(@request_required)
136
+ @history_request = {
137
+ :doccode => @request_required[:doccode],
138
+ :companycode => @request_required[:companycode],
139
+ :doctype => @request_required[:doctype],
140
+ }
141
+ @history_result = @svc.gettaxhistory(@history_request)
142
+ @result[:result_code].should eql "Success" and
143
+ @history_result[:result_code].should eql "Error"
144
+ end
145
+
146
+ end
147
+
148
+ end
@@ -0,0 +1,145 @@
1
+ require "spec_helper"
2
+
3
+ describe "CommitTax" do
4
+ before :each do
5
+ credentials = YAML::load(File.open('credentials.yml'))
6
+ @creds = {:username => credentials['username'],
7
+ :password => credentials['password'],
8
+ :clientname => credentials['clientname'],
9
+ :use_production_url => credentials['production']}
10
+ @svc = AvaTax::TaxService.new(@creds)
11
+ @get_tax_request = {
12
+ :doctype => "SalesInvoice",
13
+ :commit => false,
14
+ :detaillevel => "Tax",
15
+ :docdate=>DateTime.now.strftime("%Y-%m-%d"),
16
+ :customercode => "CUST123",
17
+ :origincode => "456",
18
+ :destinationcode => "456",
19
+ :addresses=>[{
20
+ :addresscode=>"456",
21
+ :line1=>"7070 West Arlington Drive",
22
+ :postalcode=>"80123",
23
+ :country=>"US",
24
+ }],
25
+ :lines=>[{
26
+ :no=>"1",
27
+ :itemcode=>"Canoe",
28
+ :qty=>"1",
29
+ :amount=>"300.43",
30
+ :description=>"Blue canoe",
31
+ }]}
32
+ @get_tax_result = @svc.gettax(@get_tax_request)
33
+ @post_tax_request = {
34
+ :companycode => @get_tax_result[:company_code],
35
+ :doctype => @get_tax_result[:doc_type],
36
+ :doccode => @get_tax_result[:doc_code],
37
+ :commit => false,
38
+ :docdate => @get_tax_result[:doc_date],
39
+ :totalamount => @get_tax_result[:total_amount],
40
+ :totaltax => @get_tax_result[:total_tax],
41
+ }
42
+ @post_tax_result = @svc.posttax(@post_tax_request)
43
+ @request_required = {
44
+ :companycode => @get_tax_result[:company_code],
45
+ :doctype => @get_tax_result[:doc_type],
46
+ :doccode => @get_tax_result[:doc_code],
47
+ }
48
+ @request_optional = {
49
+ :docid => @get_tax_result[:doc_id],
50
+ :newdoccode => "new doc code: "+ @get_tax_result[:doc_code],
51
+ }
52
+
53
+ end
54
+
55
+ describe "returns a meaningful" do
56
+ it "error when URL is missing" do
57
+ @creds[:use_production_url] = nil
58
+ @service = AvaTax::TaxService.new(@creds)
59
+ @service.committax(@request_required)[:result_code].should eql "Success"
60
+ end
61
+ it "success when URL is specified" do
62
+ @creds[:use_production_url] = false
63
+ @service = AvaTax::TaxService.new(@creds)
64
+ @service.committax(@request_required)[:result_code].should eql "Success"
65
+ end
66
+ it "error when username is missing" do
67
+ @creds[:username] = nil
68
+ @service = AvaTax::TaxService.new(@creds)
69
+ @service.committax(@request_required)[:result_code].should eql "Error"
70
+ end
71
+ it "error when password is omitted" do
72
+ @creds[:password] = nil
73
+ @service = AvaTax::TaxService.new(@creds)
74
+ @service.committax(@request_required)[:result_code].should eql "Error"
75
+ end
76
+ it "success when clientname is omitted" do
77
+ @creds[:clientname] = nil
78
+ @service = AvaTax::TaxService.new(@creds)
79
+ @service.committax(@request_required)[:result_code].should eql "Success"
80
+ end
81
+ end
82
+
83
+ describe "has consistent formatting for" do
84
+ it "server-side errors" do
85
+ @creds[:password] = nil
86
+ @service = AvaTax::TaxService.new(@creds)
87
+ @result = @service.committax(@request_required)
88
+ @result[:result_code].should eql "Error" and @result[:details].should eql "The user or account could not be authenticated."
89
+ end
90
+ it "successful results" do
91
+ @service = AvaTax::TaxService.new(@creds)
92
+ @result = @service.committax(@request_required)
93
+ @result[:result_code].should eql "Success" and @result[:transaction_id].should_not be_nil
94
+ end
95
+ end
96
+ describe "requests with" do
97
+ it "missing required parameters fail" do
98
+ @service = AvaTax::TaxService.new(@creds)
99
+ @result = @service.committax(@request_optional)
100
+ @result[:result_code].should eql "Error"
101
+ end
102
+ it "invalid parameters ignore them" do
103
+ @service = AvaTax::TaxService.new(@creds)
104
+ @request_required[:bogus] = "data"
105
+ @result = @service.committax(@request_required)
106
+ @result[:result_code].should eql "Success"
107
+ end
108
+ it "missing optional parameters succeed" do
109
+ @service = AvaTax::TaxService.new(@creds)
110
+ @result = @service.committax(@request_required)
111
+ @result[:result_code].should eql "Success"
112
+ end
113
+ it "all parameters succeed" do
114
+ @service = AvaTax::TaxService.new(@creds)
115
+ @result = @service.committax(@request_required.merge(@request_optional))
116
+ @result[:result_code].should eql "Success"
117
+ end
118
+ end
119
+ describe "workflow" do
120
+ it "should be able to commit posted transactions" do
121
+ @result = @svc.committax(@request_required)
122
+ @history_request = {
123
+ :doccode => @request_required[:doccode],
124
+ :companycode => @request_required[:companycode],
125
+ :doctype => @request_required[:doctype],
126
+ }
127
+ @history_result = @svc.gettaxhistory(@history_request)
128
+ @result[:result_code].should eql "Success" and
129
+ @history_result[:get_tax_result][:doc_status].should eql "Committed"
130
+ end
131
+ it "should be able to change the doccode" do
132
+ @result = @svc.committax(@request_required.merge(@request_optional))
133
+ @history_request = {
134
+ :doccode => @request_optional[:newdoccode],
135
+ :companycode => @request_required[:companycode],
136
+ :doctype => @request_required[:doctype],
137
+ }
138
+ @history_result = @svc.gettaxhistory(@history_request)
139
+ @result[:result_code].should eql "Success" and
140
+ @history_result[:get_tax_result][:doc_status].should eql "Committed"
141
+
142
+ end
143
+ end
144
+
145
+ end
@@ -0,0 +1,281 @@
1
+ require "spec_helper"
2
+ require "date"
3
+
4
+ describe "GetTax" do
5
+ before :each do
6
+ credentials = YAML::load(File.open('credentials.yml'))
7
+ @creds = {:username => credentials['username'],
8
+ :password => credentials['password'],
9
+ :clientname => credentials['clientname'],
10
+ :use_production_url => credentials['production']}
11
+ @companycode = credentials['companycode']
12
+ @svc = AvaTax::TaxService.new(@creds)
13
+
14
+ @request_required = {
15
+ :doctype => "SalesOrder",
16
+ :docdate=>DateTime.now.strftime("%Y-%m-%d"),
17
+ :customercode => "CUST123",
18
+ :origincode => "456",
19
+ :destinationcode => "456",
20
+ :addresses=>[{
21
+ :addresscode=>"456",
22
+ :line1=>"7070 West Arlington Drive",
23
+ :postalcode=>"80123",
24
+ :country=>"US",
25
+ }],
26
+ :lines=>[{
27
+ :no=>"1",
28
+ :itemcode=>"Canoe",
29
+ :qty=>"1",
30
+ :amount=>"300.43",
31
+ :description=>"Blue canoe",
32
+ }]
33
+
34
+ }
35
+ @request_optional = {
36
+ :companycode => @companycode,
37
+ :salespersoncode => "Bill Sales",
38
+ :detaillevel => "Tax",
39
+ :customerusagetype => "L",
40
+ :discount => "10",
41
+ :purchaseorderno => "PO9823",
42
+ :exemptionno => "23423",
43
+ :referencecode => "ref1",
44
+ :locationcode => "001",
45
+ :commit => "false",
46
+ :batchcode => "",
47
+ :taxoverridetype => "TaxDate",
48
+ :taxamount => "0",
49
+ :taxdate => "1999-01-01",
50
+ :reason => "Override",
51
+ :currencycode => "USD",
52
+ :servicemode => "Remote",
53
+ :paymentdate => DateTime.now.strftime("%Y-%m-%d"),
54
+ :exchangerate => "0",
55
+ :exchangerateeffdate => "1900-01-01",
56
+ :poslanecode => "1",
57
+ :businessidentificationno => "2342",
58
+ :debug => false,
59
+ :validate => false,
60
+ :hashcode => "0",
61
+ :taxoverridetype=>"None",
62
+ :taxamount=>".0000",
63
+ :taxdate=>"1900-01-01",
64
+ :reason=>"",
65
+ :addresses=>[{
66
+ :addresscode=>"123",
67
+ :line1=>"100 ravine lane",
68
+ :line2=>"Suite 21",
69
+ :city=>"Bainbridge Island",
70
+ :region=>"WA",
71
+ :postalcode=>"98110",
72
+ :country=>"US",
73
+ :taxregionid=>"0",
74
+ :latitude=>"",
75
+ :longitude=>""
76
+ }, {
77
+ :addresscode=>"456",
78
+ :line1=> "Attn. Accounting",
79
+ :line3=>"7070 West Arlington Drive",
80
+ :postalcode=>"80123",
81
+ :country=>"US",
82
+ :taxregionid=>"0"
83
+ }],
84
+ :lines=>[{
85
+ :no=>"1",
86
+ :itemcode=>"Canoe",
87
+ :qty=>"1",
88
+ :amount=>"300.43",
89
+ :discounted=>"false",
90
+ :ref1=>"ref1",
91
+ :ref2=>"ref2",
92
+ :description=>"Blue canoe",
93
+ :taxoverridetypeline=>"TaxAmount",
94
+ :taxamountline=>"10",
95
+ :taxdateline=>"1900-01-01",
96
+ :reasonline=>"Tax credit",
97
+ :taxincluded=>"false"
98
+ }, {
99
+ :no=>"2",
100
+ :itemcode=>"Rowing boat",
101
+ :qty=>"1",
102
+ :destinationcodeline=>"123",
103
+ :amount=>"800.12",
104
+ :discounted=>"false",
105
+ :ref1=>"ref3",
106
+ :ref2=>"ref4",
107
+ :description=>"Red rowing boat",
108
+ :taxoverridetype=>"None",
109
+ :taxamount=>"0",
110
+ :taxdate=>"1900-01-01",
111
+ :taxincluded=>"true"
112
+ }]
113
+ }
114
+
115
+
116
+
117
+ end
118
+
119
+ describe "returns a meaningful" do
120
+ it "error when URL is missing" do
121
+ @creds[:use_production_url] = nil
122
+ @service = AvaTax::TaxService.new(@creds)
123
+ @service.gettax(@request_required)[:result_code].should eql "Success"
124
+ end
125
+ it "success when URL is specified" do
126
+ @creds[:use_production_url] = false
127
+ @service = AvaTax::TaxService.new(@creds)
128
+ @service.gettax(@request_required)[:result_code].should eql "Success"
129
+ end
130
+ it "error when username is missing" do
131
+ @creds[:username] = nil
132
+ @service = AvaTax::TaxService.new(@creds)
133
+ @service.gettax(@request_required)[:result_code].should eql "Error"
134
+ end
135
+ it "error when password is omitted" do
136
+ @creds[:password] = nil
137
+ @service = AvaTax::TaxService.new(@creds)
138
+ @service.gettax(@request_required)[:result_code].should eql "Error"
139
+ end
140
+ it "success when clientname is omitted" do
141
+ @creds[:clientname] = nil
142
+ @service = AvaTax::TaxService.new(@creds)
143
+ @service.gettax(@request_required)[:result_code].should eql "Success"
144
+ end
145
+ end
146
+
147
+ describe "has consistent formatting for" do
148
+ it "server-side errors" do
149
+ @creds[:password] = nil
150
+ @service = AvaTax::TaxService.new(@creds)
151
+ @result = @service.gettax(@request_required)
152
+ @result[:result_code].should eql "Error" and @result[:details].should eql "The user or account could not be authenticated."
153
+ end
154
+ it "successful results" do
155
+ @service = AvaTax::TaxService.new(@creds)
156
+ @result = @service.gettax(@request_required)
157
+ if @result[:result_code] == "Error"
158
+ print @result
159
+ end
160
+ @result[:result_code].should eql "Success" and @result[:transaction_id].should_not be_nil
161
+ end
162
+ end
163
+ describe "requests with" do
164
+ it "missing required parameters fail" do
165
+ @service = AvaTax::TaxService.new(@creds)
166
+ @result = @service.gettax(@request_optional)
167
+ @result[:result_code].should eql "Error"
168
+ end
169
+ it "invalid parameters ignore them" do
170
+ @service = AvaTax::TaxService.new(@creds)
171
+ @request_required[:bogus] = "data"
172
+ @result = @service.gettax(@request_required)
173
+ @result[:result_code].should eql "Success"
174
+ end
175
+ it "missing optional parameters succeed" do
176
+ @service = AvaTax::TaxService.new(@creds)
177
+ @result = @service.gettax(@request_required)
178
+ @result[:result_code].should eql "Success"
179
+ end
180
+ it "all parameters succeed" do
181
+ @service = AvaTax::TaxService.new(@creds)
182
+ @result = @service.gettax(@request_required.merge(@request_optional))
183
+ @result[:result_code].should eql "Success"
184
+ end
185
+ end
186
+ describe "workflow" do
187
+ it "should calculate tax without recording a document" do
188
+ @request = @request_required
189
+ @request[:doctype] = "SalesOrder"
190
+ @request[:companycode] = @companycode
191
+ @result = @svc.gettax(@request)
192
+ @history_request = {
193
+ :doccode => @result[:doc_code],
194
+ :companycode => @request[:companycode],
195
+ :doctype => @request[:doctype],
196
+ }
197
+ @history_result = @svc.gettaxhistory(@history_request)
198
+ @result[:result_code].should eql "Success" and
199
+ @history_result[:result_code].should eql "Error" and
200
+ @history_result[:messages][:message][:summary].should eql "The tax document could not be found."
201
+ end
202
+ it "should record a document as uncommitted" do
203
+ @request = @request_required
204
+ @request[:doctype] = "SalesInvoice"
205
+ @request[:commit] = false
206
+ @request[:companycode] = @companycode
207
+ @result = @svc.gettax(@request)
208
+ @history_request = {
209
+ :doccode => @result[:doc_code],
210
+ :companycode => @request[:companycode],
211
+ :doctype => @request[:doctype],
212
+ }
213
+ @history_result = @svc.gettaxhistory(@history_request)
214
+ @result[:result_code].should eql "Success" and
215
+ @history_result[:result_code].should eql "Success" and
216
+ @history_result[:get_tax_result][:doc_status].should eql "Saved"
217
+ end
218
+ it "should record a document as committed" do
219
+ @request = @request_required
220
+ @request[:doctype] = "SalesInvoice"
221
+ @request[:commit] = true
222
+ @request[:companycode] = @companycode
223
+ @result = @svc.gettax(@request)
224
+ @history_request = {
225
+ :doccode => @result[:doc_code],
226
+ :companycode => @request[:companycode],
227
+ :doctype => @request[:doctype],
228
+ }
229
+ @history_result = @svc.gettaxhistory(@history_request)
230
+ @result[:result_code].should eql "Success" and
231
+ @history_result[:result_code].should eql "Success" and
232
+ @history_result[:get_tax_result][:doc_status].should eql "Committed"
233
+ end
234
+ it "should update uncommitted documents" do
235
+ @request = @request_required
236
+ @request[:doctype] = "SalesInvoice"
237
+ @request[:commit] = false
238
+ @request[:companycode] = @companycode
239
+ @result_initial = @svc.gettax(@request)
240
+
241
+ @request[:customercode] = "NEWCUST"
242
+ @request[:doccode] = @result_initial[:doc_code]
243
+ @result = @svc.gettax(@request)
244
+ @history_request = {
245
+ :doccode => @result_initial[:doc_code],
246
+ :companycode => @request[:companycode],
247
+ :doctype => @request[:doctype],
248
+ }
249
+ @history_result = @svc.gettaxhistory(@history_request)
250
+ @result_initial[:result_code].should eql "Success" and
251
+ @result[:result_code].should eql "Success" and
252
+ @history_result[:result_code].should eql "Success" and
253
+ @history_result[:get_tax_result][:doc_status].should eql "Saved" and
254
+ @history_result[:get_tax_request][:customer_code].should eql @request[:customercode]
255
+ end
256
+ it "should not update committed documents" do
257
+ @request = @request_required
258
+ @old_customer_code = @request_required[:customercode]
259
+ @request[:doctype] = "SalesInvoice"
260
+ @request[:commit] = true
261
+ @request[:companycode] = @companycode
262
+ @result_initial = @svc.gettax(@request)
263
+
264
+ @request[:customercode] = "NEWCUST"
265
+ @request[:doccode] = @result_initial[:doc_code]
266
+ @result = @svc.gettax(@request)
267
+ @history_request = {
268
+ :doccode => @result_initial[:doc_code],
269
+ :companycode => @request[:companycode],
270
+ :doctype => @request[:doctype],
271
+ }
272
+ @history_result = @svc.gettaxhistory(@history_request)
273
+ @result_initial[:result_code].should eql "Success" and
274
+ @result[:result_code].should eql "Error" and
275
+ @history_result[:result_code].should eql "Success" and
276
+ @history_result[:get_tax_result][:doc_status].should eql "Committed" and
277
+ @history_result[:get_tax_request][:customer_code].should eql @old_customer_code
278
+ end
279
+ end
280
+
281
+ end