bvr 0.0.1 → 0.1.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.
- data/CHANGELOG.md +8 -0
- data/Guardfile +1 -1
- data/README.md +18 -2
- data/bvr.gemspec +6 -6
- data/lib/bvr.rb +2 -1
- data/lib/bvr/call.rb +21 -11
- data/lib/bvr/call_collection.rb +62 -0
- data/lib/bvr/connection.rb +4 -3
- data/lib/bvr/credit.rb +47 -0
- data/lib/bvr/customer.rb +149 -0
- data/lib/bvr/phone.rb +1 -10
- data/lib/bvr/phone_collection.rb +59 -0
- data/lib/bvr/version.rb +1 -1
- data/spec/fixtures/changepassword.xml +7 -0
- data/spec/fixtures/changeuserinfo.xml +9 -0
- data/spec/fixtures/createcustomer_response.xml +7 -0
- data/spec/fixtures/customerblocked.xml +9 -0
- data/spec/fixtures/getuserinfo.xml +11 -0
- data/spec/fixtures/settransaction.xml +8 -0
- data/spec/fixtures/settransaction_failed.xml +6 -0
- data/spec/fixtures/validateuser.xml +6 -0
- data/spec/helpers/faraday_stub.rb +10 -0
- data/spec/lib/bvr/call_collection_spec.rb +120 -0
- data/spec/lib/bvr/call_spec.rb +60 -0
- data/spec/lib/bvr/connection_spec.rb +5 -18
- data/spec/lib/bvr/credit_spec.rb +166 -0
- data/spec/lib/bvr/customer_spec.rb +335 -0
- data/spec/lib/bvr/phone_collection_spec.rb +95 -0
- data/spec/lib/bvr_spec.rb +20 -0
- metadata +54 -24
- data/lib/bvr/call_overview.rb +0 -46
- data/spec/lib/bvr/call_overview_spec.rb +0 -94
@@ -0,0 +1,335 @@
|
|
1
|
+
require_relative "../../spec_helper"
|
2
|
+
require_relative "../../helpers/faraday_stub"
|
3
|
+
|
4
|
+
describe Bvr::Customer do
|
5
|
+
|
6
|
+
describe '.authenticate(id, password)' do
|
7
|
+
include FaradayStub
|
8
|
+
|
9
|
+
let(:customer_id) { 'foo' }
|
10
|
+
let(:password) { 'bar' }
|
11
|
+
let(:options) do
|
12
|
+
{
|
13
|
+
command: Bvr::Customer::API_COMMANDS[:authenticate],
|
14
|
+
customer: customer_id,
|
15
|
+
customerpassword: password
|
16
|
+
}
|
17
|
+
end
|
18
|
+
let(:response) do
|
19
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/validateuser.xml'))
|
20
|
+
end
|
21
|
+
|
22
|
+
subject{ Bvr::Customer.authenticate(customer_id, password) }
|
23
|
+
|
24
|
+
before do
|
25
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns a boolean' do
|
29
|
+
subject.must_equal true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.block(id, block=true)' do
|
34
|
+
include FaradayStub
|
35
|
+
|
36
|
+
let(:customer_id) { 'foo' }
|
37
|
+
let(:block) { true }
|
38
|
+
let(:options) do
|
39
|
+
{
|
40
|
+
command: Bvr::Customer::API_COMMANDS[:changeuserinfo],
|
41
|
+
customer: customer_id,
|
42
|
+
customerblocked: block
|
43
|
+
}
|
44
|
+
end
|
45
|
+
let(:response) do
|
46
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/customerblocked.xml'))
|
47
|
+
end
|
48
|
+
|
49
|
+
subject{ Bvr::Customer.block(customer_id, block) }
|
50
|
+
|
51
|
+
before do
|
52
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'return a response' do
|
56
|
+
subject['Result'][0].must_be_instance_of String
|
57
|
+
subject['Customer'].must_equal "#{customer_id}*provider"
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'when block is not a boolean' do
|
61
|
+
let(:block) { 'foo' }
|
62
|
+
|
63
|
+
subject{ Bvr::Customer.block(customer_id, block) }
|
64
|
+
|
65
|
+
it 'raise an ArgumentError' do
|
66
|
+
proc { subject }.must_raise ArgumentError
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '.change_password(id, old_pass, new_pass)' do
|
72
|
+
include FaradayStub
|
73
|
+
|
74
|
+
let(:customer_id) { 'foo' }
|
75
|
+
let(:old_password) { 'bar' }
|
76
|
+
let(:new_password) { 'barbar' }
|
77
|
+
let(:options) do
|
78
|
+
{
|
79
|
+
command: Bvr::Customer::API_COMMANDS[:changepassword],
|
80
|
+
customer: customer_id,
|
81
|
+
oldcustomerpassword: old_password,
|
82
|
+
newcustomerpassword: new_password
|
83
|
+
}
|
84
|
+
end
|
85
|
+
let(:response) do
|
86
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/changepassword.xml'))
|
87
|
+
end
|
88
|
+
|
89
|
+
before do
|
90
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
91
|
+
end
|
92
|
+
|
93
|
+
subject { Bvr::Customer.change_password(customer_id, old_password, new_password) }
|
94
|
+
|
95
|
+
it 'return response' do
|
96
|
+
subject['Result'].must_be_instance_of String
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '.create(options)' do
|
101
|
+
include FaradayStub
|
102
|
+
|
103
|
+
let(:options) { { customer: 'foo', customerpassword: 'bar' } }
|
104
|
+
let(:response) do
|
105
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/createcustomer_response.xml'))
|
106
|
+
end
|
107
|
+
|
108
|
+
subject{ Bvr::Customer.create(options) }
|
109
|
+
|
110
|
+
before do
|
111
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'returns the response' do
|
115
|
+
subject['Result'].must_be_instance_of String
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'when options are invalid' do
|
119
|
+
let(:options) { { foo: 'bar' } }
|
120
|
+
|
121
|
+
it 'raise an ArgumentError' do
|
122
|
+
proc { subject }.must_raise ArgumentError
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe '.find(id)' do
|
128
|
+
include FaradayStub
|
129
|
+
|
130
|
+
let(:connection) { Minitest::Mock.new }
|
131
|
+
let(:id) { 'foo' }
|
132
|
+
let(:params) { { command: Bvr::Customer::API_COMMANDS[:find], customer: id } }
|
133
|
+
|
134
|
+
subject { Bvr::Customer.find(id) }
|
135
|
+
|
136
|
+
it 'calls the api with the right params' do
|
137
|
+
Bvr.connection = connection
|
138
|
+
Bvr::Customer.stub(:new_from_response, nil) do
|
139
|
+
connection.expect :get, {}, [params]
|
140
|
+
subject
|
141
|
+
connection.verify
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe 'when there is a response' do
|
146
|
+
let(:response) do
|
147
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/getuserinfo.xml'))
|
148
|
+
end
|
149
|
+
|
150
|
+
before do
|
151
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(params)) { [200, {}, response] }
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'creates a new Bvr::Customer from the response' do
|
155
|
+
subject.must_be_instance_of Bvr::Customer
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe '.new_from_response(h)' do
|
161
|
+
let(:h) do
|
162
|
+
::XmlSimple.xml_in File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/getuserinfo.xml')), {ForceArray: false}
|
163
|
+
end
|
164
|
+
|
165
|
+
subject { Bvr::Customer.new_from_response(h) }
|
166
|
+
|
167
|
+
it 'returns a new Bvr::Customer with the right params' do
|
168
|
+
subject.must_be_instance_of Bvr::Customer
|
169
|
+
subject.id.must_equal 'foo*provider'
|
170
|
+
subject.email.must_equal 'JohnDoe@gmail.com'
|
171
|
+
subject.raw_blocked.must_equal 'False'
|
172
|
+
|
173
|
+
subject.credit.must_be_instance_of Bvr::Credit
|
174
|
+
subject.credit.raw_balance.must_equal '1.86'
|
175
|
+
subject.credit.raw_specific_balance.must_equal '1.86828'
|
176
|
+
|
177
|
+
subject.phones.must_be_instance_of Bvr::PhoneCollection
|
178
|
+
subject.phones.must_include Bvr::Phone.new('+4412345678')
|
179
|
+
subject.phones.must_include Bvr::Phone.new('+4412345679')
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe '#blocked?' do
|
184
|
+
subject { customer.blocked? }
|
185
|
+
|
186
|
+
describe 'when raw_blocked is false' do
|
187
|
+
let(:customer) { Bvr::Customer.new('foo').tap{ |c| c.raw_blocked = 'False' } }
|
188
|
+
it 'returns true' do
|
189
|
+
subject.must_equal false
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
describe 'when raw_blocked is true' do
|
194
|
+
let(:customer) { Bvr::Customer.new('foo').tap{ |c| c.raw_blocked = 'True' } }
|
195
|
+
it 'returns true' do
|
196
|
+
subject.must_equal true
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe '#block!' do
|
202
|
+
include FaradayStub
|
203
|
+
|
204
|
+
let(:customer_id) { 'foo' }
|
205
|
+
let(:raw_blocked) { 'bar' }
|
206
|
+
let(:customer) { Bvr::Customer.new(customer_id).tap{ |c| c.raw_blocked = raw_blocked } }
|
207
|
+
let(:block) { true }
|
208
|
+
let(:options) do
|
209
|
+
{
|
210
|
+
command: Bvr::Customer::API_COMMANDS[:changeuserinfo],
|
211
|
+
customer: customer_id,
|
212
|
+
customerblocked: block
|
213
|
+
}
|
214
|
+
end
|
215
|
+
let(:response) do
|
216
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/customerblocked.xml'))
|
217
|
+
end
|
218
|
+
|
219
|
+
before do
|
220
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
221
|
+
end
|
222
|
+
|
223
|
+
subject { customer.block! }
|
224
|
+
|
225
|
+
it 'updates the attribute of the customer' do
|
226
|
+
customer.raw_blocked.must_equal raw_blocked
|
227
|
+
subject
|
228
|
+
customer.raw_blocked.must_equal Bvr::Customer::BLOCKED_VALUES[true]
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
describe '#change_password(new_password)' do
|
233
|
+
include FaradayStub
|
234
|
+
|
235
|
+
let(:customer_id) { 'foo' }
|
236
|
+
let(:old_password) { 'bar' }
|
237
|
+
let(:new_password) { 'barbar' }
|
238
|
+
let(:customer) { Bvr::Customer.new(customer_id).tap{ |c| c.password = old_password } }
|
239
|
+
let(:options) do
|
240
|
+
{
|
241
|
+
command: Bvr::Customer::API_COMMANDS[:changepassword],
|
242
|
+
customer: customer_id,
|
243
|
+
oldcustomerpassword: old_password,
|
244
|
+
newcustomerpassword: new_password
|
245
|
+
}
|
246
|
+
end
|
247
|
+
let(:response) do
|
248
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/changepassword.xml'))
|
249
|
+
end
|
250
|
+
|
251
|
+
before do
|
252
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
253
|
+
end
|
254
|
+
|
255
|
+
subject { customer.change_password(new_password) }
|
256
|
+
|
257
|
+
it 'changes the password of the user' do
|
258
|
+
customer.password.must_equal old_password
|
259
|
+
subject
|
260
|
+
customer.password.must_equal new_password
|
261
|
+
end
|
262
|
+
|
263
|
+
end
|
264
|
+
|
265
|
+
describe '#unblock!' do
|
266
|
+
include FaradayStub
|
267
|
+
|
268
|
+
let(:customer_id) { 'foo' }
|
269
|
+
let(:raw_blocked) { 'bar' }
|
270
|
+
let(:customer) { Bvr::Customer.new(customer_id).tap{ |c| c.raw_blocked = raw_blocked } }
|
271
|
+
let(:block) { false }
|
272
|
+
let(:options) do
|
273
|
+
{
|
274
|
+
command: Bvr::Customer::API_COMMANDS[:changeuserinfo],
|
275
|
+
customer: customer_id,
|
276
|
+
customerblocked: block
|
277
|
+
}
|
278
|
+
end
|
279
|
+
let(:response) do
|
280
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/customerblocked.xml'))
|
281
|
+
end
|
282
|
+
|
283
|
+
before do
|
284
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
285
|
+
end
|
286
|
+
|
287
|
+
subject { customer.unblock! }
|
288
|
+
|
289
|
+
it 'updates the attribute of the customer' do
|
290
|
+
customer.raw_blocked.must_equal raw_blocked
|
291
|
+
subject
|
292
|
+
customer.raw_blocked.must_equal Bvr::Customer::BLOCKED_VALUES[false]
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
describe '#calls(options={})' do
|
297
|
+
include FaradayStub
|
298
|
+
|
299
|
+
let(:h) do
|
300
|
+
::XmlSimple.xml_in File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/getuserinfo.xml')), {ForceArray: false}
|
301
|
+
end
|
302
|
+
let(:calls_response) do
|
303
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/calloverview.xml'))
|
304
|
+
end
|
305
|
+
let(:customer) { Bvr::Customer.new_from_response(h) }
|
306
|
+
let(:options) { {} }
|
307
|
+
let(:params) { { command: Bvr::CallCollection::API_COMMANDS[:find_by_customer_id], customer: customer.id } }
|
308
|
+
|
309
|
+
subject { customer.calls(options) }
|
310
|
+
|
311
|
+
before do
|
312
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(params)) { [200, {}, calls_response] }
|
313
|
+
end
|
314
|
+
|
315
|
+
it 'returns an instance of Bvr::CallCollection' do
|
316
|
+
subject.must_be_instance_of Bvr::CallCollection
|
317
|
+
end
|
318
|
+
|
319
|
+
describe 'when options are the same' do
|
320
|
+
let(:call_collection_id) { customer.calls(options).__id__ }
|
321
|
+
|
322
|
+
it 'returns the same object' do
|
323
|
+
subject.__id__.must_equal call_collection_id
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
describe 'wen options are not the same' do
|
328
|
+
let(:call_collection_id) { customer.calls({date: 'bar'}).__id__ }
|
329
|
+
|
330
|
+
it 'returns the same object' do
|
331
|
+
subject.__id__.wont_equal call_collection_id
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
335
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
require_relative "../../helpers/faraday_stub"
|
3
|
+
|
4
|
+
describe Bvr::PhoneCollection do
|
5
|
+
describe '.add(customer_id, phone, add="add")' do
|
6
|
+
include FaradayStub
|
7
|
+
|
8
|
+
let(:customer_id) { 'foo' }
|
9
|
+
let(:phone) { "+4412345678" }
|
10
|
+
let(:geocallcli_options) { "add" }
|
11
|
+
let(:options) do
|
12
|
+
{
|
13
|
+
command: Bvr::PhoneCollection::API_COMMANDS[:add],
|
14
|
+
customer: customer_id,
|
15
|
+
geocallcli_options: geocallcli_options,
|
16
|
+
geocallcli: phone
|
17
|
+
}
|
18
|
+
end
|
19
|
+
let(:response) do
|
20
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/customerblocked.xml'))
|
21
|
+
end
|
22
|
+
|
23
|
+
subject{ Bvr::PhoneCollection.add(customer_id, phone) }
|
24
|
+
|
25
|
+
before do
|
26
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'return result' do
|
30
|
+
subject['Result'][0].must_be_instance_of String
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#add(phone)' do
|
35
|
+
include FaradayStub
|
36
|
+
|
37
|
+
let(:customer) { Bvr::Customer.new('foo') }
|
38
|
+
let(:phone) { Bvr::Phone.new("+4412345678") }
|
39
|
+
let(:geocallcli_options) { "add" }
|
40
|
+
let(:options) do
|
41
|
+
{
|
42
|
+
command: Bvr::PhoneCollection::API_COMMANDS[:add],
|
43
|
+
customer: customer.id,
|
44
|
+
geocallcli_options: geocallcli_options,
|
45
|
+
geocallcli: phone.number
|
46
|
+
}
|
47
|
+
end
|
48
|
+
let(:response) do
|
49
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/customerblocked.xml'))
|
50
|
+
end
|
51
|
+
|
52
|
+
subject{ customer.phones.add(phone) }
|
53
|
+
|
54
|
+
before do
|
55
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'adds a phone' do
|
59
|
+
customer.phones.collection.wont_include phone
|
60
|
+
subject.must_equal true
|
61
|
+
customer.phones.collection.must_include phone
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#rm(phone)' do
|
66
|
+
include FaradayStub
|
67
|
+
|
68
|
+
let(:phone) { Bvr::Phone.new("+4412345678") }
|
69
|
+
let(:customer) { Bvr::Customer.new('foo').tap{ |c| c.phones.collection << phone } }
|
70
|
+
let(:geocallcli_options) { "delete" }
|
71
|
+
let(:options) do
|
72
|
+
{
|
73
|
+
command: Bvr::PhoneCollection::API_COMMANDS[:add],
|
74
|
+
customer: customer.id,
|
75
|
+
geocallcli_options: geocallcli_options,
|
76
|
+
geocallcli: phone.number
|
77
|
+
}
|
78
|
+
end
|
79
|
+
let(:response) do
|
80
|
+
File.read(File.join(File.dirname(__FILE__), '/..', '/..', '/fixtures/customerblocked.xml'))
|
81
|
+
end
|
82
|
+
|
83
|
+
subject{ customer.phones.rm(phone) }
|
84
|
+
|
85
|
+
before do
|
86
|
+
faraday_adapter.get(Bvr::Connection.uri_from_h(options)) { [200, {}, response] }
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'adds a phone' do
|
90
|
+
customer.phones.collection.must_include phone
|
91
|
+
subject.must_equal true
|
92
|
+
customer.phones.collection.wont_include phone
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/spec/lib/bvr_spec.rb
CHANGED
@@ -19,4 +19,24 @@ describe Bvr do
|
|
19
19
|
subject.config.password.must_equal password
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
describe '.connection' do
|
24
|
+
subject { Bvr.connection }
|
25
|
+
|
26
|
+
describe 'when @config is nil' do
|
27
|
+
before { Bvr.config = nil }
|
28
|
+
|
29
|
+
it 'raise an exception if @config is nil' do
|
30
|
+
proc { subject }.must_raise Exception
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'when @config is set' do
|
35
|
+
before { Bvr.config = 'foo' }
|
36
|
+
|
37
|
+
it 'returns a Bvr::Connection' do
|
38
|
+
subject.must_be_instance_of Bvr::Connection
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
22
42
|
end
|