exact4r 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ == v0.9.3
2
+ Reinstated Tagged Void support.
3
+
1
4
  == v0.9.2
2
5
  Converted tests to Test::Unit
3
6
  Added complete test suite, testing all transaction types.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.9.3
@@ -1,4 +1,5 @@
1
1
  require 'builder'
2
+ require File.dirname(__FILE__) + '/rexml-expansion-fix'
2
3
 
3
4
  module EWS # :nodoc:
4
5
  module Transaction # :nodoc:
@@ -108,6 +108,7 @@ METHOD_EOS
108
108
  :tagged_purchase => '30',
109
109
  :tagged_pre_auth => '31',
110
110
  :tagged_pre_auth_completion => '32',
111
+ :tagged_void => '33',
111
112
  :tagged_refund => '34',
112
113
  :tagged_online_debit_refund => '35',
113
114
  :recurring_seed_pre_auth => '40',
@@ -0,0 +1,42 @@
1
+ # Copyright (c) 2008 Michael Koziarski <michael@koziarski.com>
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for any
4
+ # purpose with or without fee is hereby granted, provided that the above
5
+ # copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+
15
+ require 'rexml/document'
16
+ require 'rexml/entity'
17
+
18
+ module REXML
19
+ class Entity < Child
20
+ def unnormalized
21
+ document.record_entity_expansion!
22
+ v = value()
23
+ return nil if v.nil?
24
+ @unnormalized = Text::unnormalize(v, parent)
25
+ @unnormalized
26
+ end
27
+ end
28
+ class Document < Element
29
+ @@entity_expansion_limit = 10_000
30
+ def self.entity_expansion_limit= val
31
+ @@entity_expansion_limit = val
32
+ end
33
+
34
+ def record_entity_expansion!
35
+ @number_of_expansions ||= 0
36
+ @number_of_expansions += 1
37
+ if @number_of_expansions > @@entity_expansion_limit
38
+ raise "Number of entity expansions exceeded, processing aborted."
39
+ end
40
+ end
41
+ end
42
+ end
@@ -146,7 +146,7 @@ module EWS # :nodoc:
146
146
  tt = self.transaction_type.to_i
147
147
 
148
148
  # mandatory: transaction_type must != (30, 31, 32, 34, 35)
149
- append_error(:cc_number, "cc_number must not be set for tagged transactions") if [30,31,32,34,35].include?(tt)
149
+ append_error(:cc_number, "cc_number must not be set for tagged transactions") if [30,31,32,33,34,35].include?(tt)
150
150
  append_error(:cc_number, "cc_number must not be set for debit transactions") if [50,54].include?(tt)
151
151
 
152
152
  # amount, cardholder_name always mandaory
@@ -164,8 +164,8 @@ module EWS # :nodoc:
164
164
  def validate_for_transaction_tag
165
165
  tt = self.transaction_type
166
166
 
167
- # mandatory: transaction_type must == (30, 31, 32, 34, 35)
168
- append_error(:transaction_tag, "transaction_tag must only be set for tagged transactions") unless ['30','31','32','34','35','CR'].include?(tt)
167
+ # mandatory: transaction_type must == (30, 31, 32, 33, 34, 35)
168
+ append_error(:transaction_tag, "transaction_tag must only be set for tagged transactions") unless %w(30 31 32 33 34 35 CR).include?(tt)
169
169
 
170
170
  # transaction_tag, auth_num & amount mandatory
171
171
  mandatory = [:transaction_tag]
@@ -183,7 +183,7 @@ module EWS # :nodoc:
183
183
  tt = self.transaction_type.to_i
184
184
 
185
185
  # mandatory: transaction_type must != (30, 31, 32, 34, 35)
186
- append_error(:track1, "track1 must not be set for tagged transactions") if [30,31,32,34,35].include?(tt)
186
+ append_error(:track1, "track1 must not be set for tagged transactions") if [30,31,32,33,34,35].include?(tt)
187
187
  append_error(:track1, "track1 must not be set for debit transactions") if [50,54].include?(tt)
188
188
 
189
189
  # amount mandatory for all
@@ -201,7 +201,7 @@ module EWS # :nodoc:
201
201
  tt = self.transaction_type.to_i
202
202
 
203
203
  # mandatory: transaction_type must != (30, 31, 32, 34, 35, 50, 54)
204
- append_error(:track2, "track2 must not be set for tagged transactions") if [30,31,32,34,35].include?(tt)
204
+ append_error(:track2, "track2 must not be set for tagged transactions") if [30,31,32,33,34,35].include?(tt)
205
205
  append_error(:track2, "track2 must not be set for debit transactions") if [50,54].include?(tt)
206
206
 
207
207
  # track2, expiry_date, cardholder_name, amount mandatory
data/lib/exact4r.rb CHANGED
@@ -7,4 +7,4 @@ require 'ews/transaction/response'
7
7
  require 'ews/transaction/validator'
8
8
  require 'ews/transporter'
9
9
 
10
- require 'ews/transaction/fake_response'
10
+ require 'ews/transaction/fake_response'
@@ -114,8 +114,8 @@ class TaggedRefundTest < Test::Unit::TestCase
114
114
  request = EWS::Transaction::Request.new({
115
115
  :transaction_type => :tagged_online_debit_refund,
116
116
  :amount => 12.50,
117
- :transaction_tag => @response.transaction_tag,
118
- :authorization_num => @response.authorization_num
117
+ :transaction_tag => pre_response.transaction_tag,
118
+ :authorization_num => pre_response.authorization_num
119
119
  }.merge(CHASE_BASIC_AUTH))
120
120
  assert request.valid?, request.errors.inspect
121
121
 
@@ -136,8 +136,8 @@ class TaggedRefundTest < Test::Unit::TestCase
136
136
  request = EWS::Transaction::Request.new({
137
137
  :transaction_type => :tagged_online_debit_refund,
138
138
  :amount => 12.50,
139
- :transaction_tag => @response.transaction_tag,
140
- :authorization_num => @response.authorization_num
139
+ :transaction_tag => pre_response.transaction_tag,
140
+ :authorization_num => pre_response.authorization_num
141
141
  }.merge(CHASE_BASIC_AUTH))
142
142
  assert request.valid?, request.errors.inspect
143
143
 
@@ -158,8 +158,8 @@ class TaggedRefundTest < Test::Unit::TestCase
158
158
  request = EWS::Transaction::Request.new({
159
159
  :transaction_type => :tagged_refund,
160
160
  :amount => 12.50,
161
- :transaction_tag => @response.transaction_tag,
162
- :authorization_num => @response.authorization_num
161
+ :transaction_tag => pre_response.transaction_tag,
162
+ :authorization_num => pre_response.authorization_num
163
163
  }.merge(CHASE_BASIC_AUTH))
164
164
  assert request.valid?, request.errors.inspect
165
165
 
@@ -108,8 +108,8 @@ class TaggedPreAuthCompletionTest < Test::Unit::TestCase
108
108
  request = EWS::Transaction::Request.new({
109
109
  :transaction_type => :tagged_pre_auth_completion,
110
110
  :amount => 12.50,
111
- :transaction_tag => @response.transaction_tag,
112
- :authorization_num => @response.authorization_num
111
+ :transaction_tag => pre_response.transaction_tag,
112
+ :authorization_num => pre_response.authorization_num
113
113
  }.merge(EMERGIS_BASIC_AUTH))
114
114
  assert request.valid?, request.errors.inspect
115
115
 
@@ -106,8 +106,8 @@ class TaggedPreAuthTest < Test::Unit::TestCase
106
106
  request = EWS::Transaction::Request.new({
107
107
  :transaction_type => :tagged_pre_auth,
108
108
  :amount => 12.50,
109
- :transaction_tag => @response.transaction_tag,
110
- :authorization_num => @response.authorization_num
109
+ :transaction_tag => pre_response.transaction_tag,
110
+ :authorization_num => pre_response.authorization_num
111
111
  }.merge(EMERGIS_BASIC_AUTH))
112
112
  assert request.valid?, request.errors.inspect
113
113
 
@@ -106,8 +106,8 @@ class TaggedPurchaseTest < Test::Unit::TestCase
106
106
  request = EWS::Transaction::Request.new({
107
107
  :transaction_type => :tagged_purchase,
108
108
  :amount => 12.50,
109
- :transaction_tag => @response.transaction_tag,
110
- :authorization_num => @response.authorization_num
109
+ :transaction_tag => pre_response.transaction_tag,
110
+ :authorization_num => pre_response.authorization_num
111
111
  }.merge(EMERGIS_BASIC_AUTH))
112
112
  assert request.valid?, request.errors.inspect
113
113
 
@@ -2,8 +2,6 @@ require File.dirname(__FILE__) + "/../test_helper"
2
2
 
3
3
  class TaggedRefundTest < Test::Unit::TestCase
4
4
 
5
- # NOTE: INTERAC Online Debit transactions are ONLY supported by Chase merchants
6
-
7
5
  def setup
8
6
  @transporter = EWS::Transporter.new(LOCATION)
9
7
 
@@ -112,8 +110,8 @@ class TaggedRefundTest < Test::Unit::TestCase
112
110
  request = EWS::Transaction::Request.new({
113
111
  :transaction_type => :tagged_refund,
114
112
  :amount => 11.25,
115
- :transaction_tag => @response.transaction_tag,
116
- :authorization_num => @response.authorization_num
113
+ :transaction_tag => pre_response.transaction_tag,
114
+ :authorization_num => pre_response.authorization_num
117
115
  }.merge(EMERGIS_BASIC_AUTH))
118
116
  assert request.valid?, request.errors.inspect
119
117
 
@@ -134,8 +132,8 @@ class TaggedRefundTest < Test::Unit::TestCase
134
132
  request = EWS::Transaction::Request.new({
135
133
  :transaction_type => :tagged_refund,
136
134
  :amount => 11.25,
137
- :transaction_tag => @response.transaction_tag,
138
- :authorization_num => @response.authorization_num
135
+ :transaction_tag => pre_response.transaction_tag,
136
+ :authorization_num => pre_response.authorization_num
139
137
  }.merge(EMERGIS_BASIC_AUTH))
140
138
  assert request.valid?, request.errors.inspect
141
139
 
@@ -0,0 +1,160 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ class TaggedVoidTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @transporter = EWS::Transporter.new(LOCATION)
7
+
8
+ # do initial recurring seed
9
+ request = EWS::Transaction::Request.new(cc_number_params.merge(:transaction_type => :recurring_seed_purchase))
10
+ request.amount = 11.25
11
+ assert request.valid?, request.errors.inspect
12
+
13
+ @response = @transporter.submit(request, :json)
14
+ assert @response.approved?
15
+ end
16
+
17
+ def test_mandatory
18
+ request = EWS::Transaction::Request.new(:transaction_type => :tagged_void)
19
+ assert !request.valid?
20
+ assert_equal "gateway_id must be supplied", request.errors[:gateway_id]
21
+
22
+ request.gateway_id = EMERGIS_BASIC_AUTH[:gateway_id]
23
+ assert !request.valid?
24
+ assert_equal "password must be supplied", request.errors[:password]
25
+
26
+ request.password = EMERGIS_BASIC_AUTH[:password]
27
+ assert !request.valid?
28
+ assert_equal "One of the following must be supplied: cc_number, track1, track2 or transaction_tag.", request.errors[:base]
29
+
30
+ request.transaction_tag = 1234
31
+ assert !request.valid?
32
+ assert_equal "authorization_num must be supplied", request.errors[:authorization_num]
33
+
34
+ request.authorization_num = "TH6754"
35
+ assert !request.valid?
36
+ assert_equal "amount must be supplied", request.errors[:amount]
37
+
38
+ request.amount = 11.25
39
+ assert request.valid?
40
+
41
+ request.cc_number = "4111111111111111"
42
+ assert !request.valid?
43
+ assert_equal "do not set cc_number for tagged transactions", request.errors[:cc_number]
44
+ end
45
+
46
+ def test_json
47
+ request = EWS::Transaction::Request.new({
48
+ :transaction_type => :tagged_void,
49
+ :amount => 11.25,
50
+ :transaction_tag => @response.transaction_tag,
51
+ :authorization_num => @response.authorization_num
52
+ }.merge(EMERGIS_BASIC_AUTH))
53
+ assert request.valid?, request.errors.inspect
54
+
55
+ assert_details_correct request, @transporter.submit(request, :json)
56
+ end
57
+
58
+ def test_rest
59
+ request = EWS::Transaction::Request.new({
60
+ :transaction_type => :tagged_void,
61
+ :amount => 11.25,
62
+ :transaction_tag => @response.transaction_tag,
63
+ :authorization_num => @response.authorization_num
64
+ }.merge(EMERGIS_BASIC_AUTH))
65
+ assert request.valid?, request.errors.inspect
66
+
67
+ assert_details_correct request, @transporter.submit(request, :rest)
68
+ end
69
+
70
+ def test_soap
71
+ request = EWS::Transaction::Request.new({
72
+ :transaction_type => :tagged_void,
73
+ :amount => 11.25,
74
+ :transaction_tag => @response.transaction_tag,
75
+ :authorization_num => @response.authorization_num
76
+ }.merge(EMERGIS_BASIC_AUTH))
77
+ assert request.valid?, request.errors.inspect
78
+
79
+ assert_details_correct request, @transporter.submit(request, :soap)
80
+ end
81
+
82
+ def test_requires_correct_amount
83
+ request = EWS::Transaction::Request.new({
84
+ :transaction_type => :tagged_void,
85
+ :amount => 3.50,
86
+ :transaction_tag => @response.transaction_tag,
87
+ :authorization_num => @response.authorization_num
88
+ }.merge(EMERGIS_BASIC_AUTH))
89
+ assert request.valid?, request.errors.inspect
90
+
91
+ response = @transporter.submit(request, :json)
92
+ assert !response.approved?
93
+
94
+ request.amount = 13.50
95
+ response = @transporter.submit(request, :rest)
96
+ assert !response.approved?
97
+
98
+ request.amount = 11.25
99
+ assert_details_correct request, @transporter.submit(request, :soap)
100
+ end
101
+
102
+ def test_multiple_voids_against_one_seed
103
+ request = EWS::Transaction::Request.new({
104
+ :transaction_type => :tagged_void,
105
+ :amount => 11.25,
106
+ :transaction_tag => @response.transaction_tag,
107
+ :authorization_num => @response.authorization_num
108
+ }.merge(EMERGIS_BASIC_AUTH))
109
+ assert request.valid?, request.errors.inspect
110
+
111
+ assert_details_correct request, @transporter.submit(request, :json)
112
+
113
+ # can't void an already-voided transaction
114
+ response = @transporter.submit(request, :json)
115
+ assert !response.approved?
116
+ end
117
+
118
+ def test_not_permitted_after_recurring_seed_pre_auth
119
+ # do initial recurring seed pre auth
120
+ pre_request = EWS::Transaction::Request.new(cc_number_params.merge(:transaction_type => :recurring_seed_pre_auth))
121
+ pre_request.amount = 11.25
122
+ assert pre_request.valid?, pre_request.errors.inspect
123
+
124
+ pre_response = @transporter.submit(pre_request, :json)
125
+ assert pre_response.approved?
126
+
127
+ # now do the tagged refund
128
+ request = EWS::Transaction::Request.new({
129
+ :transaction_type => :tagged_void,
130
+ :amount => 11.25,
131
+ :transaction_tag => pre_response.transaction_tag,
132
+ :authorization_num => pre_response.authorization_num
133
+ }.merge(EMERGIS_BASIC_AUTH))
134
+ assert request.valid?, request.errors.inspect
135
+
136
+ response = @transporter.submit(request, :json)
137
+ assert !response.approved?
138
+ end
139
+
140
+ def test_permitted_after_plain_purchase
141
+ # do initial purchase
142
+ pre_request = EWS::Transaction::Request.new(cc_number_params.merge(:transaction_type => :purchase))
143
+ pre_request.amount = 11.25
144
+ assert pre_request.valid?, pre_request.errors.inspect
145
+
146
+ pre_response = @transporter.submit(pre_request, :json)
147
+ assert pre_response.approved?
148
+
149
+ # now do the tagged refund
150
+ request = EWS::Transaction::Request.new({
151
+ :transaction_type => :tagged_void,
152
+ :amount => 11.25,
153
+ :transaction_tag => pre_response.transaction_tag,
154
+ :authorization_num => pre_response.authorization_num
155
+ }.merge(EMERGIS_BASIC_AUTH))
156
+ assert request.valid?, request.errors.inspect
157
+
158
+ assert_details_correct request, @transporter.submit(request, :json)
159
+ end
160
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exact4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - E-xact Transactions Ltd.
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-15 00:00:00 +10:00
12
+ date: 2009-09-30 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -76,6 +76,7 @@ files:
76
76
  - ./lib/ews/transaction/mapping.rb
77
77
  - ./lib/ews/transaction/request.rb
78
78
  - ./lib/ews/transaction/response.rb
79
+ - ./lib/ews/transaction/rexml-expansion-fix.rb
79
80
  - ./lib/ews/transaction/validator.rb
80
81
  - ./lib/ews/transporter.rb
81
82
  - ./lib/exact4r.rb
@@ -100,6 +101,7 @@ files:
100
101
  - ./test/exhaustive/tagged_pre_auth_test.rb
101
102
  - ./test/exhaustive/tagged_purchase_test.rb
102
103
  - ./test/exhaustive/tagged_refund_test.rb
104
+ - ./test/exhaustive/tagged_void_test.rb
103
105
  - ./test/exhaustive/transaction_details_test.rb
104
106
  - ./test/exhaustive/void_test.rb
105
107
  - ./test/general/avs_test.rb