boletosimples 0.0.7 → 0.1.1
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 +4 -4
- data/CHANGELOG.md +1 -1
- data/README.md +156 -3
- data/boletosimples.gemspec +9 -9
- data/lib/boletosimples.rb +38 -4
- data/lib/boletosimples/configuration.rb +69 -0
- data/lib/boletosimples/extra.rb +8 -0
- data/lib/boletosimples/last_request.rb +43 -0
- data/lib/boletosimples/middlewares/last_request.rb +9 -0
- data/lib/boletosimples/middlewares/raise_error.rb +11 -0
- data/lib/boletosimples/middlewares/user_agent.rb +10 -0
- data/lib/boletosimples/resources/bank_billet.rb +13 -0
- data/lib/boletosimples/resources/base_model.rb +8 -0
- data/lib/boletosimples/resources/customer.rb +4 -0
- data/lib/boletosimples/resources/partner/user.rb +7 -0
- data/lib/boletosimples/resources/transaction.rb +4 -0
- data/lib/boletosimples/response_error.rb +43 -0
- data/lib/boletosimples/version.rb +1 -1
- data/spec/boletosimples/configuration_spec.rb +84 -0
- data/spec/boletosimples/extra_spec.rb +31 -0
- data/spec/boletosimples/last_request_spec.rb +34 -0
- data/spec/boletosimples/resources/bank_billet_spec.rb +75 -0
- data/spec/boletosimples/resources/customer_spec.rb +66 -0
- data/spec/boletosimples/resources/partner/user_spec.rb +19 -0
- data/spec/boletosimples/resources/transactions_spec.rb +17 -0
- data/spec/fixtures/vcr_cassettes/configuration/client_credentials/invalid.yml +64 -0
- data/spec/fixtures/vcr_cassettes/configuration/client_credentials/valid.yml +56 -0
- data/spec/fixtures/vcr_cassettes/extra/userinfo/authenticated.yml +58 -0
- data/spec/fixtures/vcr_cassettes/extra/userinfo/not_authenticated.yml +54 -0
- data/spec/fixtures/vcr_cassettes/last_request/bank_billets.yml +129 -0
- data/spec/fixtures/vcr_cassettes/last_request/userinfo.yml +58 -0
- data/spec/fixtures/vcr_cassettes/resources/bank_billet/all.yml +132 -0
- data/spec/fixtures/vcr_cassettes/resources/bank_billet/cancel.yml +125 -0
- data/spec/fixtures/vcr_cassettes/resources/bank_billet/create/invalid_params.yml +61 -0
- data/spec/fixtures/vcr_cassettes/{BoletoSimples_Client/_cancel_bank_billet/already_canceled.yml → resources/bank_billet/create/invalid_root.yml} +24 -24
- data/spec/fixtures/vcr_cassettes/{BoletoSimples_Client/_create_bank_billet/with_valid_data.yml → resources/bank_billet/create/valid.yml} +32 -28
- data/spec/fixtures/vcr_cassettes/{BoletoSimples_Client/_bank_billet/existing_bank_billet.yml → resources/bank_billet/find.yml} +30 -28
- data/spec/fixtures/vcr_cassettes/resources/customer/all.yml +72 -0
- data/spec/fixtures/vcr_cassettes/resources/customer/create/invalid_params.yml +59 -0
- data/spec/fixtures/vcr_cassettes/resources/customer/create/invalid_root.yml +58 -0
- data/spec/fixtures/vcr_cassettes/{BoletoSimples_Client/_create_customer/with_valid_data.yml → resources/customer/create/valid.yml} +30 -26
- data/spec/fixtures/vcr_cassettes/resources/customer/find.yml +59 -0
- data/spec/fixtures/vcr_cassettes/resources/partner/user/create.yml +60 -0
- data/spec/fixtures/vcr_cassettes/resources/transaction/all.yml +62 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/vcr.rb +8 -0
- metadata +97 -80
- data/example/access_token_example.rb +0 -79
- data/example/oauth_example.rb +0 -126
- data/lib/boletosimples/client.rb +0 -100
- data/lib/boletosimples/oauth_client.rb +0 -74
- data/spec/boletosimples/client_spec.rb +0 -415
- data/spec/boletosimples/oauth_client_spec.rb +0 -17
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_bank_billet/not_found.yml +0 -44
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_bank_billets.yml +0 -63
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_cancel_bank_billet/with_invalid_bank_billet.yml +0 -54
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_cancel_bank_billet/with_valid_bank_billet.yml +0 -71
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_create_bank_billet/with_invalid_data.yml +0 -64
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_create_customer/with_invalid_data.yml +0 -59
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_customer/existing_customer.yml +0 -57
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_customer/not_found.yml +0 -58
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_customers.yml +0 -59
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_transactions.yml +0 -67
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_userinfo/with_authentication.yml +0 -56
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_userinfo/with_authentication/.yml +0 -56
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_userinfo/without_authentication.yml +0 -54
- data/spec/fixtures/vcr_cassettes/BoletoSimples_Client/_userinfo/without_authentication/.yml +0 -54
- data/spec/fixtures/vcr_cassettes/BoletoSimples_OAuthClient/_userinfo/without_authentication/.yml +0 -62
data/lib/boletosimples/client.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
require 'multi_json'
|
3
|
-
|
4
|
-
module BoletoSimples
|
5
|
-
class Client
|
6
|
-
include HTTParty
|
7
|
-
|
8
|
-
PRODUCTION_BASE_URI = 'https://boletosimples.com.br/api/v1'
|
9
|
-
SANDBOX_BASE_URI = 'https://sandbox.boletosimples.com.br/api/v1'
|
10
|
-
|
11
|
-
def initialize(access_token, options = {})
|
12
|
-
@access_token = access_token
|
13
|
-
|
14
|
-
# defaults
|
15
|
-
@production = options.delete(:production)
|
16
|
-
@base_uri = options[:base_uri] || (@production ? PRODUCTION_BASE_URI : SANDBOX_BASE_URI)
|
17
|
-
@user_agent = options.delete(:user_agent)
|
18
|
-
|
19
|
-
options[:format] ||= :json
|
20
|
-
options.each do |k, v|
|
21
|
-
self.class.send k, v
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# Users
|
26
|
-
def userinfo(options = {})
|
27
|
-
get '/userinfo', options
|
28
|
-
end
|
29
|
-
|
30
|
-
# Transactions
|
31
|
-
def transactions(page = 1, options = {})
|
32
|
-
get '/transactions', { page: page }.merge(options)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Customers
|
36
|
-
def customers(page = 1, options = {})
|
37
|
-
get '/customers', { page: page }.merge(options)
|
38
|
-
end
|
39
|
-
|
40
|
-
def create_customer(options = {})
|
41
|
-
post '/customers', customer: options
|
42
|
-
end
|
43
|
-
|
44
|
-
def customer(id = 1, options = {})
|
45
|
-
get "/customers/#{id}", options
|
46
|
-
end
|
47
|
-
|
48
|
-
# Bank Billets
|
49
|
-
def bank_billets(page = 1, options = {})
|
50
|
-
get '/bank_billets', { page: page }.merge(options)
|
51
|
-
end
|
52
|
-
|
53
|
-
def create_bank_billet(options = {})
|
54
|
-
post '/bank_billets', bank_billet: options
|
55
|
-
end
|
56
|
-
|
57
|
-
def bank_billet(id, options = {})
|
58
|
-
get "/bank_billets/#{id}", options
|
59
|
-
end
|
60
|
-
|
61
|
-
def cancel_bank_billet(id, options = {})
|
62
|
-
put "/bank_billets/#{id}/cancel", options
|
63
|
-
end
|
64
|
-
|
65
|
-
# Wrappers for the main HTTP verbs
|
66
|
-
def get(path, options = {})
|
67
|
-
http_verb :get, path, options
|
68
|
-
end
|
69
|
-
|
70
|
-
def post(path, options = {})
|
71
|
-
http_verb :post, path, options
|
72
|
-
end
|
73
|
-
|
74
|
-
def put(path, options = {})
|
75
|
-
http_verb :put, path, options
|
76
|
-
end
|
77
|
-
|
78
|
-
def patch(path, options = {})
|
79
|
-
http_verb :patch, path, options
|
80
|
-
end
|
81
|
-
|
82
|
-
def delete(path, options = {})
|
83
|
-
http_verb :delete, path, options
|
84
|
-
end
|
85
|
-
|
86
|
-
def http_verb(verb, path, options = {})
|
87
|
-
request_options = { body: options.to_json }
|
88
|
-
request_options[:headers] = {
|
89
|
-
'Content-Type' => 'application/json',
|
90
|
-
'User-Agent' => @user_agent
|
91
|
-
}
|
92
|
-
request_options[:query] ||= {}
|
93
|
-
request_options[:query].merge!(access_token: @access_token)
|
94
|
-
|
95
|
-
uri = "#{@base_uri}#{path}"
|
96
|
-
response = self.class.send(verb, uri, request_options)
|
97
|
-
JSON.parse(response.body)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'oauth2'
|
2
|
-
|
3
|
-
module BoletoSimples
|
4
|
-
class OAuthClient < Client
|
5
|
-
# Initializes a BoletoSimples Client using OAuth 2.0 credentials
|
6
|
-
#
|
7
|
-
# @param [String] client_id this application's BoletoSimples OAuth2 CLIENT_ID
|
8
|
-
# @param [String] client_secret this application's BoletoSimples OAuth2 CLIENT_SECRET
|
9
|
-
# @param [Hash] user_credentials OAuth 2.0 credentials to use
|
10
|
-
# @option user_credentials [String] access_token Must pass either this or token
|
11
|
-
# @option user_credentials [String] token Must pass either this or access_token
|
12
|
-
# @option user_credentials [String] refresh_token Optional
|
13
|
-
# @option user_credentials [Integer] expires_at Optional
|
14
|
-
# @option user_credentials [Integer] expires_in Optional
|
15
|
-
#
|
16
|
-
# Please note access tokens will be automatically refreshed when expired
|
17
|
-
# Use the credentials method when finished with the client to retrieve up-to-date credentials
|
18
|
-
def initialize(client_id, client_secret, user_credentials, options = {})
|
19
|
-
@production = options.delete(:production)
|
20
|
-
@base_uri = options[:base_uri] || (@production ? PRODUCTION_BASE_URI : SANDBOX_BASE_URI)
|
21
|
-
client_opts = {
|
22
|
-
site: @base_uri,
|
23
|
-
authorize_url: options[:authorize_url] || "#{@base_uri}/oauth/authorize",
|
24
|
-
token_url: options[:token_url] || "#{@base_uri}/oauth/token",
|
25
|
-
raise_errors: false
|
26
|
-
}
|
27
|
-
@user_agent = options.delete(:user_agent)
|
28
|
-
@oauth_client = OAuth2::Client.new(client_id, client_secret, client_opts)
|
29
|
-
token_hash = user_credentials.dup
|
30
|
-
token_hash[:access_token] ||= token_hash[:token]
|
31
|
-
token_hash.delete :expires
|
32
|
-
fail 'No access token provided' unless token_hash[:access_token]
|
33
|
-
@oauth_token = OAuth2::AccessToken.from_hash(@oauth_client, token_hash)
|
34
|
-
end
|
35
|
-
|
36
|
-
# Users
|
37
|
-
def partner_create_user(options = {})
|
38
|
-
post '/partner/users', options
|
39
|
-
end
|
40
|
-
|
41
|
-
def http_verb(verb, path, options = {})
|
42
|
-
path = remove_leading_slash(path)
|
43
|
-
request_options = { headers: {
|
44
|
-
'Accept-Charset' => 'UTF-8',
|
45
|
-
'Content-Type' => 'application/json',
|
46
|
-
'User-Agent' => @user_agent
|
47
|
-
}, body: options.to_json }
|
48
|
-
|
49
|
-
response = oauth_token.request(verb, path, request_options)
|
50
|
-
JSON.parse(response.body)
|
51
|
-
end
|
52
|
-
|
53
|
-
def refresh!
|
54
|
-
fail 'Access token not initialized.' unless @oauth_token
|
55
|
-
@oauth_token = @oauth_token.refresh!
|
56
|
-
end
|
57
|
-
|
58
|
-
def oauth_token
|
59
|
-
fail 'Access token not initialized.' unless @oauth_token
|
60
|
-
refresh! if @oauth_token.expired?
|
61
|
-
@oauth_token
|
62
|
-
end
|
63
|
-
|
64
|
-
def credentials
|
65
|
-
@oauth_token.to_hash
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
def remove_leading_slash(path)
|
71
|
-
path.sub(/^\//, '')
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,415 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe BoletoSimples::Client do
|
6
|
-
subject(:client) do
|
7
|
-
BoletoSimples::Client.new(access_token, user_agent: 'Meu e-Commerce (meuecommerce@example.com)')
|
8
|
-
end
|
9
|
-
|
10
|
-
let(:access_token) { '9e616874dbf0674ace28170a748c9258ac1f0f87e0a544441ebffe976645bc09' }
|
11
|
-
|
12
|
-
describe '#userinfo' do
|
13
|
-
context 'without authentication', :vcr do
|
14
|
-
let(:access_token) { nil }
|
15
|
-
|
16
|
-
it { expect(client.userinfo).to eq('error' => 'Você precisa se logar ou registrar antes de prosseguir.') }
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'with authentication', vcr: { cassette_name: 'BoletoSimples_Client/_userinfo/with_authentication'} do
|
20
|
-
let(:json_keys) do
|
21
|
-
["account_level", "account_type",
|
22
|
-
"address_city_name", "address_complement",
|
23
|
-
"address_neighborhood", "address_number",
|
24
|
-
"address_postal_code", "address_state",
|
25
|
-
"address_street_name", "business_cnpj",
|
26
|
-
"business_legal_name", "business_name",
|
27
|
-
"cpf", "date_of_birth", "email", "father_name",
|
28
|
-
"first_name", "full_name", "id", "last_name",
|
29
|
-
"login_url", "middle_name", "mother_name" , "phone_number"
|
30
|
-
]
|
31
|
-
end
|
32
|
-
|
33
|
-
it { expect(client.userinfo['email']).to eq('marciojunior1991@gmail.com') }
|
34
|
-
it { expect(client.userinfo['account_level']).to eq(2) }
|
35
|
-
it { expect(client.userinfo.keys).to match_array(json_keys) }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe '#create_customer' do
|
40
|
-
|
41
|
-
context 'with valid data', vcr: { cassette_name: 'BoletoSimples_Client/_create_customer/with_valid_data' } do
|
42
|
-
let(:payload) do
|
43
|
-
{
|
44
|
-
"id" => 32,
|
45
|
-
"mobile_local_code" => nil,
|
46
|
-
"mobile_number" => nil,
|
47
|
-
"person_type" => "individual",
|
48
|
-
"person_name" => "Joao da Silva",
|
49
|
-
"cnpj_cpf"=> "012.345.678-90",
|
50
|
-
"email" => "cliente@bom.com",
|
51
|
-
"address" => "Rua quinhentos",
|
52
|
-
"city_name" => "Rio de Janeiro",
|
53
|
-
"state" => "RJ",
|
54
|
-
"neighborhood" => "bairro",
|
55
|
-
"zipcode" => "12312-123",
|
56
|
-
"address_number" => "111",
|
57
|
-
"address_complement" => "Sala 4",
|
58
|
-
"phone_number" => "2112123434"
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
def create_customer
|
63
|
-
client.create_customer({
|
64
|
-
"person_name" => "Joao da Silva",
|
65
|
-
"cnpj_cpf"=> "012.345.678-90",
|
66
|
-
"email" => "cliente@bom.com",
|
67
|
-
"address" => "Rua quinhentos",
|
68
|
-
"city_name" => "Rio de Janeiro",
|
69
|
-
"state" => "RJ",
|
70
|
-
"neighborhood" => "bairro",
|
71
|
-
"zipcode" => "12312-123",
|
72
|
-
"address_number" => "111",
|
73
|
-
"address_complement" => "Sala 4",
|
74
|
-
"phone_number" => "2112123434"
|
75
|
-
})
|
76
|
-
end
|
77
|
-
|
78
|
-
it { expect(create_customer).to eq(payload) }
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with invalid data', vcr: { cassette_name: 'BoletoSimples_Client/_create_customer/with_invalid_data' } do
|
82
|
-
let(:payload) do
|
83
|
-
{
|
84
|
-
"errors" => {
|
85
|
-
"cnpj_cpf" => ["não pode ficar em branco"],
|
86
|
-
"phone_number" => ["é muito curto (mínimo: 10 caracteres)"]
|
87
|
-
}
|
88
|
-
}
|
89
|
-
end
|
90
|
-
|
91
|
-
def create_customer
|
92
|
-
client.create_customer({
|
93
|
-
"person_name" => "Joao da Silva",
|
94
|
-
"cnpj_cpf"=> "foo",
|
95
|
-
"email" => "cliente@bom.com",
|
96
|
-
"address" => "Rua quinhentos",
|
97
|
-
"city_name" => "Rio de Janeiro",
|
98
|
-
"state" => "RJ",
|
99
|
-
"neighborhood" => "bairro",
|
100
|
-
"zipcode" => "123",
|
101
|
-
"address_number" => "111",
|
102
|
-
"address_complement" => "Sala 4",
|
103
|
-
"phone_number" => "2123434"
|
104
|
-
})
|
105
|
-
end
|
106
|
-
|
107
|
-
it { expect(create_customer).to eq(payload) }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe '#customers', vcr: { cassette_name: 'BoletoSimples_Client/_customers' } do
|
112
|
-
let(:customer) do
|
113
|
-
{"id"=>32,
|
114
|
-
"city_name" => "Rio de Janeiro",
|
115
|
-
"person_name" => "Joao da Silva",
|
116
|
-
"address" => "Rua quinhentos",
|
117
|
-
"address_complement" => "Sala 4",
|
118
|
-
"address_number" => "111",
|
119
|
-
"mobile_number" => nil,
|
120
|
-
"cnpj_cpf" => "012.345.678-90",
|
121
|
-
"email" => "cliente@bom.com",
|
122
|
-
"neighborhood" => "bairro",
|
123
|
-
"person_type" => "individual",
|
124
|
-
"phone_number" => "2112123434",
|
125
|
-
"zipcode" => "12312-123",
|
126
|
-
"mobile_local_code" => nil,
|
127
|
-
"state" => "RJ"
|
128
|
-
}
|
129
|
-
end
|
130
|
-
|
131
|
-
it { expect(client.customers).to eq([customer]) }
|
132
|
-
end
|
133
|
-
|
134
|
-
describe '#customer' do
|
135
|
-
|
136
|
-
context "not found", vcr: { cassette_name: 'BoletoSimples_Client/_customer/not_found' } do
|
137
|
-
it { expect(client.customer(42)).to eq({"status"=>404, "error"=>"Not Found"}) }
|
138
|
-
end
|
139
|
-
|
140
|
-
context "existing customer", vcr: { cassette_name: 'BoletoSimples_Client/_customer/existing_customer' } do
|
141
|
-
let(:customer) do
|
142
|
-
{
|
143
|
-
"id"=>32,
|
144
|
-
"city_name" => "Rio de Janeiro",
|
145
|
-
"person_name" => "Joao da Silva",
|
146
|
-
"address" => "Rua quinhentos",
|
147
|
-
"address_complement" => "Sala 4",
|
148
|
-
"address_number" => "111",
|
149
|
-
"mobile_number" => nil,
|
150
|
-
"cnpj_cpf" => "012.345.678-90",
|
151
|
-
"email" => "cliente@bom.com",
|
152
|
-
"neighborhood" => "bairro",
|
153
|
-
"person_type" => "individual",
|
154
|
-
"phone_number" => "2112123434",
|
155
|
-
"zipcode" => "12312-123",
|
156
|
-
"mobile_local_code" => nil,
|
157
|
-
"state" => "RJ"
|
158
|
-
}
|
159
|
-
end
|
160
|
-
|
161
|
-
it { expect(client.customer(32)).to eq(customer) }
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
describe '#create_bank_billet' do
|
166
|
-
|
167
|
-
context 'with valid data', vcr: { cassette_name: 'BoletoSimples_Client/_create_bank_billet/with_valid_data' } do
|
168
|
-
let(:payload) do
|
169
|
-
{
|
170
|
-
"amount" => 9.01,
|
171
|
-
"created_via_api" => true,
|
172
|
-
"customer_address" => "Rua quinhentos",
|
173
|
-
"customer_address_complement" => "Sala 4",
|
174
|
-
"customer_address_number" => "111",
|
175
|
-
"customer_city_name" => "Rio de Janeiro",
|
176
|
-
"customer_cnpj_cpf" => "012.345.678-90",
|
177
|
-
"customer_email" => "cliente@bom.com",
|
178
|
-
"customer_neighborhood" => "Sao Francisco",
|
179
|
-
"customer_person_name" => "Joao da Silva",
|
180
|
-
"customer_person_type" => "individual",
|
181
|
-
"customer_phone_number" => "2112123434",
|
182
|
-
"customer_state" => "RJ",
|
183
|
-
"customer_zipcode" => "12312-123",
|
184
|
-
"description" => "Despesas do contrato 0012",
|
185
|
-
"expire_at" => "2014-01-01",
|
186
|
-
"id" => 113,
|
187
|
-
"notification_url" => "http://example.com.br/notify",
|
188
|
-
"paid_amount" => 0.0,
|
189
|
-
"paid_at" => nil,
|
190
|
-
"send_email_on_creation" => nil,
|
191
|
-
"shorten_url" => nil,
|
192
|
-
"status" => "generating"
|
193
|
-
}
|
194
|
-
end
|
195
|
-
|
196
|
-
def create_bank_billet
|
197
|
-
client.create_bank_billet({
|
198
|
-
"amount" => 9.01,
|
199
|
-
"customer_address" => 'Rua quinhentos',
|
200
|
-
"customer_address_complement" => 'Sala 4',
|
201
|
-
"customer_address_number" => '111',
|
202
|
-
"customer_city_name" => 'Rio de Janeiro',
|
203
|
-
"customer_cnpj_cpf" => '012.345.678-90',
|
204
|
-
"customer_email" => 'cliente@bom.com',
|
205
|
-
"customer_neighborhood" => 'Sao Francisco',
|
206
|
-
"customer_person_name" => 'Joao da Silva',
|
207
|
-
"customer_person_type" => 'individual',
|
208
|
-
"customer_phone_number" => '2112123434',
|
209
|
-
"customer_state" => 'RJ',
|
210
|
-
"customer_zipcode" => '12312-123',
|
211
|
-
"description" => 'Despesas do contrato 0012',
|
212
|
-
"expire_at" => '2014-01-01',
|
213
|
-
"notification_url" => 'http://example.com.br/notify'
|
214
|
-
})
|
215
|
-
end
|
216
|
-
|
217
|
-
it { expect(create_bank_billet).to eq(payload) }
|
218
|
-
end
|
219
|
-
|
220
|
-
context 'with invalid data', vcr: { cassette_name: 'BoletoSimples_Client/_create_bank_billet/with_invalid_data' } do
|
221
|
-
let(:payload) do
|
222
|
-
{
|
223
|
-
"errors"=> {
|
224
|
-
"customer_cnpj_cpf" => ["não pode ficar em branco"],
|
225
|
-
"customer_email" => ["não é válido"],
|
226
|
-
"customer" => [
|
227
|
-
{
|
228
|
-
"cnpj_cpf" => ["não pode ficar em branco"],
|
229
|
-
"phone_number" => ["é muito curto (mínimo: 10 caracteres)"],
|
230
|
-
"email" => ["não é válido"]
|
231
|
-
}
|
232
|
-
],
|
233
|
-
"amount"=>["deve ser menor ou igual a 10"]
|
234
|
-
}
|
235
|
-
}
|
236
|
-
end
|
237
|
-
|
238
|
-
def create_bank_billet
|
239
|
-
client.create_bank_billet({
|
240
|
-
"amount" => 19.01,
|
241
|
-
"customer_address" => 'Rua quinhentos',
|
242
|
-
"customer_address_complement" => 'Sala 4',
|
243
|
-
"customer_address_number" => '111',
|
244
|
-
"customer_city_name" => 'Rio de Janeiro',
|
245
|
-
"customer_cnpj_cpf" => '34567890',
|
246
|
-
"customer_email" => 'cliente',
|
247
|
-
"customer_neighborhood" => 'Sao Francisco',
|
248
|
-
"customer_person_name" => 'Joao da Silva',
|
249
|
-
"customer_person_type" => 'individual',
|
250
|
-
"customer_phone_number" => '123434',
|
251
|
-
"customer_state" => 'RJ',
|
252
|
-
"customer_zipcode" => '12312',
|
253
|
-
"description" => 'Despesas do contrato 0012',
|
254
|
-
"expire_at" => '2014-01-01',
|
255
|
-
"notification_url" => 'http://example.com.br/notify'
|
256
|
-
})
|
257
|
-
end
|
258
|
-
|
259
|
-
it { expect(create_bank_billet).to eq(payload) }
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
describe '#bank_billets', vcr: { cassette_name: 'BoletoSimples_Client/_bank_billets' } do
|
264
|
-
let(:bank_billet) do
|
265
|
-
{
|
266
|
-
"id"=>113,
|
267
|
-
"expire_at"=>"2014-01-01",
|
268
|
-
"paid_at"=>nil,
|
269
|
-
"description"=>"Despesas do contrato 0012",
|
270
|
-
"status"=>"opened",
|
271
|
-
"shorten_url"=>"http://staging.bole.to/nhhvauui",
|
272
|
-
"customer_person_type"=>"individual",
|
273
|
-
"customer_person_name"=>"Joao da Silva",
|
274
|
-
"customer_cnpj_cpf"=>"012.345.678-90",
|
275
|
-
"customer_address"=>"Rua quinhentos",
|
276
|
-
"customer_state"=>"RJ",
|
277
|
-
"customer_neighborhood"=>"Sao Francisco",
|
278
|
-
"customer_zipcode"=>"12312-123",
|
279
|
-
"customer_address_number"=>"111",
|
280
|
-
"customer_address_complement"=>"Sala 4",
|
281
|
-
"customer_phone_number"=>"2112123434",
|
282
|
-
"customer_email"=>"cliente@bom.com",
|
283
|
-
"notification_url"=>"http://example.com.br/notify",
|
284
|
-
"send_email_on_creation"=>nil,
|
285
|
-
"created_via_api"=>true,
|
286
|
-
"customer_city_name"=>"Rio de Janeiro",
|
287
|
-
"paid_amount"=>0.0,
|
288
|
-
"amount"=>9.01
|
289
|
-
}
|
290
|
-
end
|
291
|
-
|
292
|
-
it { expect(client.bank_billets).to eq([bank_billet]) }
|
293
|
-
end
|
294
|
-
|
295
|
-
describe '#bank_billet' do
|
296
|
-
context 'not found', vcr: { cassette_name: 'BoletoSimples_Client/_bank_billet/not_found' } do
|
297
|
-
it { expect(client.bank_billet(4324)).to eq({ "status"=>"404", "error"=>"Not Found" }) }
|
298
|
-
end
|
299
|
-
|
300
|
-
context 'existing bank billet', vcr: { cassette_name: 'BoletoSimples_Client/_bank_billet/existing_bank_billet' } do
|
301
|
-
let(:bank_billet) do
|
302
|
-
{
|
303
|
-
"id"=>113,
|
304
|
-
"expire_at"=>"2014-01-01",
|
305
|
-
"paid_at"=>nil,
|
306
|
-
"description"=>"Despesas do contrato 0012",
|
307
|
-
"status"=>"opened",
|
308
|
-
"shorten_url"=>"http://staging.bole.to/nhhvauui",
|
309
|
-
"customer_person_type"=>"individual",
|
310
|
-
"customer_person_name"=>"Joao da Silva",
|
311
|
-
"customer_cnpj_cpf"=>"012.345.678-90",
|
312
|
-
"customer_address"=>"Rua quinhentos",
|
313
|
-
"customer_state"=>"RJ",
|
314
|
-
"customer_neighborhood"=>"Sao Francisco",
|
315
|
-
"customer_zipcode"=>"12312-123",
|
316
|
-
"customer_address_number"=>"111",
|
317
|
-
"customer_address_complement"=>"Sala 4",
|
318
|
-
"customer_phone_number"=>"2112123434",
|
319
|
-
"customer_email"=>"cliente@bom.com",
|
320
|
-
"notification_url"=>"http://example.com.br/notify",
|
321
|
-
"send_email_on_creation"=>nil,
|
322
|
-
"created_via_api"=>true,
|
323
|
-
"customer_city_name"=>"Rio de Janeiro",
|
324
|
-
"paid_amount"=>0.0,
|
325
|
-
"amount"=>9.01
|
326
|
-
}
|
327
|
-
end
|
328
|
-
|
329
|
-
it { expect(client.bank_billet(113)).to eq(bank_billet) }
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
|
-
describe '#cancel_bank_billet' do
|
334
|
-
context 'with valid bank billet', vcr: { cassette_name: 'BoletoSimples_Client/_cancel_bank_billet/with_valid_bank_billet' } do
|
335
|
-
let(:canceled_bank_billet) do
|
336
|
-
{
|
337
|
-
"amount" => 10.0,
|
338
|
-
"created_via_api" => false,
|
339
|
-
"customer_address" => "Rua José Scheuer",
|
340
|
-
"customer_address_complement" => "",
|
341
|
-
"customer_address_number" => "12",
|
342
|
-
"customer_city_name" => "Jaraguá do Sul",
|
343
|
-
"customer_cnpj_cpf" => "33.368.751/0001-14",
|
344
|
-
"customer_email" => "foo@bar.com",
|
345
|
-
"customer_neighborhood" => "Amizade",
|
346
|
-
"customer_person_name" => "marcio junior",
|
347
|
-
"customer_person_type" => "juridical",
|
348
|
-
"customer_phone_number" => "",
|
349
|
-
"customer_state" => "SC",
|
350
|
-
"customer_zipcode" => "89255-800",
|
351
|
-
"description" => "foo",
|
352
|
-
"expire_at" => "2014-10-19",
|
353
|
-
"id" => 245,
|
354
|
-
"notification_url" => nil,
|
355
|
-
"paid_amount" => 0.0,
|
356
|
-
"paid_at" => nil,
|
357
|
-
"send_email_on_creation" => nil,
|
358
|
-
"shorten_url" => "http://staging.bole.to/ni8jav1w",
|
359
|
-
"status" => "canceled"
|
360
|
-
}
|
361
|
-
end
|
362
|
-
|
363
|
-
it{ expect(client.cancel_bank_billet(245)).to eq(canceled_bank_billet) }
|
364
|
-
end
|
365
|
-
|
366
|
-
context 'with invalid bank billet', vcr: { cassette_name: 'BoletoSimples_Client/_cancel_bank_billet/with_invalid_bank_billet' } do
|
367
|
-
let(:error) do
|
368
|
-
{"errors"=>{"status"=>["cannot transition via cancel"]}}
|
369
|
-
end
|
370
|
-
|
371
|
-
it{ expect(client.cancel_bank_billet(113)).to eq(error) }
|
372
|
-
end
|
373
|
-
|
374
|
-
context 'already canceled', vcr: { cassette_name: 'BoletoSimples_Client/_cancel_bank_billet/already_canceled' } do
|
375
|
-
let(:error) do
|
376
|
-
{"errors"=>{"status"=>["cannot transition via cancel"]}}
|
377
|
-
end
|
378
|
-
|
379
|
-
it{ expect(client.cancel_bank_billet(245)).to eq(error) }
|
380
|
-
end
|
381
|
-
|
382
|
-
end
|
383
|
-
|
384
|
-
describe '#transactions', vcr: { cassette_name: 'BoletoSimples_Client/_transactions' } do
|
385
|
-
let(:credit_tx) do
|
386
|
-
{
|
387
|
-
"id"=>15,
|
388
|
-
"amount"=>9.01,
|
389
|
-
"created_at"=>"2014-11-03",
|
390
|
-
"description"=>"Boleto Bancário 113",
|
391
|
-
"kind"=>"credit",
|
392
|
-
"processed_at"=>nil,
|
393
|
-
"sent_at"=>nil,
|
394
|
-
"status"=>"unprocessed",
|
395
|
-
"credit_at"=>"2014-11-06"
|
396
|
-
}
|
397
|
-
end
|
398
|
-
|
399
|
-
let(:fee_tx) do
|
400
|
-
{
|
401
|
-
"id"=>16,
|
402
|
-
"amount"=>-5.0,
|
403
|
-
"created_at"=>"2014-11-03",
|
404
|
-
"description"=>"Boleto Bancário 113",
|
405
|
-
"kind"=>"fee",
|
406
|
-
"processed_at"=>nil,
|
407
|
-
"sent_at"=>nil,
|
408
|
-
"status"=>"unprocessed",
|
409
|
-
"credit_at"=>"2014-11-06"
|
410
|
-
}
|
411
|
-
end
|
412
|
-
|
413
|
-
it { expect(client.transactions).to match_array([fee_tx, credit_tx]) }
|
414
|
-
end
|
415
|
-
end
|