active_merchant-epsilon 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.env.sample +3 -0
  3. data/.gitignore +17 -0
  4. data/CHANGELOG.md +29 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +256 -0
  8. data/Rakefile +19 -0
  9. data/active_merchant-epsilon.gemspec +31 -0
  10. data/lib/active_merchant/billing/convenience_store.rb +55 -0
  11. data/lib/active_merchant/billing/gateways/epsilon.rb +194 -0
  12. data/lib/active_merchant/billing/gateways/epsilon/epsilon_base.rb +132 -0
  13. data/lib/active_merchant/billing/gateways/epsilon/epsilon_mission_code.rb +30 -0
  14. data/lib/active_merchant/billing/gateways/epslion_convenience_store.rb +27 -0
  15. data/lib/active_merchant/epsilon.rb +9 -0
  16. data/lib/active_merchant/epsilon/version.rb +5 -0
  17. data/test/fixtures/vcr_cassettes/autheticate_three_d_secure_card_successful.yml +46 -0
  18. data/test/fixtures/vcr_cassettes/cancel_recurring_fail.yml +82 -0
  19. data/test/fixtures/vcr_cassettes/cancel_recurring_successful.yml +83 -0
  20. data/test/fixtures/vcr_cassettes/change_recurring_amount_failure.yml +85 -0
  21. data/test/fixtures/vcr_cassettes/change_recurring_amount_successful.yml +85 -0
  22. data/test/fixtures/vcr_cassettes/convenience_store_purchase_fail.yml +39 -0
  23. data/test/fixtures/vcr_cassettes/convenience_store_purchase_successful.yml +50 -0
  24. data/test/fixtures/vcr_cassettes/find_user_failure.yml +44 -0
  25. data/test/fixtures/vcr_cassettes/find_user_success.yml +44 -0
  26. data/test/fixtures/vcr_cassettes/installment_purchase_successful.yml +46 -0
  27. data/test/fixtures/vcr_cassettes/purchase_fail.yml +45 -0
  28. data/test/fixtures/vcr_cassettes/purchase_successful.yml +46 -0
  29. data/test/fixtures/vcr_cassettes/purchase_with_three_d_secure_card_successful.yml +45 -0
  30. data/test/fixtures/vcr_cassettes/purchase_with_verification_value.yml +46 -0
  31. data/test/fixtures/vcr_cassettes/recurring_fail.yml +45 -0
  32. data/test/fixtures/vcr_cassettes/recurring_successful.yml +46 -0
  33. data/test/fixtures/vcr_cassettes/registered_purchase_fail.yml +45 -0
  34. data/test/fixtures/vcr_cassettes/registered_purchase_successful.yml +46 -0
  35. data/test/fixtures/vcr_cassettes/registered_recurring_fail.yml +45 -0
  36. data/test/fixtures/vcr_cassettes/registered_recurring_successful.yml +46 -0
  37. data/test/fixtures/vcr_cassettes/revolving_purchase_successful.yml +46 -0
  38. data/test/fixtures/vcr_cassettes/terminate_recurring_fail.yml +96 -0
  39. data/test/fixtures/vcr_cassettes/terminate_recurring_successful.yml +82 -0
  40. data/test/fixtures/vcr_cassettes/verify_fail.yml +45 -0
  41. data/test/fixtures/vcr_cassettes/verify_successful.yml +85 -0
  42. data/test/fixtures/vcr_cassettes/void_fail.yml +42 -0
  43. data/test/fixtures/vcr_cassettes/void_successful.yml +85 -0
  44. data/test/remote/gateways/remote_epsilon_convenience_store_test.rb +27 -0
  45. data/test/remote/gateways/remote_epsilon_test.rb +249 -0
  46. data/test/test_helper.rb +162 -0
  47. data/test/unit/gateways/epsilon_test.rb +11 -0
  48. data/wercker.yml +18 -0
  49. metadata +248 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/cancel_payment.cgi
6
+ body:
7
+ encoding: US-ASCII
8
+ string: contract_code=[CONTRACT_CODE]&order_number=1234567890
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ User-Agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Wed, 15 Oct 2014 06:45:41 GMT
25
+ Server:
26
+ - Apache
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Content-Type:
30
+ - text/xml; charset=CP932
31
+ body:
32
+ encoding: UTF-8
33
+ string: |-
34
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
35
+ <Epsilon_result>
36
+ <result err_code="810" />
37
+ <result err_detail="%91%CE%8F%DB%8E%E6%88%F8%82%CD%82%A0%82%E8%82%DC%82%B9%82%F1" />
38
+ <result result="9" />
39
+ </Epsilon_result>
40
+ http_version:
41
+ recorded_at: Wed, 15 Oct 2014 06:45:42 GMT
42
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,85 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://beta.epsilon.jp/cgi-bin/order/direct_card_payment.cgi
6
+ body:
7
+ encoding: US-ASCII
8
+ string: contract_code=[CONTRACT_CODE]&user_id=U1413355539&user_name=TARO+YAMADA&user_mail_add=yamada-taro%40example.com&item_code=ITEM001&item_name=Greate+Product&order_number=O39187589&st_code=10000-0000-0000&mission_code=1&item_price=100&process_code=1&card_number=4242424242424242&expire_y=2015&expire_m=10&user_agent=ActiveMerchant%3A%3AEpsilon-0.0.1
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ User-Agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Wed, 15 Oct 2014 06:45:39 GMT
25
+ Server:
26
+ - Apache
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Content-Type:
30
+ - text/xml; charset=CP932
31
+ body:
32
+ encoding: UTF-8
33
+ string: |-
34
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
35
+ <Epsilon_result>
36
+ <result acsurl="" />
37
+ <result err_code="" />
38
+ <result err_detail="" />
39
+ <result kari_flag="1" />
40
+ <result pareq="" />
41
+ <result result="1" />
42
+ <result trans_code="494184" />
43
+ </Epsilon_result>
44
+ http_version:
45
+ recorded_at: Wed, 15 Oct 2014 06:45:41 GMT
46
+ - request:
47
+ method: post
48
+ uri: https://beta.epsilon.jp/cgi-bin/order/cancel_payment.cgi
49
+ body:
50
+ encoding: US-ASCII
51
+ string: contract_code=[CONTRACT_CODE]&order_number=O39187589
52
+ headers:
53
+ Content-Type:
54
+ - application/x-www-form-urlencoded
55
+ Accept-Encoding:
56
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
57
+ Accept:
58
+ - "*/*"
59
+ User-Agent:
60
+ - Ruby
61
+ response:
62
+ status:
63
+ code: 200
64
+ message: OK
65
+ headers:
66
+ Date:
67
+ - Wed, 15 Oct 2014 06:45:41 GMT
68
+ Server:
69
+ - Apache
70
+ Transfer-Encoding:
71
+ - chunked
72
+ Content-Type:
73
+ - text/xml; charset=CP932
74
+ body:
75
+ encoding: UTF-8
76
+ string: |-
77
+ <?xml version="1.0" encoding="x-sjis-cp932"?>
78
+ <Epsilon_result>
79
+ <result err_code="" />
80
+ <result err_detail="" />
81
+ <result result="1" />
82
+ </Epsilon_result>
83
+ http_version:
84
+ recorded_at: Wed, 15 Oct 2014 06:45:41 GMT
85
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class RemoteEpsilonConvenienceStoreGatewayTest < MiniTest::Test
4
+ include SamplePaymentMethods
5
+
6
+ def gateway
7
+ @gateway ||= ActiveMerchant::Billing::EpsilonConvenienceStoreGateway.new
8
+ end
9
+
10
+ def test_convenience_store_purchase_successful
11
+ VCR.use_cassette(:convenience_store_purchase_successful) do
12
+ response = gateway.purchase(10000, valid_convenience_store, purchase_detail)
13
+
14
+ assert_equal true, response.success?
15
+ assert_match /\d{7}/, response.params['receipt_number']
16
+ assert_match /\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/, response.params['receipt_date']
17
+ assert_match /\d{4}\-\d{2}\-\d{2}/, response.params['convenience_store_limit_date']
18
+ end
19
+ end
20
+
21
+ def test_convenience_store_purchase_fail
22
+ VCR.use_cassette(:convenience_store_purchase_fail) do
23
+ response = gateway.purchase(10000, invalid_convenience_store, purchase_detail)
24
+ assert_equal false, response.success?
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,249 @@
1
+ require 'test_helper'
2
+
3
+ class RemoteEpsilonGatewayTest < MiniTest::Test
4
+ include SamplePaymentMethods
5
+
6
+ def gateway
7
+ @gateway ||= ActiveMerchant::Billing::EpsilonGateway.new
8
+ end
9
+
10
+ def test_purchase_successful
11
+ VCR.use_cassette(:purchase_successful) do
12
+ if valid_credit_card.validate.empty?
13
+ response = gateway.purchase(10000, valid_credit_card, purchase_detail)
14
+ end
15
+
16
+ assert_equal true, response.success?
17
+ assert_equal false, response.params['three_d_secure']
18
+ assert_empty response.params['acs_url']
19
+ assert_empty response.params['pa_req']
20
+ end
21
+ end
22
+
23
+ def test_purchase_with_verification_value_successful
24
+ VCR.use_cassette(:purchase_with_verification_value) do
25
+ if valid_credit_card_with_verification_value.validate.empty?
26
+ response = gateway.purchase(10000, valid_credit_card_with_verification_value, purchase_detail)
27
+ end
28
+
29
+ assert_equal true, response.success?
30
+ end
31
+ end
32
+
33
+ def test_installment_purchase_successful
34
+ VCR.use_cassette(:installment_purchase_successful) do
35
+ if valid_credit_card_with_verification_value.validate.empty?
36
+ response = gateway.purchase(10000, valid_credit_card_with_verification_value, installment_purchase_detail)
37
+ end
38
+
39
+ assert_equal true, response.success?
40
+ end
41
+ end
42
+
43
+ def test_revolving_purchase_successful
44
+ VCR.use_cassette(:revolving_purchase_successful) do
45
+ if valid_credit_card_with_verification_value.validate.empty?
46
+ response = gateway.purchase(10000, valid_credit_card_with_verification_value, revolving_purchase_detail)
47
+ end
48
+
49
+ assert_equal true, response.success?
50
+ end
51
+ end
52
+
53
+ def test_purchase_with_three_d_secure_card_successful
54
+ VCR.use_cassette(:purchase_with_three_d_secure_card_successful) do
55
+ if valid_three_d_secure_card.validate.empty?
56
+ response = gateway.purchase(
57
+ 10000,
58
+ valid_three_d_secure_card,
59
+ purchase_detail.merge(three_d_secure_check_code: 1)
60
+ )
61
+ end
62
+
63
+ assert_equal true, response.success?
64
+ assert_equal true, response.params['three_d_secure']
65
+ assert_match /\Ahttps?/, response.params['acs_url']
66
+ refute_empty response.params['pa_req']
67
+ end
68
+
69
+ VCR.use_cassette(:autheticate_three_d_secure_card_successful) do
70
+ response = gateway.authenticate(valid_three_d_secure_pa_res)
71
+ assert_equal true, response.success?
72
+ end
73
+ end
74
+
75
+ def test_purchase_fail
76
+ VCR.use_cassette(:purchase_fail) do
77
+ response = gateway.purchase(10000, invalid_credit_card, purchase_detail)
78
+ assert_equal false, response.success?
79
+ end
80
+ end
81
+
82
+ def test_recurring_successful
83
+ VCR.use_cassette(:recurring_successful) do
84
+ response = gateway.recurring(10000, valid_credit_card, purchase_detail)
85
+ assert_equal true, response.success?
86
+ end
87
+ end
88
+
89
+ def test_recurring_fail
90
+ VCR.use_cassette(:recurring_fail) do
91
+ response = gateway.recurring(10000, invalid_credit_card, purchase_detail)
92
+ assert_equal false, response.success?
93
+ end
94
+ end
95
+
96
+ def test_registered_recurring_successful
97
+ VCR.use_cassette(:registered_recurring_successful) do
98
+ response = gateway.registered_recurring(10000, purchase_detail_for_registered)
99
+ assert_equal true, response.success?
100
+ end
101
+ end
102
+
103
+ def test_registered_recurring_fail
104
+ VCR.use_cassette(:registered_recurring_fail) do
105
+ invalid_purchase_detail = purchase_detail_for_registered
106
+ invalid_purchase_detail[:mission_code] = ''
107
+ response = gateway.registered_recurring(10000, invalid_purchase_detail)
108
+
109
+ assert_equal false, response.success?
110
+ end
111
+ end
112
+
113
+ def test_cancel_recurring
114
+ VCR.use_cassette(:cancel_recurring_successful) do
115
+ detail = purchase_detail
116
+
117
+ response = gateway.recurring(10000, valid_credit_card, detail)
118
+
119
+ assert_equal true, response.success?
120
+
121
+ response = gateway.cancel_recurring(user_id: detail[:user_id], item_code: detail[:item_code])
122
+
123
+ assert_equal true, response.success?
124
+ end
125
+ end
126
+
127
+ def test_cancel_recurring_fail
128
+ VCR.use_cassette(:cancel_recurring_fail) do
129
+ detail = purchase_detail
130
+
131
+ response = gateway.recurring(10000, valid_credit_card, detail)
132
+
133
+ assert_equal true, response.success?
134
+
135
+ response = gateway.cancel_recurring(
136
+ user_id: detail[:user_id],
137
+ item_code: detail[:item_code] + 'wrong'
138
+ )
139
+
140
+ assert_equal false, response.success?
141
+ end
142
+ end
143
+
144
+ def test_terminate_recurring
145
+ VCR.use_cassette(:terminate_recurring_successful) do
146
+ detail = purchase_detail
147
+ response = gateway.recurring(10000, valid_credit_card, detail)
148
+ assert_equal true, response.success?
149
+ response = gateway.terminate_recurring(user_id: detail[:user_id])
150
+ assert_equal true, response.success?
151
+ end
152
+ end
153
+
154
+ def test_terminate_recurring_fail
155
+ VCR.use_cassette(:terminate_recurring_fail) do
156
+ detail = purchase_detail
157
+ response = gateway.recurring(10000, valid_credit_card, detail)
158
+ assert_equal true, response.success?
159
+ assert_raises(ActiveMerchant::ResponseError) do
160
+ gateway.terminate_recurring(user_id: detail[:user_id] + 'wrong')
161
+ end
162
+ end
163
+ end
164
+
165
+ def test_void
166
+ VCR.use_cassette(:void_successful) do
167
+ detail = purchase_detail
168
+
169
+ purchase_response = gateway.purchase(100, valid_credit_card, detail)
170
+
171
+ assert_equal true, purchase_response.success?
172
+
173
+ response = gateway.void(detail[:order_number])
174
+
175
+ assert_equal true, response.success?
176
+ end
177
+ end
178
+
179
+ def test_void_fail
180
+ VCR.use_cassette(:void_fail) do
181
+ response = gateway.void('1234567890')
182
+ assert_equal false, response.success?
183
+ end
184
+ end
185
+
186
+ def test_verify
187
+ VCR.use_cassette(:verify_successful) do
188
+ response = gateway.verify(valid_credit_card, purchase_detail.slice(:user_id, :user_email))
189
+ assert_equal true, response.success?
190
+ end
191
+ end
192
+
193
+ def test_verify_fail
194
+ VCR.use_cassette(:verify_fail) do
195
+ response = gateway.verify(invalid_credit_card, purchase_detail.slice(:user_id, :user_email))
196
+ assert_equal false, response.success?
197
+ end
198
+ end
199
+
200
+ def test_find_user_success
201
+ VCR.use_cassette(:find_user_success) do
202
+ response = gateway.find_user(user_id: "U1416470209")
203
+ assert_equal true, response.success?
204
+ end
205
+ end
206
+
207
+ def test_find_user_failure
208
+ VCR.use_cassette(:find_user_failure) do
209
+ response = gateway.find_user(user_id: "")
210
+ assert_equal false, response.success?
211
+ end
212
+ end
213
+
214
+ def test_registered_purchase_successful
215
+ VCR.use_cassette(:registered_purchase_successful) do
216
+ response = gateway.registered_purchase(10000, purchase_detail_for_registered)
217
+ assert_equal true, response.success?
218
+ end
219
+ end
220
+
221
+ def test_registered_purchase_fail
222
+ VCR.use_cassette(:registered_purchase_fail) do
223
+ invalid_purchase_detail = purchase_detail_for_registered
224
+ invalid_purchase_detail[:user_id] = ''
225
+ response = gateway.registered_purchase(10000, invalid_purchase_detail)
226
+ assert_equal false, response.success?
227
+ end
228
+ end
229
+
230
+ def test_change_recurring_amount_successful
231
+ VCR.use_cassette(:change_recurring_amount_successful) do
232
+ detail = purchase_detail
233
+ response = gateway.recurring(10000, valid_credit_card, detail)
234
+ assert_equal true, response.success?
235
+ response = gateway.change_recurring_amount(new_item_price: 5000, user_id: detail[:user_id], item_code: detail[:item_code])
236
+ assert_equal true, response.success?
237
+ end
238
+ end
239
+
240
+ def test_change_recurring_amount_failure
241
+ VCR.use_cassette(:change_recurring_amount_failure) do
242
+ detail = purchase_detail
243
+ response = gateway.recurring(10000, valid_credit_card, detail)
244
+ assert_equal true, response.success?
245
+ response = gateway.change_recurring_amount(new_item_price: 5000, user_id: detail[:user_id], item_code: 'invalid code')
246
+ assert_equal false, response.success?
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,162 @@
1
+ require 'minitest/autorun'
2
+
3
+ require 'active_merchant'
4
+ require 'active_merchant/epsilon'
5
+
6
+ require 'dotenv'
7
+ require 'pry'
8
+ require 'tapp'
9
+ require 'vcr'
10
+
11
+ require 'webmock/minitest'
12
+
13
+ Dotenv.load
14
+
15
+ ActiveMerchant::Billing::Base.mode = :test
16
+
17
+ ActiveMerchant::Billing::EpsilonGateway.contract_code = ENV['CONTRACT_CODE']
18
+ ActiveMerchant::Billing::EpsilonGateway.proxy_address = ENV['PROXY_ADDRESS'] if ENV['PROXY_ADDRESS']
19
+ ActiveMerchant::Billing::EpsilonGateway.proxy_port = ENV['PROXY_PORT'] if ENV['PROXY_PORT']
20
+
21
+ VCR.configure do |c|
22
+ c.cassette_library_dir = 'test/fixtures/vcr_cassettes'
23
+ c.hook_into :webmock
24
+ c.filter_sensitive_data('[CONTRACT_CODE]') { ENV['CONTRACT_CODE'] }
25
+ end
26
+
27
+ module SamplePaymentMethods
28
+ def valid_credit_card
29
+ ActiveMerchant::Billing::CreditCard.require_verification_value = false
30
+ ActiveMerchant::Billing::CreditCard.new(
31
+ first_name: 'TARO',
32
+ last_name: 'YAMADA',
33
+ number: '4242424242424242',
34
+ month: '10',
35
+ year: Time.now.year + 1,
36
+ )
37
+ end
38
+
39
+ def valid_credit_card_with_verification_value
40
+ ActiveMerchant::Billing::CreditCard.require_verification_value = true
41
+ ActiveMerchant::Billing::CreditCard.new(
42
+ first_name: 'TARO',
43
+ last_name: 'YAMADA',
44
+ number: '4242424242424242',
45
+ month: '10',
46
+ year: Time.now.year + 1,
47
+ verification_value: '000',
48
+ )
49
+ end
50
+
51
+ def valid_three_d_secure_card
52
+ ActiveMerchant::Billing::CreditCard.require_verification_value = false
53
+ ActiveMerchant::Billing::CreditCard.new(
54
+ first_name: 'TARO',
55
+ last_name: 'YAMADA',
56
+ number: '4123451111111117',
57
+ month: '12',
58
+ year: '2023',
59
+ )
60
+ end
61
+
62
+ def invalid_credit_card
63
+ ActiveMerchant::Billing::CreditCard.require_verification_value = false
64
+ ActiveMerchant::Billing::CreditCard.new(
65
+ first_name: 'TARO',
66
+ last_name: 'YAMADA',
67
+ number: '0000000000000000',
68
+ month: '10',
69
+ year: Time.now.year + 1,
70
+ )
71
+ end
72
+
73
+ def purchase_detail
74
+ now = Time.now
75
+ {
76
+ user_id: "U#{Time.now.to_i}",
77
+ user_name: 'YAMADA Taro',
78
+ user_email: 'yamada-taro@example.com',
79
+ item_code: 'ITEM001',
80
+ item_name: 'Greate Product',
81
+ order_number: "O#{now.sec}#{now.usec}"
82
+ }
83
+ end
84
+
85
+ def installment_purchase_detail
86
+ now = Time.now
87
+ {
88
+ user_id: "U#{Time.now.to_i}",
89
+ user_name: 'YAMADA Taro',
90
+ user_email: 'yamada-taro@example.com',
91
+ item_code: 'ITEM001',
92
+ item_name: 'Greate Product',
93
+ order_number: "O#{now.sec}#{now.usec}",
94
+ credit_type: ActiveMerchant::Billing::EpsilonGateway::CreditType::INSTALLMENT,
95
+ payment_time: 3,
96
+ }
97
+ end
98
+
99
+ def revolving_purchase_detail
100
+ now = Time.now
101
+ {
102
+ user_id: "U#{Time.now.to_i}",
103
+ user_name: 'YAMADA Taro',
104
+ user_email: 'yamada-taro@example.com',
105
+ item_code: 'ITEM001',
106
+ item_name: 'Greate Product',
107
+ order_number: "O#{now.sec}#{now.usec}",
108
+ credit_type: ActiveMerchant::Billing::EpsilonGateway::CreditType::REVOLVING,
109
+ }
110
+ end
111
+
112
+ def purchase_detail_for_registered
113
+ {
114
+ user_id: "U1416470209",
115
+ user_email: 'yamada-taro@example.com',
116
+ user_name: 'YAMADA TARO',
117
+ item_code: 'ITEM001',
118
+ item_name: 'Greate Product',
119
+ order_number: "O#{Time.now.to_i}",
120
+ mission_code: '6'
121
+ }
122
+ end
123
+
124
+ def valid_three_d_secure_pa_res
125
+ now = Time.now
126
+ {
127
+ order_number: "O#{now.sec}#{now.usec}",
128
+ three_d_secure_pa_res: 'xxxxxxxxxxxxxxxx',
129
+ }
130
+ end
131
+
132
+ def valid_convenience_store
133
+ ActiveMerchant::Billing::ConvenienceStore.new(
134
+ code: ActiveMerchant::Billing::ConvenienceStore::Code::LAWSON,
135
+ full_name_kana: 'ヤマダ タロウ',
136
+ phone_number: '0312345678'
137
+ )
138
+ end
139
+
140
+ def invalid_convenience_store
141
+ ActiveMerchant::Billing::ConvenienceStore.new(
142
+ code: ActiveMerchant::Billing::ConvenienceStore::Code::LAWSON,
143
+ full_name_kana: 'ヤマダ タロウ',
144
+ phone_number: '0312345678901'
145
+ )
146
+ end
147
+
148
+ def fixture_xml(filename, parse: true)
149
+ xml = File.read("test/fixtures/#{filename}")
150
+ parse ? Nokogiri.parse(xml.sub('x-sjis-cp932', 'CP932')) : xml
151
+ end
152
+
153
+ def stub_gateway(status: 200, body: nil, action: :purchase)
154
+ endpoint = ActiveMerchant::Billing::EpsilonGateway.test_url
155
+ path = ActiveMerchant::Billing::EpsilonGateway::PATHS[action]
156
+
157
+ stub_request(:post, endpoint + path).to_return(
158
+ status: status,
159
+ body: body
160
+ )
161
+ end
162
+ end