veritrans 2.1.2 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +10 -1
- data/.idea/.gitignore +8 -0
- data/.rubocop.yml +35 -0
- data/.travis.yml +10 -5
- data/CHANGELOG.md +45 -0
- data/Gemfile +6 -7
- data/Gemfile.lock +134 -146
- data/Maintaining.MD +8 -0
- data/README.md +266 -226
- data/api_reference.md +534 -143
- data/example/coreapi/core_api_credit_card_example.rb +66 -0
- data/example/coreapi/readme.md +4 -0
- data/example/sinatra/Gemfile +7 -0
- data/example/sinatra/README.md +6 -0
- data/example/sinatra/index.erb +202 -0
- data/example/sinatra/response.erb +1 -0
- data/example/sinatra/snap.erb +33 -0
- data/example/sinatra/snap_redirect.erb +10 -0
- data/example/sinatra/webapp.rb +113 -0
- data/example/snap/readme.md +4 -0
- data/example/snap/snap_example.rb +39 -0
- data/lib/test/all.rb +1 -0
- data/lib/test/api_test.rb +319 -0
- data/lib/test/config_test.rb +26 -0
- data/lib/test/gopay_tokenization_test.rb +80 -0
- data/lib/test/snap_test.rb +79 -0
- data/lib/test/subscription_test.rb +116 -0
- data/lib/test/transaction_test.rb +160 -0
- data/lib/veritrans/api.rb +146 -22
- data/lib/veritrans/client.rb +48 -12
- data/lib/veritrans/config.rb +31 -6
- data/lib/veritrans/events.rb +46 -35
- data/lib/veritrans/midtrans_error.rb +15 -0
- data/lib/veritrans/result.rb +66 -5
- data/lib/veritrans/version.rb +1 -1
- data/lib/veritrans.rb +121 -12
- data/veritrans.gemspec +2 -9
- metadata +30 -146
- data/.rspec +0 -2
- data/Procfile +0 -1
- data/Rakefile +0 -16
- data/bin/midtrans +0 -3
- data/bin/veritrans +0 -68
- data/example/README.md +0 -8
- data/example/config.ru +0 -6
- data/example/index.erb +0 -213
- data/example/localization.erb +0 -248
- data/example/points.erb +0 -187
- data/example/recurring.erb +0 -201
- data/example/response.erb +0 -37
- data/example/sinatra.rb +0 -188
- data/example/style.css +0 -126
- data/example/veritrans.yml +0 -11
- data/example/widget.erb +0 -51
- data/lib/generators/templates/assets/credit_card_form.js +0 -51
- data/lib/generators/templates/payments_controller.rb +0 -85
- data/lib/generators/templates/veritrans.rb +0 -46
- data/lib/generators/templates/veritrans.yml +0 -18
- data/lib/generators/templates/views/_credit_card_form.erb +0 -42
- data/lib/generators/templates/views/_veritrans_include.erb +0 -10
- data/lib/generators/templates/views/payments/create.erb +0 -15
- data/lib/generators/templates/views/payments/new.erb +0 -6
- data/lib/generators/veritrans/install_generator.rb +0 -32
- data/lib/generators/veritrans/payment_form_generator.rb +0 -45
- data/lib/veritrans/cli.rb +0 -155
- data/lib/veritrans/core_extensions.rb +0 -32
- data/spec/cli_spec.rb +0 -83
- data/spec/configs/real_key.yml +0 -4
- data/spec/configs/veritrans.yml +0 -7
- data/spec/configs/veritrans_flat.yml +0 -2
- data/spec/configs/veritrans_with_erb.yml +0 -2
- data/spec/fixtures/approve_failed.yml +0 -48
- data/spec/fixtures/cancel_failed.yml +0 -48
- data/spec/fixtures/cancel_success.yml +0 -106
- data/spec/fixtures/capture_failed.yml +0 -48
- data/spec/fixtures/charge.yml +0 -50
- data/spec/fixtures/charge_direct.yml +0 -56
- data/spec/fixtures/charge_vtweb.yml +0 -50
- data/spec/fixtures/cli_test_1111-not-exists.yml +0 -45
- data/spec/fixtures/cli_test_not_exists.yml +0 -45
- data/spec/fixtures/cli_test_real_txn.yml +0 -55
- data/spec/fixtures/cli_test_unauthorized.yml +0 -47
- data/spec/fixtures/events_test_real_txn.yml +0 -55
- data/spec/fixtures/expire_failed.yml +0 -50
- data/spec/fixtures/expire_success.yml +0 -56
- data/spec/fixtures/midtrans_status.yml +0 -117
- data/spec/fixtures/status_fail.yml +0 -46
- data/spec/fixtures/status_success.yml +0 -109
- data/spec/midtrans_rename_spec.rb +0 -27
- data/spec/rails_plugin_spec.rb +0 -281
- data/spec/spec_helper.rb +0 -61
- data/spec/veritrans_client_spec.rb +0 -184
- data/spec/veritrans_config_spec.rb +0 -70
- data/spec/veritrans_events_spec.rb +0 -72
- data/spec/veritrans_logger_spec.rb +0 -46
- data/spec/veritrans_snap_spec.rb +0 -39
- data/testing_webhooks.md +0 -78
@@ -1,27 +0,0 @@
|
|
1
|
-
describe Veritrans::Client do
|
2
|
-
|
3
|
-
before do
|
4
|
-
hide_const("Rails")
|
5
|
-
Midtrans.logger = Logger.new("/dev/null")
|
6
|
-
Midtrans.setup do
|
7
|
-
config.load_config "./spec/configs/real_key.yml"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should create alias constant for Midtrans" do
|
12
|
-
Midtrans.should == Veritrans
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should work with Midtrans" do
|
16
|
-
VCR.use_cassette('midtrans_status') do
|
17
|
-
txn_result = Veritrans.charge("permata", transaction: { order_id: Time.now.to_s, gross_amount: 100_000 })
|
18
|
-
txn_result.success?.should == true
|
19
|
-
txn_result.status_message.should == "Success, PERMATA VA transaction is successful"
|
20
|
-
|
21
|
-
cancel_result = Midtrans.status(txn_result.order_id)
|
22
|
-
cancel_result.success?.should == true
|
23
|
-
cancel_result.status_message.should == "Success, transaction is found"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
data/spec/rails_plugin_spec.rb
DELETED
@@ -1,281 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'open3'
|
3
|
-
require 'shellwords'
|
4
|
-
require 'socket'
|
5
|
-
|
6
|
-
describe "Rails plugin", vcr: false do
|
7
|
-
include Capybara::DSL
|
8
|
-
|
9
|
-
MAIN_RAILS_VER = "5.0.0.1"
|
10
|
-
APP_DIR = "plugin_test"
|
11
|
-
PLUGIN_DIR = File.expand_path("..", File.dirname(__FILE__))
|
12
|
-
|
13
|
-
RAILS_VERSIONS = ["4.0.13", "4.1.16", "4.2.7.1", "5.0.0.1"]
|
14
|
-
|
15
|
-
before :all do
|
16
|
-
FileUtils.mkdir_p("#{PLUGIN_DIR}/tmp")
|
17
|
-
#Capybara::Screenshot.instance_variable_set(:@capybara_root, "#{PLUGIN_DIR}/tmp")
|
18
|
-
end
|
19
|
-
|
20
|
-
def capture_stdout(&block)
|
21
|
-
original_stdout = $stdout
|
22
|
-
$stdout = fake = StringIO.new
|
23
|
-
begin
|
24
|
-
yield
|
25
|
-
ensure
|
26
|
-
$stdout = original_stdout
|
27
|
-
end
|
28
|
-
fake.string
|
29
|
-
end
|
30
|
-
|
31
|
-
def run_cmd(cmd, cli_args = [])
|
32
|
-
full_cmd = ([cmd] + cli_args).join.strip
|
33
|
-
|
34
|
-
stdout_str, stderr_str, status = Open3.capture3(full_cmd)
|
35
|
-
|
36
|
-
if status != 0
|
37
|
-
puts "CMD: #{full_cmd}"
|
38
|
-
puts "FAILED"
|
39
|
-
puts stderr_str
|
40
|
-
|
41
|
-
exit 1
|
42
|
-
end
|
43
|
-
|
44
|
-
#puts stdout_str
|
45
|
-
|
46
|
-
return stdout_str
|
47
|
-
end
|
48
|
-
|
49
|
-
def install_rails_in_tmp(rails_version = MAIN_RAILS_VER)
|
50
|
-
@rails_dir = Dir.mktmpdir()
|
51
|
-
@app_abs_path = "#{@rails_dir}/#{APP_DIR}"
|
52
|
-
|
53
|
-
Dir.chdir(@rails_dir) do
|
54
|
-
Bundler.with_clean_env do
|
55
|
-
ENV["RAILS_ENV"] = "development"
|
56
|
-
find_or_install_rails(rails_version)
|
57
|
-
generate_rails_app(rails_version)
|
58
|
-
generate_plugin_things
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def find_or_install_rails(rails_version)
|
64
|
-
response = run_cmd('gem list \^rails\$ -q')
|
65
|
-
if response =~ /[^\d]#{rails_version}[^\d]/
|
66
|
-
return true
|
67
|
-
else
|
68
|
-
run_cmd("gem install rails -v #{rails_version} --no-ri --no-rdoc")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def generate_rails_app(rails_version)
|
73
|
-
gen = "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"
|
74
|
-
run_cmd(gen)
|
75
|
-
|
76
|
-
gemfile_content = "
|
77
|
-
source 'https://rubygems.org'
|
78
|
-
|
79
|
-
gem 'rails', '#{rails_version}'
|
80
|
-
gem 'sqlite3'
|
81
|
-
gem 'turbolinks'
|
82
|
-
gem 'jquery-rails'
|
83
|
-
gem 'veritrans', path: '#{PLUGIN_DIR}'
|
84
|
-
".gsub(/^\s+/, '')
|
85
|
-
|
86
|
-
File.open("#{@app_abs_path}/Gemfile", "w") {|f| f.write(gemfile_content) }
|
87
|
-
|
88
|
-
Dir.chdir(@app_abs_path) do
|
89
|
-
run_cmd("bundle")
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def generate_plugin_things
|
94
|
-
Dir.chdir(@app_abs_path) do
|
95
|
-
run_cmd("rails g veritrans:install")
|
96
|
-
run_cmd("rails g veritrans:payment_form")
|
97
|
-
end
|
98
|
-
|
99
|
-
config_content = "
|
100
|
-
development:
|
101
|
-
client_key: VT-client-NArmatJZqzsmTmzR
|
102
|
-
server_key: VT-server-9Htb-RxXkg7-7hznSCCjxvoY
|
103
|
-
api_host: https://api.sandbox.veritrans.co.id
|
104
|
-
"
|
105
|
-
|
106
|
-
File.open("#{@app_abs_path}/config/veritrans.yml", "w") {|f| f.write(config_content) }
|
107
|
-
end
|
108
|
-
|
109
|
-
def run_rails_app
|
110
|
-
@rails_port = find_open_port
|
111
|
-
|
112
|
-
Bundler.with_clean_env do
|
113
|
-
ENV["RAILS_ENV"] = "development"
|
114
|
-
Dir.chdir(@app_abs_path) do
|
115
|
-
run_cmd("./bin/rails server -d -p #{@rails_port} --bind 127.0.0.1")
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
Capybara.app_host = "http://127.0.0.1:#{@rails_port}"
|
120
|
-
|
121
|
-
#puts "RAILS_DIR: #{@app_abs_path}"
|
122
|
-
|
123
|
-
failed = 0
|
124
|
-
while failed < 10
|
125
|
-
begin
|
126
|
-
run_cmd("curl #{Capybara.app_host}/payments/new > /dev/null")
|
127
|
-
break
|
128
|
-
rescue Object => error
|
129
|
-
failed += 1
|
130
|
-
p error
|
131
|
-
puts "Retry"
|
132
|
-
sleep 0.3
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
if failed == 10
|
137
|
-
puts `tail -100 #{@app_abs_path}/log/development.log`
|
138
|
-
raise Exception, "can not start rails server"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def stop_rails_app
|
143
|
-
Dir.chdir(@app_abs_path) do
|
144
|
-
if File.exist?("./tmp/pids/server.pid")
|
145
|
-
run_cmd("kill `cat tmp/pids/server.pid`")
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
def find_open_port
|
151
|
-
socket = Socket.new(:INET, :STREAM, 0)
|
152
|
-
socket.bind(Addrinfo.tcp("127.0.0.1", 0))
|
153
|
-
return socket.local_address.ip_port
|
154
|
-
ensure
|
155
|
-
socket.close
|
156
|
-
end
|
157
|
-
|
158
|
-
after do
|
159
|
-
stop_rails_app
|
160
|
-
FileUtils.remove_entry_secure(@rails_dir) if @rails_dir
|
161
|
-
end
|
162
|
-
|
163
|
-
def submit_payment_form(card_number)
|
164
|
-
# CREATE PAYMENT 1
|
165
|
-
visit "/payments/new"
|
166
|
-
|
167
|
-
fill_in 'credit_card_number', with: card_number
|
168
|
-
|
169
|
-
click_button "Pay via VT-Direct"
|
170
|
-
puts "Clicked Pay"
|
171
|
-
|
172
|
-
# Waiting for get token request in javascript...
|
173
|
-
Timeout.timeout(60.seconds) do
|
174
|
-
loop do
|
175
|
-
#puts "Path: #{current_path}"
|
176
|
-
break if current_path != "/payments/new"
|
177
|
-
sleep 1
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
Timeout.timeout(10.seconds) do
|
182
|
-
loop do
|
183
|
-
break if page.body =~ /<body>/
|
184
|
-
sleep 0.1
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
RAILS_VERSIONS.each_with_index do |rails_version, spec_index|
|
190
|
-
next if rails_version.start_with?("5") && RUBY_VERSION < "2.2.2"
|
191
|
-
|
192
|
-
it "should tests plugin (Rails #{rails_version})" do
|
193
|
-
# PREPARE APP
|
194
|
-
install_rails_in_tmp(rails_version)
|
195
|
-
run_rails_app
|
196
|
-
|
197
|
-
card_numbers = [
|
198
|
-
"5481 1611 1111 1081",
|
199
|
-
"5410 1111 1111 1116",
|
200
|
-
"4011 1111 1111 1112",
|
201
|
-
"4411 1111 1111 1118",
|
202
|
-
"4811 1111 1111 1114",
|
203
|
-
"3528 6647 7942 9687",
|
204
|
-
"3528 2033 2456 4357"
|
205
|
-
]
|
206
|
-
spec_index = (spec_index + RUBY_VERSION.gsub(/[^\d]/, '').to_i) % card_numbers.size
|
207
|
-
card_number = card_numbers[spec_index]
|
208
|
-
|
209
|
-
submit_payment_form(card_number)
|
210
|
-
|
211
|
-
if page.body =~ /too many transactions/
|
212
|
-
puts "!!!!"
|
213
|
-
puts "Merchant has sent too many transactions to the same card number"
|
214
|
-
puts "!!!!"
|
215
|
-
#page.should have_content("Merchant has sent too many transactions to the same card number")
|
216
|
-
puts "Wait 10 seconds and retry"
|
217
|
-
sleep 10
|
218
|
-
submit_payment_form(card_number)
|
219
|
-
end
|
220
|
-
|
221
|
-
if page.body !~ /transaction is successful/
|
222
|
-
puts page.body
|
223
|
-
end
|
224
|
-
page.should have_content("Success, Credit Card transaction is successful")
|
225
|
-
|
226
|
-
order_info = ActiveSupport::JSON.decode(find("pre").text)
|
227
|
-
puts "Order Info: #{order_info}"
|
228
|
-
created_order_id = order_info["order_id"]
|
229
|
-
#Capybara::Screenshot.screenshot_and_open_image
|
230
|
-
|
231
|
-
# CREATE PAYMENT 2
|
232
|
-
visit "/payments/new"
|
233
|
-
click_link "Pay via VT-Web"
|
234
|
-
|
235
|
-
page.should have_content("Payment is securely processed by Veritrans")
|
236
|
-
#Capybara::Screenshot.screenshot_and_open_image
|
237
|
-
|
238
|
-
# TEST CALLBACK FOR WRONG DATA
|
239
|
-
stub_const("CONFIG", {})
|
240
|
-
result1 = capture_stdout do
|
241
|
-
Veritrans::CLI.test_webhook(["#{Capybara.app_host}/payments/receive_webhook"])
|
242
|
-
end
|
243
|
-
|
244
|
-
result1.should =~ /status: 404/
|
245
|
-
|
246
|
-
# TEST CALLBACK FOR CORRECT DATA
|
247
|
-
stub_const("CONFIG", {order: created_order_id, config_path: "#{@app_abs_path}/config/veritrans.yml"})
|
248
|
-
result2 = capture_stdout do
|
249
|
-
Veritrans::CLI.test_webhook(["#{Capybara.app_host}/payments/receive_webhook"])
|
250
|
-
end
|
251
|
-
|
252
|
-
if result2 !~ /status: 200/
|
253
|
-
puts `tail -40 #{@app_abs_path}/log/development.log`
|
254
|
-
end
|
255
|
-
|
256
|
-
result2.should =~ /status: 200/
|
257
|
-
result2.should =~ /body: ok/
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
it "should print message if running in staging" do
|
262
|
-
# PREPARE APP
|
263
|
-
install_rails_in_tmp
|
264
|
-
File.open("#{@app_abs_path}/config/database.yml", 'a') {|f|
|
265
|
-
f.puts
|
266
|
-
f.puts("staging:")
|
267
|
-
f.puts(" adapter: sqlite3")
|
268
|
-
f.puts(" database: ':memory:'")
|
269
|
-
}
|
270
|
-
|
271
|
-
Bundler.with_clean_env do
|
272
|
-
ENV["RAILS_ENV"] = "staging"
|
273
|
-
Dir.chdir(@app_abs_path) do
|
274
|
-
stdout_str, stderr_str, status = Open3.capture3(%{./bin/rails r 'p :started'})
|
275
|
-
stderr_str.should include('Veritrans: Can not find section "staging"')
|
276
|
-
stderr_str.should include('Available sections: ["development"]')
|
277
|
-
stderr_str.should include('Veritrans: Using first section "development"')
|
278
|
-
end
|
279
|
-
end
|
280
|
-
end
|
281
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
|
3
|
-
$:.push(File.expand_path("../../lib", __FILE__))
|
4
|
-
|
5
|
-
require 'rspec'
|
6
|
-
require 'veritrans'
|
7
|
-
require 'veritrans/cli'
|
8
|
-
require 'veritrans/events'
|
9
|
-
require 'rails'
|
10
|
-
require 'webmock/rspec'
|
11
|
-
require 'vcr'
|
12
|
-
|
13
|
-
require 'capybara/rspec'
|
14
|
-
require 'capybara/poltergeist'
|
15
|
-
require 'active_support/testing/stream'
|
16
|
-
|
17
|
-
Capybara.register_driver :poltergeist do |app|
|
18
|
-
Capybara::Poltergeist::Driver.new(app,
|
19
|
-
# phantomjs don't much like ssl of cloudfront.net
|
20
|
-
phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=any'],
|
21
|
-
# logger: STDOUT
|
22
|
-
)
|
23
|
-
end
|
24
|
-
|
25
|
-
Capybara.configure do |config|
|
26
|
-
config.javascript_driver = :poltergeist
|
27
|
-
config.default_driver = :poltergeist
|
28
|
-
config.app_host = ""
|
29
|
-
config.run_server = false
|
30
|
-
end
|
31
|
-
|
32
|
-
GEM_ROOT = File.expand_path("../..", __FILE__)
|
33
|
-
ENV['RAILS_ENV'] = 'development'
|
34
|
-
|
35
|
-
VCR.configure do |c|
|
36
|
-
c.cassette_library_dir = 'spec/fixtures'
|
37
|
-
c.hook_into :webmock # or :fakeweb
|
38
|
-
#c.debug_logger = STDOUT
|
39
|
-
end
|
40
|
-
|
41
|
-
RSpec.configure do |config|
|
42
|
-
config.mock_with :rspec
|
43
|
-
|
44
|
-
config.expect_with :rspec do |c|
|
45
|
-
c.syntax = [:should, :expect]
|
46
|
-
end
|
47
|
-
|
48
|
-
config.mock_with :rspec do |c|
|
49
|
-
c.syntax = [:should, :expect]
|
50
|
-
end
|
51
|
-
|
52
|
-
config.around(:each) do |example|
|
53
|
-
if example.metadata[:vcr] === false
|
54
|
-
WebMock.allow_net_connect!
|
55
|
-
VCR.turned_off { example.run }
|
56
|
-
WebMock.disable_net_connect!
|
57
|
-
else
|
58
|
-
example.run
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,184 +0,0 @@
|
|
1
|
-
describe Veritrans::Client do
|
2
|
-
|
3
|
-
before do
|
4
|
-
hide_const("Rails")
|
5
|
-
Veritrans.logger = Logger.new("/dev/null")
|
6
|
-
Veritrans.setup do
|
7
|
-
config.load_config "./spec/configs/real_key.yml"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should use Veritrans.http_options", vcr: false do
|
12
|
-
Veritrans::Config.stub(:http_options) do
|
13
|
-
{ omit_default_port: true }
|
14
|
-
end
|
15
|
-
|
16
|
-
api_request = nil
|
17
|
-
stub_request(:any, /.*/).to_return(lambda { |request|
|
18
|
-
api_request = request
|
19
|
-
{body: request.body}
|
20
|
-
})
|
21
|
-
|
22
|
-
result = Veritrans.request_with_logging(:get, Veritrans.config.api_host + "/ping", {})
|
23
|
-
|
24
|
-
api_request.headers["Host"].should == "api.sandbox.veritrans.co.id:443"
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should use Veritrans.http_options to attach hedaers", vcr: false do
|
28
|
-
Veritrans.config.stub(:http_options) do
|
29
|
-
{ headers: { "X-Rspec" => "ok" } }
|
30
|
-
end
|
31
|
-
|
32
|
-
api_request = nil
|
33
|
-
stub_request(:any, /.*/).to_return(lambda { |request|
|
34
|
-
api_request = request
|
35
|
-
{body: request.body}
|
36
|
-
})
|
37
|
-
|
38
|
-
result = Veritrans.request_with_logging(:get, Veritrans.config.api_host + "/ping", {})
|
39
|
-
|
40
|
-
api_request.headers["X-Rspec"].should == "ok"
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should be able to create other instance of client" do
|
44
|
-
#Veritrans.logger = Logger.new(STDOUT)
|
45
|
-
|
46
|
-
VCR.configure do |c|
|
47
|
-
c.allow_http_connections_when_no_cassette = true
|
48
|
-
end
|
49
|
-
|
50
|
-
other_client = Veritrans.new(
|
51
|
-
server_key: "69b61a1b-b0b1-450b-a697-37109dbbecb0",
|
52
|
-
logger: Logger.new("/dev/null")
|
53
|
-
) # M000937
|
54
|
-
|
55
|
-
result = Veritrans.charge(
|
56
|
-
payment_type: "mandiri_clickpay",
|
57
|
-
transaction_details: {
|
58
|
-
gross_amount: 10_000,
|
59
|
-
order_id: Time.now.to_s
|
60
|
-
},
|
61
|
-
mandiri_clickpay: {
|
62
|
-
card_number: "4111 1111 1111 1111".gsub(/\s/, ''),
|
63
|
-
input3: "%05d" % (rand * 100000).to_i,
|
64
|
-
input2: 10000,
|
65
|
-
input1: "1" * 10,
|
66
|
-
token: "000000"
|
67
|
-
},
|
68
|
-
)
|
69
|
-
|
70
|
-
#p result.request_options
|
71
|
-
|
72
|
-
other_result = other_client.status(result.transaction_id)
|
73
|
-
|
74
|
-
other_result.status_code.should == 404
|
75
|
-
other_result.status_message.should == "The requested resource is not found"
|
76
|
-
|
77
|
-
#p other_result.request_options
|
78
|
-
|
79
|
-
VCR.configure do |c|
|
80
|
-
c.allow_http_connections_when_no_cassette = true
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should send charge vt-web request" do
|
85
|
-
VCR.use_cassette('charge_vtweb') do
|
86
|
-
result = Veritrans.charge('vtweb', transaction: { order_id: Time.now.to_s, gross_amount: 100_000 } )
|
87
|
-
|
88
|
-
result.status_message.should == "OK, success do VTWeb transaction, please go to redirect_url"
|
89
|
-
result.success?.should == true
|
90
|
-
result.redirect_url.should be_present
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should send charge vt-web request" do
|
95
|
-
VCR.use_cassette('charge_direct') do
|
96
|
-
result = Veritrans.charge("permata", transaction: { order_id: Time.now.to_s, gross_amount: 100_000 })
|
97
|
-
|
98
|
-
result.status_message.should == "Success, PERMATA VA transaction is successful"
|
99
|
-
result.success?.should == true
|
100
|
-
result.permata_va_number.should be_present
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should send status request" do
|
105
|
-
VCR.use_cassette('status_fail') do
|
106
|
-
result = Veritrans.status("not-exists")
|
107
|
-
result.success?.should == false
|
108
|
-
result.status_message.should == "The requested resource is not found"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should send status request and get response" do
|
113
|
-
VCR.use_cassette('status_success') do
|
114
|
-
result_charge = Veritrans.charge('permata', transaction: { order_id: Time.now.to_i, gross_amount: 100_000 } )
|
115
|
-
result = Veritrans.status(result_charge.order_id)
|
116
|
-
result.success?.should == true
|
117
|
-
result.status_message.should == "Success, transaction found"
|
118
|
-
result.transaction_status.should == "pending"
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
it "should send status request and get response" do
|
123
|
-
VCR.use_cassette('cancel_failed') do
|
124
|
-
result = Veritrans.cancel("not-exists")
|
125
|
-
result.success?.should == false
|
126
|
-
result.status_message.should == "The requested resource is not found"
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should send status request and get response" do
|
131
|
-
VCR.use_cassette('cancel_success') do
|
132
|
-
result_charge = Veritrans.charge('permata', transaction: { order_id: Time.now.to_i, gross_amount: 100_000 } )
|
133
|
-
result = Veritrans.cancel(result_charge.order_id)
|
134
|
-
result.success?.should == true
|
135
|
-
result.status_message.should == "Success, transaction is canceled"
|
136
|
-
result.transaction_status.should == "cancel"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should send approve request" do
|
141
|
-
VCR.use_cassette('approve_failed') do
|
142
|
-
result = Veritrans.cancel("not-exists")
|
143
|
-
result.success?.should == false
|
144
|
-
result.status_message.should == "The requested resource is not found"
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
it "should send capture request" do
|
149
|
-
VCR.use_cassette('capture_failed') do
|
150
|
-
result = Veritrans.capture("not-exists", 1000)
|
151
|
-
result.success?.should == false
|
152
|
-
result.status_message.should == "The requested resource is not found"
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
it "should send expire request" do
|
157
|
-
VCR.use_cassette('expire_success', record: :once) do
|
158
|
-
result = Veritrans.expire("af3fb136-c405-4103-9a36-5a6a9e2855a9")
|
159
|
-
result.success?.should == true
|
160
|
-
result.status_message.should == "Success, transaction has expired"
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
it "should send expire request" do
|
165
|
-
VCR.use_cassette('expire_failed', record: :once) do
|
166
|
-
result = Veritrans.expire("not-exists")
|
167
|
-
result.success?.should == false
|
168
|
-
result.status_message.should == "The requested resource is not found"
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
it "should handle network exceptions", vcr: false do
|
173
|
-
Excon::Connection.any_instance.stub(:send) do
|
174
|
-
raise Excon::Errors::SocketError, Excon::Errors::Error.new("testing exception")
|
175
|
-
end
|
176
|
-
|
177
|
-
result = Veritrans.expire("not-exists")
|
178
|
-
result.status.should == "500"
|
179
|
-
result.data.should == {
|
180
|
-
status_code: "500",
|
181
|
-
status_message: "Internal server error, no response from backend. Try again later"
|
182
|
-
}
|
183
|
-
end
|
184
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
describe Veritrans::Config do
|
2
|
-
|
3
|
-
before do
|
4
|
-
hide_const("Rails")
|
5
|
-
hide_const("ENV")
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should set Veritras as self inside config block" do
|
9
|
-
Veritrans.config do
|
10
|
-
self.should == Veritrans.instance
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should have sandbox api_host by defualt" do
|
15
|
-
Veritrans.config.api_host.should == "https://api.sandbox.veritrans.co.id"
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should set client key and server key" do
|
19
|
-
Veritrans.config do
|
20
|
-
config.client_key = "kk-1"
|
21
|
-
config.server_key = "sk-1"
|
22
|
-
end
|
23
|
-
|
24
|
-
Veritrans.config.client_key.should == "kk-1"
|
25
|
-
Veritrans.config.server_key.should == "sk-1"
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should load config" do
|
29
|
-
data = Veritrans.config.load_config("./spec/configs/veritrans_flat.yml")
|
30
|
-
data.should == {"client_key" => "flat_client_key", "server_key" => "flat_server_key"}
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should load config according to hash" do
|
34
|
-
data = Veritrans.config.load_config("./spec/configs/veritrans.yml#development")
|
35
|
-
data.should == {"client_key" => "spec_client_key", "server_key" => "spec_server_key"}
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should load config for Rails.env" do
|
39
|
-
stub_const("Rails", Class.new {
|
40
|
-
def self.env
|
41
|
-
"test"
|
42
|
-
end
|
43
|
-
})
|
44
|
-
|
45
|
-
data = Veritrans.config.load_config("./spec/configs/veritrans.yml")
|
46
|
-
data.should == {"client_key" => "test_client_key", "server_key" => "test_server_key"}
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should load config and render erb lines" do
|
50
|
-
stub_const('ENV', {
|
51
|
-
'CLIENT_KEY' => 'test_client_key',
|
52
|
-
'SERVER_KEY' => 'test_server_key'
|
53
|
-
})
|
54
|
-
|
55
|
-
data = Veritrans.config.load_config("./spec/configs/veritrans_with_erb.yml")
|
56
|
-
data.should == {"client_key" => "test_client_key", "server_key" => "test_server_key"}
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should validate http_params type" do
|
60
|
-
expect {
|
61
|
-
Veritrans.config.http_options = nil
|
62
|
-
}.to raise_error(ArgumentError, "http_options should be a hash")
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should validate http_params type" do
|
66
|
-
expect {
|
67
|
-
Veritrans.config.http_options = {foo: "bar", tcp_nodelay: true}
|
68
|
-
}.to raise_error(ArgumentError, /http_options contain unsupported keys: \[:foo\]/)
|
69
|
-
end
|
70
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
describe Veritrans do
|
2
|
-
include ActiveSupport::Testing::Stream
|
3
|
-
|
4
|
-
before do
|
5
|
-
stub_const("CONFIG", {})
|
6
|
-
Veritrans.logger = Logger.new(STDOUT)
|
7
|
-
Veritrans.file_logger = Logger.new(STDOUT)
|
8
|
-
Veritrans.setup do
|
9
|
-
config.load_yml "./example/veritrans.yml#development"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
after do
|
14
|
-
if Veritrans.events.listeners
|
15
|
-
Veritrans.events.listeners.clear
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
JSON_RESPONSE = '{
|
20
|
-
"status_code": "200",
|
21
|
-
"status_message": "Success, transaction found",
|
22
|
-
"transaction_id": "b1cbcc66-5608-4af1-a3ed-0f152f9ed871",
|
23
|
-
"order_id": "testing-0.2703-1415600236",
|
24
|
-
"payment_type": "credit_card",
|
25
|
-
"transaction_time": "2014-11-10 13:17:33",
|
26
|
-
"transaction_status": "settlement",
|
27
|
-
"gross_amount": "30000.00",
|
28
|
-
"masked_card": "481111-1114",
|
29
|
-
"fraud_status": "accept",
|
30
|
-
"approval_code": "1415600254322",
|
31
|
-
"bank": "bni"
|
32
|
-
}'
|
33
|
-
|
34
|
-
DOUBLE_ENCODED_JSON_RESPONSE = JSON.dump(JSON_RESPONSE)
|
35
|
-
|
36
|
-
def stub_vt_status_response
|
37
|
-
stub_request(:any, /.*veritrans.*/).to_return(lambda {|request|
|
38
|
-
{status: 200, body: JSON_RESPONSE}
|
39
|
-
})
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should work with single encoded json" do
|
43
|
-
Veritrans.events.subscribe('payment.success') do |payment|
|
44
|
-
@payment = payment
|
45
|
-
end
|
46
|
-
|
47
|
-
stub_vt_status_response
|
48
|
-
|
49
|
-
handler = Rack::MockRequest.new(Veritrans::Events.new)
|
50
|
-
silence_stream(STDOUT) do
|
51
|
-
handler.post("http://example.com/", input: JSON_RESPONSE)
|
52
|
-
end
|
53
|
-
|
54
|
-
@payment.order_id.should == "testing-0.2703-1415600236"
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should work with double encoded json" do
|
58
|
-
Veritrans.events.subscribe('payment.success') do |payment|
|
59
|
-
@payment = payment
|
60
|
-
end
|
61
|
-
|
62
|
-
stub_vt_status_response
|
63
|
-
|
64
|
-
handler = Rack::MockRequest.new(Veritrans::Events.new)
|
65
|
-
silence_stream(STDOUT) do
|
66
|
-
handler.post("http://example.com/", input: DOUBLE_ENCODED_JSON_RESPONSE)
|
67
|
-
end
|
68
|
-
|
69
|
-
@payment.order_id.should == "testing-0.2703-1415600236"
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|