veritrans 2.2.0 → 2.3.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 +5 -5
- data/.rubocop.yml +35 -0
- data/.travis.yml +11 -5
- data/CHANGELOG.md +12 -0
- data/Gemfile +14 -6
- data/Gemfile.lock +131 -109
- data/README.md +46 -24
- data/api_reference.md +85 -3
- data/lib/generators/templates/payments_controller.rb +1 -1
- data/lib/generators/templates/views/_credit_card_form.erb +1 -1
- data/lib/veritrans.rb +15 -6
- data/lib/veritrans/api.rb +33 -6
- data/lib/veritrans/client.rb +1 -1
- data/lib/veritrans/result.rb +5 -0
- data/lib/veritrans/testing.rb +1 -1
- data/lib/veritrans/version.rb +1 -1
- data/spec/fixtures/cancel_failed.yml +18 -18
- data/spec/fixtures/cancel_success.yml +48 -28
- data/spec/fixtures/deny_failed.yml +144 -0
- data/spec/fixtures/refund_failed.yml +54 -0
- data/spec/fixtures/status_fail.yml +19 -17
- data/spec/fixtures/status_success.yml +51 -32
- data/spec/fixtures/test_token.yml +49 -0
- data/spec/rails_plugin_spec.rb +105 -86
- data/spec/spec_helper.rb +18 -7
- data/spec/veritrans_client_spec.rb +60 -9
- data/spec/veritrans_snap_spec.rb +17 -2
- data/veritrans.gemspec +0 -6
- metadata +7 -79
data/spec/rails_plugin_spec.rb
CHANGED
@@ -3,18 +3,18 @@ require 'open3'
|
|
3
3
|
require 'shellwords'
|
4
4
|
require 'socket'
|
5
5
|
|
6
|
-
describe
|
6
|
+
describe 'Rails plugin', vcr: false do
|
7
7
|
include Capybara::DSL
|
8
8
|
|
9
|
-
MAIN_RAILS_VER =
|
10
|
-
APP_DIR =
|
11
|
-
PLUGIN_DIR = File.expand_path(
|
9
|
+
MAIN_RAILS_VER = '5.2.3'.freeze
|
10
|
+
APP_DIR = 'plugin_test'.freeze
|
11
|
+
PLUGIN_DIR = File.expand_path('..', File.dirname(__FILE__))
|
12
12
|
|
13
|
-
RAILS_VERSIONS = [
|
13
|
+
RAILS_VERSIONS = %w[4.2.11.1 5.0.7.2 5.1.7 5.2.3].freeze
|
14
14
|
|
15
15
|
before :all do
|
16
16
|
FileUtils.mkdir_p("#{PLUGIN_DIR}/tmp")
|
17
|
-
#Capybara::Screenshot.instance_variable_set(:@capybara_root, "#{PLUGIN_DIR}/tmp")
|
17
|
+
# Capybara::Screenshot.instance_variable_set(:@capybara_root, "#{PLUGIN_DIR}/tmp")
|
18
18
|
end
|
19
19
|
|
20
20
|
def capture_stdout(&block)
|
@@ -37,24 +37,21 @@ describe "Rails plugin", vcr: false do
|
|
37
37
|
|
38
38
|
if status != 0
|
39
39
|
puts "CMD: #{full_cmd}"
|
40
|
-
puts
|
40
|
+
puts 'FAILED'
|
41
41
|
puts output
|
42
42
|
|
43
43
|
exit 1
|
44
44
|
end
|
45
|
-
|
46
|
-
#puts stdout_str
|
47
|
-
|
48
|
-
return output
|
45
|
+
output
|
49
46
|
end
|
50
47
|
|
51
48
|
def install_rails_in_tmp(rails_version = MAIN_RAILS_VER)
|
52
|
-
@rails_dir = Dir.mktmpdir
|
49
|
+
@rails_dir = Dir.mktmpdir
|
53
50
|
@app_abs_path = "#{@rails_dir}/#{APP_DIR}"
|
54
51
|
|
55
52
|
Dir.chdir(@rails_dir) do
|
56
53
|
Bundler.with_clean_env do
|
57
|
-
ENV[
|
54
|
+
ENV['RAILS_ENV'] = 'development'
|
58
55
|
find_or_install_rails(rails_version)
|
59
56
|
generate_rails_app(rails_version)
|
60
57
|
generate_plugin_things
|
@@ -64,11 +61,10 @@ describe "Rails plugin", vcr: false do
|
|
64
61
|
|
65
62
|
def find_or_install_rails(rails_version)
|
66
63
|
response = run_cmd('gem list \^rails\$ -q')
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
64
|
+
|
65
|
+
return true if response =~ /[^\d]#{rails_version}[^\d]/
|
66
|
+
|
67
|
+
run_cmd("gem install rails -v #{rails_version}")
|
72
68
|
end
|
73
69
|
|
74
70
|
def generate_rails_app(rails_version)
|
@@ -76,30 +72,35 @@ describe "Rails plugin", vcr: false do
|
|
76
72
|
source 'https://rubygems.org'
|
77
73
|
|
78
74
|
gem 'rails', '#{rails_version}'
|
79
|
-
gem 'sqlite3'
|
75
|
+
gem 'sqlite3', '~> 1.3.13'
|
80
76
|
gem 'turbolinks'
|
81
77
|
gem 'jquery-rails'
|
82
78
|
gem 'veritrans', path: '#{PLUGIN_DIR}'
|
83
79
|
".gsub(/^\s+/, '')
|
84
80
|
|
85
|
-
File.open(
|
86
|
-
run_cmd(
|
81
|
+
File.open('./Gemfile', 'w') { |f| f.write(gemfile_content) }
|
82
|
+
run_cmd('bundle _1.17.3_')
|
83
|
+
|
84
|
+
extra_rails_args = []
|
85
|
+
if rails_version >= '5.2.0'
|
86
|
+
extra_rails_args << '--skip-bootsnap'
|
87
|
+
end
|
87
88
|
|
88
|
-
gen = "bundle exec rails _#{rails_version}_ new #{APP_DIR} -B -G --skip-spring -d sqlite3 --skip-turbolinks --skip-test-unit --skip-action-cable --no-rc --skip-puma --skip-listen"
|
89
|
+
gen = "bundle exec rails _#{rails_version}_ new #{APP_DIR} -B -G --skip-spring -d sqlite3 --skip-turbolinks --skip-test-unit --skip-action-cable --no-rc --skip-puma --skip-listen #{extra_rails_args.join(' ')}"
|
89
90
|
|
90
91
|
run_cmd(gen)
|
91
92
|
|
92
|
-
File.open("#{@app_abs_path}/Gemfile",
|
93
|
+
File.open("#{@app_abs_path}/Gemfile", 'w') { |f| f.write(gemfile_content) }
|
93
94
|
|
94
95
|
Dir.chdir(@app_abs_path) do
|
95
|
-
run_cmd(
|
96
|
+
run_cmd('bundle _1.17.3_')
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
99
100
|
def generate_plugin_things
|
100
101
|
Dir.chdir(@app_abs_path) do
|
101
|
-
run_cmd(
|
102
|
-
run_cmd(
|
102
|
+
run_cmd('rails g veritrans:install')
|
103
|
+
run_cmd('rails g veritrans:payment_form')
|
103
104
|
end
|
104
105
|
|
105
106
|
config_content = "
|
@@ -109,26 +110,26 @@ development:
|
|
109
110
|
api_host: https://api.sandbox.midtrans.com
|
110
111
|
"
|
111
112
|
|
112
|
-
File.open("#{@app_abs_path}/config/veritrans.yml",
|
113
|
+
File.open("#{@app_abs_path}/config/veritrans.yml", 'w') { |f| f.write(config_content) }
|
113
114
|
end
|
114
115
|
|
115
116
|
def run_rails_app
|
116
117
|
@rails_port = find_open_port
|
117
118
|
|
118
119
|
server_cmd = "./bin/rails server -p #{@rails_port} -b 127.0.0.1"
|
119
|
-
server_env = {"RAILS_ENV" =>
|
120
|
-
spawn_opts = {chdir: @app_abs_path}
|
121
|
-
spawn_opts
|
120
|
+
server_env = { "RAILS_ENV" => 'development', "BUNDLE_GEMFILE" => @app_abs_path + '/Gemfile' }
|
121
|
+
spawn_opts = { chdir: @app_abs_path }
|
122
|
+
spawn_opts[%i[err out]] = '/dev/null' unless ENV['DEBUG']
|
122
123
|
|
123
124
|
Bundler.with_clean_env do
|
124
125
|
puts "RUN: #{server_cmd} #{spawn_opts}" if ENV['DEBUG']
|
125
126
|
@runner_pid = spawn(server_env, server_cmd, spawn_opts)
|
126
|
-
puts "Process running PID: #{
|
127
|
+
puts "Process running PID: #{@runner_pid}" if ENV['DEBUG']
|
127
128
|
end
|
128
129
|
|
129
130
|
Capybara.app_host = "http://127.0.0.1:#{@rails_port}"
|
130
131
|
|
131
|
-
#puts "RAILS_DIR: #{@app_abs_path}"
|
132
|
+
# puts "RAILS_DIR: #{@app_abs_path}"
|
132
133
|
|
133
134
|
check_cmd = "curl #{Capybara.app_host}/payments/new"
|
134
135
|
|
@@ -137,35 +138,33 @@ development:
|
|
137
138
|
puts "Check if rails server UP (#{Capybara.app_host})" if ENV['DEBUG']
|
138
139
|
output, status = Open3.capture2e(check_cmd)
|
139
140
|
if status == 0 && output =~ /credit_card_number/
|
140
|
-
|
141
|
-
|
141
|
+
if ENV['DEBUG']
|
142
|
+
puts 'Server is running, output:'
|
143
|
+
puts output[0..300]
|
144
|
+
end
|
142
145
|
break
|
143
146
|
else
|
144
147
|
failed += 1
|
145
|
-
#p error
|
146
|
-
#puts "Retry"
|
147
148
|
sleep 0.3
|
148
149
|
end
|
149
150
|
end
|
150
151
|
|
151
|
-
if failed
|
152
|
-
|
153
|
-
|
154
|
-
|
152
|
+
return if failed != 100
|
153
|
+
|
154
|
+
puts `tail -100 #{@app_abs_path}/log/development.log`
|
155
|
+
raise Exception, 'cannot start rails server'
|
155
156
|
end
|
156
157
|
|
157
158
|
def stop_rails_app
|
158
159
|
Dir.chdir(@app_abs_path) do
|
159
|
-
if File.exist?(
|
160
|
-
run_cmd("kill `cat tmp/pids/server.pid`")
|
161
|
-
end
|
160
|
+
run_cmd('kill `cat tmp/pids/server.pid`') if File.exist?('./tmp/pids/server.pid')
|
162
161
|
end
|
163
162
|
end
|
164
163
|
|
165
164
|
def find_open_port
|
166
165
|
socket = Socket.new(:INET, :STREAM, 0)
|
167
|
-
socket.bind(Addrinfo.tcp(
|
168
|
-
|
166
|
+
socket.bind(Addrinfo.tcp('127.0.0.1', 0))
|
167
|
+
socket.local_address.ip_port
|
169
168
|
ensure
|
170
169
|
socket.close
|
171
170
|
end
|
@@ -177,18 +176,17 @@ development:
|
|
177
176
|
|
178
177
|
def submit_payment_form(card_number)
|
179
178
|
# CREATE PAYMENT 1
|
180
|
-
visit
|
179
|
+
visit '/payments/new'
|
181
180
|
|
182
181
|
fill_in 'credit_card_number', with: card_number
|
183
|
-
|
184
|
-
|
185
|
-
puts "Clicked Pay"
|
182
|
+
click_button 'Pay via VT-Direct'
|
183
|
+
puts 'Clicked Pay'
|
186
184
|
|
187
185
|
# Waiting for get token request in javascript...
|
188
186
|
Timeout.timeout(60.seconds) do
|
189
187
|
loop do
|
190
|
-
|
191
|
-
|
188
|
+
break if current_path != '/payments/new'
|
189
|
+
|
192
190
|
sleep 1
|
193
191
|
end
|
194
192
|
end
|
@@ -196,14 +194,14 @@ development:
|
|
196
194
|
Timeout.timeout(10.seconds) do
|
197
195
|
loop do
|
198
196
|
break if page.body =~ /<body>/
|
197
|
+
|
199
198
|
sleep 0.1
|
200
199
|
end
|
201
200
|
end
|
202
201
|
end
|
203
202
|
|
204
203
|
RAILS_VERSIONS.each_with_index do |rails_version, spec_index|
|
205
|
-
next if rails_version.start_with?(
|
206
|
-
next if RUBY_VERSION >= "2.4.0" && rails_version < "4.2.0"
|
204
|
+
next if rails_version.start_with?('5') && RUBY_VERSION < '2.2.2'
|
207
205
|
|
208
206
|
it "should tests plugin (Rails #{rails_version})" do
|
209
207
|
puts "Testing with Rails #{rails_version} and Ruby #{RUBY_VERSION}"
|
@@ -212,13 +210,13 @@ development:
|
|
212
210
|
run_rails_app
|
213
211
|
|
214
212
|
card_numbers = [
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
213
|
+
'5481 1611 1111 1081',
|
214
|
+
'5410 1111 1111 1116',
|
215
|
+
'4011 1111 1111 1112',
|
216
|
+
'4411 1111 1111 1118',
|
217
|
+
'4811 1111 1111 1114',
|
218
|
+
'3528 6647 7942 9687',
|
219
|
+
'3528 2033 2456 4357'
|
222
220
|
]
|
223
221
|
spec_index = (spec_index + RUBY_VERSION.gsub(/[^\d]/, '').to_i) % card_numbers.size
|
224
222
|
card_number = card_numbers[spec_index]
|
@@ -226,31 +224,29 @@ development:
|
|
226
224
|
submit_payment_form(card_number)
|
227
225
|
|
228
226
|
if page.body =~ /too many transactions/
|
229
|
-
puts
|
230
|
-
puts
|
231
|
-
puts
|
232
|
-
#page.should have_content("Merchant has sent too many transactions to the same card number")
|
233
|
-
puts
|
227
|
+
puts '!!!!'
|
228
|
+
puts 'Merchant has sent too many transactions to the same card number'
|
229
|
+
puts '!!!!'
|
230
|
+
# page.should have_content("Merchant has sent too many transactions to the same card number")
|
231
|
+
puts 'Wait 10 seconds and retry'
|
234
232
|
sleep 10
|
235
233
|
submit_payment_form(card_number)
|
236
234
|
end
|
237
235
|
|
238
|
-
if page.body !~ /transaction is successful/
|
239
|
-
|
240
|
-
|
241
|
-
page.should have_content("Success, Credit Card transaction is successful")
|
236
|
+
puts page.body if page.body !~ /transaction is successful/
|
237
|
+
|
238
|
+
page.should have_content('Success, Credit Card transaction is successful')
|
242
239
|
|
243
|
-
order_info = ActiveSupport::JSON.decode(find(
|
240
|
+
order_info = ActiveSupport::JSON.decode(find('pre').text)
|
244
241
|
puts "Order Info: #{order_info}"
|
245
|
-
created_order_id = order_info[
|
246
|
-
#Capybara::Screenshot.screenshot_and_open_image
|
242
|
+
created_order_id = order_info['order_id']
|
243
|
+
# Capybara::Screenshot.screenshot_and_open_image
|
247
244
|
|
248
245
|
# CREATE PAYMENT 2
|
249
|
-
visit
|
250
|
-
click_link
|
246
|
+
visit '/payments/new'
|
247
|
+
click_link 'Pay via VT-Web'
|
251
248
|
|
252
|
-
page.should have_content(
|
253
|
-
#Capybara::Screenshot.screenshot_and_open_image
|
249
|
+
page.should have_content('ATM/Bank Transfer')
|
254
250
|
|
255
251
|
# TEST CALLBACK FOR WRONG DATA
|
256
252
|
stub_const("CONFIG", {})
|
@@ -261,38 +257,61 @@ development:
|
|
261
257
|
result1.should =~ /status: 404/
|
262
258
|
|
263
259
|
# TEST CALLBACK FOR CORRECT DATA
|
264
|
-
stub_const(
|
260
|
+
stub_const('CONFIG', order: created_order_id, config_path: "#{@app_abs_path}/config/veritrans.yml")
|
265
261
|
result2 = capture_stdout do
|
266
262
|
Veritrans::CLI.test_webhook(["#{Capybara.app_host}/payments/receive_webhook"])
|
267
263
|
end
|
268
264
|
|
269
|
-
if result2 !~ /status: 200/
|
270
|
-
puts `tail -40 #{@app_abs_path}/log/development.log`
|
271
|
-
end
|
265
|
+
puts `tail -40 #{@app_abs_path}/log/development.log` if result2 !~ /status: 200/
|
272
266
|
|
273
267
|
result2.should =~ /status: 200/
|
274
268
|
result2.should =~ /body: ok/
|
275
269
|
end
|
276
270
|
end
|
277
271
|
|
278
|
-
it
|
272
|
+
it 'should print message if running in staging' do
|
279
273
|
# PREPARE APP
|
280
274
|
install_rails_in_tmp
|
281
|
-
File.open("#{@app_abs_path}/config/database.yml", 'a') {|f|
|
275
|
+
File.open("#{@app_abs_path}/config/database.yml", 'a') { |f|
|
282
276
|
f.puts
|
283
|
-
f.puts(
|
284
|
-
f.puts(
|
277
|
+
f.puts('staging:')
|
278
|
+
f.puts(' adapter: sqlite3')
|
285
279
|
f.puts(" database: ':memory:'")
|
286
280
|
}
|
287
281
|
|
288
282
|
Bundler.with_clean_env do
|
289
|
-
ENV[
|
283
|
+
ENV['RAILS_ENV'] = 'staging'
|
290
284
|
Dir.chdir(@app_abs_path) do
|
291
|
-
stdout_str, stderr_str, status = Open3.capture3(%
|
285
|
+
stdout_str, stderr_str, status = Open3.capture3(%(./bin/rails r 'p :started'))
|
292
286
|
stderr_str.should include('Veritrans: Can not find section "staging"')
|
293
287
|
stderr_str.should include('Available sections: ["development"]')
|
294
288
|
stderr_str.should include('Veritrans: Using first section "development"')
|
295
289
|
end
|
296
290
|
end
|
297
291
|
end
|
292
|
+
|
293
|
+
it 'should create logs for log/veritrans.log' do
|
294
|
+
install_rails_in_tmp
|
295
|
+
FileUtils.rm_rf(@app_abs_path + '/log')
|
296
|
+
File.open(@app_abs_path + '/config/application.rb', 'a') do |f|
|
297
|
+
f.write %{
|
298
|
+
logger = ActiveSupport::Logger.new(STDOUT)
|
299
|
+
Rails.application.config.logger = ActiveSupport::TaggedLogging.new(logger)
|
300
|
+
}
|
301
|
+
end
|
302
|
+
run_rails_app
|
303
|
+
|
304
|
+
response = Excon.post(
|
305
|
+
"#{Capybara.app_host}/payments/receive_webhook",
|
306
|
+
body: { transaction_id: '111' }.to_json,
|
307
|
+
headers: { 'Content-Type' => 'application/json' }
|
308
|
+
)
|
309
|
+
expect(response.body).to eq 'error'
|
310
|
+
expect(response.status).to eq 404
|
311
|
+
|
312
|
+
expect(File.exist?(@app_abs_path + '/log/development.log')).to eq false
|
313
|
+
expect(File.exist?(@app_abs_path + '/log/veritrans.log')).to eq true
|
314
|
+
|
315
|
+
File.read(@app_abs_path + '/log/veritrans.log').should include('Callback verification failed for order')
|
316
|
+
end
|
298
317
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
|
3
|
-
|
3
|
+
$LOAD_PATH.push(File.expand_path('../lib', __dir__))
|
4
4
|
|
5
5
|
require 'rspec'
|
6
6
|
require 'veritrans'
|
@@ -9,15 +9,19 @@ require 'veritrans/events'
|
|
9
9
|
require 'rails'
|
10
10
|
require 'webmock/rspec'
|
11
11
|
require 'vcr'
|
12
|
+
require 'timecop'
|
12
13
|
|
13
14
|
require 'capybara/rspec'
|
15
|
+
require 'capybara-screenshot/rspec'
|
14
16
|
require 'capybara/poltergeist'
|
15
17
|
require 'active_support/testing/stream'
|
16
18
|
|
17
19
|
Capybara.register_driver :poltergeist do |app|
|
18
|
-
Capybara::Poltergeist::Driver.new(
|
20
|
+
Capybara::Poltergeist::Driver.new(
|
21
|
+
app,
|
22
|
+
js_errors: false,
|
19
23
|
# phantomjs don't much like ssl of cloudfront.net
|
20
|
-
phantomjs_options: [
|
24
|
+
phantomjs_options: %w[--ignore-ssl-errors=yes --ssl-protocol=any]
|
21
25
|
# logger: STDOUT
|
22
26
|
)
|
23
27
|
end
|
@@ -28,24 +32,30 @@ Capybara.configure do |config|
|
|
28
32
|
config.run_server = false
|
29
33
|
end
|
30
34
|
|
31
|
-
GEM_ROOT = File.expand_path(
|
35
|
+
GEM_ROOT = File.expand_path('..', __dir__)
|
32
36
|
ENV['RAILS_ENV'] = 'development'
|
33
37
|
|
34
38
|
VCR.configure do |c|
|
35
39
|
c.cassette_library_dir = 'spec/fixtures'
|
36
40
|
c.hook_into :webmock # or :fakeweb
|
37
|
-
#c.debug_logger = STDOUT
|
41
|
+
# c.debug_logger = STDOUT
|
42
|
+
end
|
43
|
+
|
44
|
+
module SpecHelper
|
45
|
+
def show_image
|
46
|
+
Capybara::Screenshot.screenshot_and_open_image
|
47
|
+
end
|
38
48
|
end
|
39
49
|
|
40
50
|
RSpec.configure do |config|
|
41
51
|
config.mock_with :rspec
|
42
52
|
|
43
53
|
config.expect_with :rspec do |c|
|
44
|
-
c.syntax = [
|
54
|
+
c.syntax = %i[should expect]
|
45
55
|
end
|
46
56
|
|
47
57
|
config.mock_with :rspec do |c|
|
48
|
-
c.syntax = [
|
58
|
+
c.syntax = %i[should expect]
|
49
59
|
end
|
50
60
|
|
51
61
|
config.around(:each) do |example|
|
@@ -57,4 +67,5 @@ RSpec.configure do |config|
|
|
57
67
|
example.run
|
58
68
|
end
|
59
69
|
end
|
70
|
+
config.include(SpecHelper)
|
60
71
|
end
|
@@ -8,6 +8,15 @@ describe Veritrans::Client do
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
def test_card_data
|
12
|
+
{
|
13
|
+
card_number: 4811_1111_1111_1114,
|
14
|
+
card_cvv: 123,
|
15
|
+
card_exp_month: 1,
|
16
|
+
card_exp_year: Time.now.year + 1
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
11
20
|
it "should use Veritrans.http_options", vcr: false do
|
12
21
|
Veritrans::Config.stub(:http_options) do
|
13
22
|
{ omit_default_port: true }
|
@@ -16,7 +25,7 @@ describe Veritrans::Client do
|
|
16
25
|
api_request = nil
|
17
26
|
stub_request(:any, /.*/).to_return(lambda { |request|
|
18
27
|
api_request = request
|
19
|
-
{body: request.body}
|
28
|
+
{ body: request.body }
|
20
29
|
})
|
21
30
|
|
22
31
|
result = Veritrans.request_with_logging(:get, Veritrans.config.api_host + "/ping", {})
|
@@ -32,7 +41,7 @@ describe Veritrans::Client do
|
|
32
41
|
api_request = nil
|
33
42
|
stub_request(:any, /.*/).to_return(lambda { |request|
|
34
43
|
api_request = request
|
35
|
-
{body: request.body}
|
44
|
+
{ body: request.body }
|
36
45
|
})
|
37
46
|
|
38
47
|
result = Veritrans.request_with_logging(:get, Veritrans.config.api_host + "/ping", {})
|
@@ -72,7 +81,8 @@ describe Veritrans::Client do
|
|
72
81
|
other_result = other_client.status(result.transaction_id)
|
73
82
|
|
74
83
|
other_result.status_code.should == 404
|
75
|
-
|
84
|
+
|
85
|
+
other_result.status_message.should == "Transaction doesn't exist."
|
76
86
|
|
77
87
|
#p other_result.request_options
|
78
88
|
|
@@ -83,7 +93,7 @@ describe Veritrans::Client do
|
|
83
93
|
|
84
94
|
it "should send charge vt-web request" do
|
85
95
|
VCR.use_cassette('charge_vtweb') do
|
86
|
-
result = Veritrans.charge('vtweb', transaction: { order_id: Time.now.to_s, gross_amount: 100_000 }
|
96
|
+
result = Veritrans.charge('vtweb', transaction: { order_id: Time.now.to_s, gross_amount: 100_000 })
|
87
97
|
|
88
98
|
result.status_message.should == "OK, success do VTWeb transaction, please go to redirect_url"
|
89
99
|
result.success?.should == true
|
@@ -105,16 +115,16 @@ describe Veritrans::Client do
|
|
105
115
|
VCR.use_cassette('status_fail') do
|
106
116
|
result = Veritrans.status("not-exists")
|
107
117
|
result.success?.should == false
|
108
|
-
result.status_message.should == "
|
118
|
+
result.status_message.should == "Transaction doesn't exist."
|
109
119
|
end
|
110
120
|
end
|
111
121
|
|
112
122
|
it "should send status request and get response" do
|
113
123
|
VCR.use_cassette('status_success') do
|
114
|
-
result_charge = Veritrans.charge('permata', transaction: { order_id: Time.now.to_i, gross_amount: 100_000 }
|
124
|
+
result_charge = Veritrans.charge('permata', transaction: { order_id: Time.now.to_i, gross_amount: 100_000 })
|
115
125
|
result = Veritrans.status(result_charge.order_id)
|
116
126
|
result.success?.should == true
|
117
|
-
result.status_message.should == "Success, transaction found"
|
127
|
+
result.status_message.should == "Success, transaction is found"
|
118
128
|
result.transaction_status.should == "pending"
|
119
129
|
end
|
120
130
|
end
|
@@ -123,13 +133,13 @@ describe Veritrans::Client do
|
|
123
133
|
VCR.use_cassette('cancel_failed') do
|
124
134
|
result = Veritrans.cancel("not-exists")
|
125
135
|
result.success?.should == false
|
126
|
-
result.status_message.should == "
|
136
|
+
result.status_message.should == "Transaction doesn't exist."
|
127
137
|
end
|
128
138
|
end
|
129
139
|
|
130
140
|
it "should send status request and get response" do
|
131
141
|
VCR.use_cassette('cancel_success') do
|
132
|
-
result_charge = Veritrans.charge('permata', transaction: { order_id: Time.now.to_i, gross_amount: 100_000 }
|
142
|
+
result_charge = Veritrans.charge('permata', transaction: { order_id: Time.now.to_i, gross_amount: 100_000 })
|
133
143
|
result = Veritrans.cancel(result_charge.order_id)
|
134
144
|
result.success?.should == true
|
135
145
|
result.status_message.should == "Success, transaction is canceled"
|
@@ -145,6 +155,22 @@ describe Veritrans::Client do
|
|
145
155
|
end
|
146
156
|
end
|
147
157
|
|
158
|
+
it 'should get token for testing' do
|
159
|
+
VCR.use_cassette('test_token') do
|
160
|
+
result = Veritrans.test_token(test_card_data)
|
161
|
+
result.should be_a_kind_of(String)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# Can only refund after it has been settled after one day
|
166
|
+
it 'should send refund request' do
|
167
|
+
VCR.use_cassette('refund_failed') do
|
168
|
+
result = Veritrans.refund('1415110696')
|
169
|
+
result.success?.should == false
|
170
|
+
result.status_message.should == 'Merchant cannot modify the status of the transaction'
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
148
174
|
it "should send capture request" do
|
149
175
|
VCR.use_cassette('capture_failed') do
|
150
176
|
result = Veritrans.capture("not-exists", 1000)
|
@@ -153,6 +179,31 @@ describe Veritrans::Client do
|
|
153
179
|
end
|
154
180
|
end
|
155
181
|
|
182
|
+
it 'should send deny request' do
|
183
|
+
VCR.use_cassette('deny_failed') do
|
184
|
+
Timecop.freeze(Time.utc(2019, 4, 1)) do
|
185
|
+
order_id = Time.now.to_i.to_s
|
186
|
+
|
187
|
+
charge_result = Veritrans.charge(
|
188
|
+
payment_type: 'credit_card',
|
189
|
+
credit_card: {
|
190
|
+
token_id: Veritrans.test_token(test_card_data)
|
191
|
+
},
|
192
|
+
transaction_details: {
|
193
|
+
order_id: order_id,
|
194
|
+
gross_amount: 3000
|
195
|
+
}
|
196
|
+
)
|
197
|
+
|
198
|
+
charge_result.status_message.should == "Success, Credit Card transaction is successful"
|
199
|
+
|
200
|
+
result = Veritrans.deny(order_id)
|
201
|
+
result.success?.should == false
|
202
|
+
result.status_message.should == 'Transaction status cannot be updated.'
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
156
207
|
it "should send expire request" do
|
157
208
|
VCR.use_cassette('expire_success', record: :once) do
|
158
209
|
result = Veritrans.expire("af3fb136-c405-4103-9a36-5a6a9e2855a9")
|