pickpoint_api 0.1 → 0.2
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/.gitignore +1 -0
- data/.rspec +2 -0
- data/.travis.yml +2 -2
- data/README.md +60 -11
- data/lib/pickpoint_api.rb +18 -2
- data/lib/pickpoint_api/api_actions.rb +252 -0
- data/lib/pickpoint_api/constants.rb +2 -0
- data/lib/pickpoint_api/exceptions.rb +5 -1
- data/lib/pickpoint_api/session.rb +84 -98
- data/pickpoint_api.gemspec +3 -1
- data/spec/pickpoint_api/session_spec.rb +137 -0
- data/spec/pickpoint_api_spec.rb +48 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/dummy_data.rb +74 -28
- data/spec/support/http_mocking.rb +11 -4
- metadata +7 -4
- data/spec/pickpoint_api.rb +0 -15
- data/spec/session.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef1e97123ee49d134743d512ee9c86286ca1dafe
|
4
|
+
data.tar.gz: b4d7fe95f57f1cc33b08d6db78f68644d4d2761a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a58f2dc4bc46cfdb60baa7bd890da307cbca44625fa8c24ecab7e40a92d3f1aac9855bd1ace825cc2c821d1f0fd429013b6a63cb238941e4bcb5d2226a5be48e
|
7
|
+
data.tar.gz: 57f86a3c6d8e48d048f986c13d7581b84fb564f814fbfca79680e2088fcffb578b260fd8f5fd9acc4e7e09f145564352f1d335e6853b52886886454acadbe369
|
data/.gitignore
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
/coverage
|
data/.rspec
ADDED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,27 +1,72 @@
|
|
1
1
|
# Pickpoint API
|
2
2
|
|
3
3
|
[](https://travis-ci.org/kinderly/pickpoint_api)
|
4
|
+
[](http://badge.fury.io/rb/pickpoint_api)
|
5
|
+
[](https://coveralls.io/r/kinderly/pickpoint_api)
|
6
|
+
[](https://codeclimate.com/github/kinderly/pickpoint_api)
|
4
7
|
|
5
8
|
## Description
|
6
9
|
|
7
|
-
This gem provides a
|
10
|
+
This gem provides a Ruby wrapper over [Pickpoint](http://pickpoint.ru/) API. All API methods documented by Feb 1 2014 are implemented.
|
8
11
|
|
9
|
-
##
|
12
|
+
## Installation
|
10
13
|
|
11
|
-
|
12
|
-
require('pickpoint_api')
|
14
|
+
You can install this gem with the following command:
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
```bash
|
17
|
+
gem install pickpoint_api
|
18
|
+
```
|
16
19
|
|
17
|
-
|
20
|
+
Or, if you are using Bundler, add it to your Gemfile:
|
18
21
|
|
19
|
-
|
22
|
+
```ruby
|
23
|
+
gem pickpoint_api
|
24
|
+
```
|
20
25
|
|
21
|
-
|
26
|
+
If you desire to have the most up-do-date development version, add Git URL to the Gemfile:
|
27
|
+
```ruby
|
28
|
+
gem pickpoint_api, git: 'git@github.com:kinderly/pickpoint_api.git'
|
29
|
+
```
|
30
|
+
|
31
|
+
## Usage
|
22
32
|
|
23
|
-
|
33
|
+
```ruby
|
34
|
+
require('pickpoint_api')
|
24
35
|
|
36
|
+
PickpointApi.session('login', 'password', test: true) do |s|
|
37
|
+
result = s.create_sending(@my_sending_hash)
|
38
|
+
result = s.create_shipment(@my_shipment_hash)
|
39
|
+
result = s.make_return(invoice_id: @invoice_id)
|
40
|
+
result = s.make_return(sender_invoice_number: @order_number)
|
41
|
+
return_invoices_list = s.get_return_invoices_list(DateTime.parse('2014-01-01'), DateTime.now)
|
42
|
+
tracking_response = s.track_sending(@invoice_id)
|
43
|
+
tracking_response = s.track_sending(nil, @order_number)
|
44
|
+
info = s.sending_info(@invoice_id)
|
45
|
+
info = s.sending_info(nil, @order_number)
|
46
|
+
cost_result = s.get_delivery_cost(@delivery_hash)
|
47
|
+
courier_result = s.courier(@courier_hash)
|
48
|
+
courier_cancel_result = s.courier_cancel(@courier_order_number)
|
49
|
+
reestr_response_pdf = s.make_reestr(@invoice_id)
|
50
|
+
reestr_response_pdf = s.make_reestr([@invoice_id1, @invoice_id2])
|
51
|
+
reestr_numbers = s.make_reestr_number(@invoice_id)
|
52
|
+
reestr_numbers = s.make_reestr_number([@invoice_id1, @invoice_id2])
|
53
|
+
reestr_pdf = get_reestr(@invoice_id)
|
54
|
+
reestr_pdf = get_reestr(nil, @reestr_number)
|
55
|
+
labels_pdf = make_label(invoice_id)
|
56
|
+
labels_pdf = make_label([@invoice_id1, @invoice_id2])
|
57
|
+
zebra_labels_pdf = make_zlabel(invoice_id)
|
58
|
+
zebra_labels_pdf = make_zlabel([@invoice_id1, @invoice_id2])
|
59
|
+
cities = s.city_list
|
60
|
+
postamats = s.postamat_list
|
61
|
+
zone_info = s.get_zone(@city_name)
|
62
|
+
zone_info = s.get_zone(@city_name, @postamat_num)
|
63
|
+
result = s.get_money_return_order(@ikn, @document_number, @date_from, @date_to)
|
64
|
+
result = s.get_product_return_order(@ikn, @document_number, @date_from, @date_to)
|
65
|
+
result = s.enclose_info(@barcode)
|
66
|
+
history = s.track_sendings(invoice_id)
|
67
|
+
history = s.track_sendings([@invoice_id1, @invoice_id2])
|
68
|
+
states = s.get_states
|
69
|
+
registered_invoices = s.get_invoices_change_state(101, @date_from, @date_to)
|
25
70
|
end
|
26
71
|
```
|
27
72
|
|
@@ -32,6 +77,10 @@ require ('pickpoint_api')
|
|
32
77
|
|
33
78
|
session = PickpointApi::Session.new(test: true)
|
34
79
|
session.login('login', 'password')
|
35
|
-
|
80
|
+
cities = s.city_list
|
81
|
+
postamats = s.postamat_list
|
82
|
+
zone_info = s.get_zone(@city_name)
|
36
83
|
session.logout
|
37
84
|
```
|
85
|
+
|
86
|
+
Please refer to the official [Pickpoint](http://pickpoint.ru/) API documentation to learn about method meanings, expected request arguments, data format etc.
|
data/lib/pickpoint_api.rb
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
+
require('logger')
|
2
|
+
|
1
3
|
module PickpointApi
|
4
|
+
VERSION = "0.2"
|
5
|
+
|
6
|
+
@logger = Logger.new($stdout)
|
7
|
+
@logger.level = Logger::INFO
|
8
|
+
|
9
|
+
def self.logger=(logger)
|
10
|
+
@logger = logger
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.logger
|
14
|
+
@logger
|
15
|
+
end
|
2
16
|
|
3
17
|
def self.session login, password, hash = {}
|
4
18
|
begin
|
@@ -8,7 +22,7 @@ module PickpointApi
|
|
8
22
|
rescue => ex
|
9
23
|
raise ::PickpointApi::Exceptions::ApiError, ex.message
|
10
24
|
ensure
|
11
|
-
if !session.nil? && session.state
|
25
|
+
if !session.nil? && session.state == :started
|
12
26
|
session.logout
|
13
27
|
end
|
14
28
|
end
|
@@ -16,6 +30,8 @@ module PickpointApi
|
|
16
30
|
|
17
31
|
end
|
18
32
|
|
33
|
+
require_relative('pickpoint_api/exceptions.rb')
|
19
34
|
require_relative('pickpoint_api/constants.rb')
|
20
35
|
require_relative('pickpoint_api/session.rb')
|
21
|
-
|
36
|
+
|
37
|
+
|
@@ -0,0 +1,252 @@
|
|
1
|
+
require('net/http')
|
2
|
+
require('json')
|
3
|
+
require('date')
|
4
|
+
|
5
|
+
module PickpointApi::ApiActions
|
6
|
+
include(::PickpointApi::Exceptions)
|
7
|
+
include(::PickpointApi::Constants)
|
8
|
+
|
9
|
+
# Начало сессии
|
10
|
+
def login(login, password)
|
11
|
+
ensure_session_state(:new)
|
12
|
+
data = {'Login' => login, 'Password' => password}
|
13
|
+
response = json_request(:login, data)
|
14
|
+
check_for_error(response, 'ErrorMessage', LoginError) do
|
15
|
+
@state = :error
|
16
|
+
end
|
17
|
+
|
18
|
+
@session_id = response['SessionId']
|
19
|
+
@state = :started
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
# Завершение сессии
|
24
|
+
def logout
|
25
|
+
ensure_session_state
|
26
|
+
data = {'SessionId' => @session_id}
|
27
|
+
response = json_request(:logout, data)
|
28
|
+
|
29
|
+
if response['Success'] == true
|
30
|
+
@state = :closed
|
31
|
+
@session_id = nil
|
32
|
+
else
|
33
|
+
@state = :error
|
34
|
+
raise LogoutError
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Регистрация одноместных отправлений
|
39
|
+
def create_sending(data)
|
40
|
+
sendings_request(:create_sending, data)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Регистрация многоместных отправлений
|
44
|
+
def create_shipment(data)
|
45
|
+
sendings_request(:create_shipment, data)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Создание отправления клиентского возврата
|
49
|
+
def make_return(options)
|
50
|
+
ensure_session_state
|
51
|
+
|
52
|
+
if !options[:invoice_id].nil? && !options[:sender_invoice_number].nil?
|
53
|
+
raise ApiError 'Only :invoice_id or :sender_invoice_number parameter should be specified'
|
54
|
+
end
|
55
|
+
|
56
|
+
data = {
|
57
|
+
'SessionId' => @session_id
|
58
|
+
}
|
59
|
+
|
60
|
+
if !options[:invoice_id].nil?
|
61
|
+
data['InvoiceNumber'] = options[:invoice_id]
|
62
|
+
elsif !options[:sender_invoice_number].nil?
|
63
|
+
data['GCInvoiceNumber'] = options[:sender_invoice_number]
|
64
|
+
else
|
65
|
+
raise ApiError 'Either :invoice_id or :sender_invoice_number parameter should be specified'
|
66
|
+
end
|
67
|
+
|
68
|
+
response = json_request(:make_return, data)
|
69
|
+
|
70
|
+
errors = res.select do |x|
|
71
|
+
!x['Error'].nil? && !x['Error'].empty?
|
72
|
+
end.map do |x|
|
73
|
+
x['Error']
|
74
|
+
end
|
75
|
+
|
76
|
+
if !errors.empty
|
77
|
+
raise ApiError errors.join(';')
|
78
|
+
end
|
79
|
+
|
80
|
+
res
|
81
|
+
end
|
82
|
+
|
83
|
+
# Получение списка возвратных отправлений
|
84
|
+
def get_return_invoices_list(date_from, date_to = DateTime.now)
|
85
|
+
ensure_session_state
|
86
|
+
data = {
|
87
|
+
'SessionId' => @session_id,
|
88
|
+
'DateFrom' => date_from.strftime(DATE_FORMAT),
|
89
|
+
'DateTo' => date_to.strftime(DATE_FORMAT)
|
90
|
+
}
|
91
|
+
res = json_request(:get_return_invoice_list, data)
|
92
|
+
check_for_error(res, 'Error')
|
93
|
+
end
|
94
|
+
|
95
|
+
# Мониторинг отправления
|
96
|
+
def track_sending(invoice_id = nil, sender_invoice_number = nil)
|
97
|
+
request_by_invoice_id(:track_sending, invoice_id, sender_invoice_number)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Получение информации по отправлению
|
101
|
+
def sending_info(invoice_id = nil, sender_invoice_number = nil)
|
102
|
+
request_by_invoice_id(:sending_info, invoice_id, sender_invoice_number)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Получение стоимости доставки
|
106
|
+
def get_delivery_cost(options)
|
107
|
+
ensure_session_state
|
108
|
+
|
109
|
+
if !options[:invoice_ids].nil? && !options[:sender_invoice_numbers].nil?
|
110
|
+
raise ApiError 'Only :invoice_ids or :sender_invoice_numbers parameter should be specified'
|
111
|
+
end
|
112
|
+
|
113
|
+
data = if !options[:invoice_ids].nil?
|
114
|
+
options[:invoice_ids].map do |invoice_id|
|
115
|
+
{'InvoiceNumber' => invoice_id}
|
116
|
+
end
|
117
|
+
elsif !options[:sender_invoice_numbers].nil?
|
118
|
+
options[:invoice_ids].map do |invoice_id|
|
119
|
+
{'SenderInvoiceNumber' => invoice_id}
|
120
|
+
end
|
121
|
+
else
|
122
|
+
raise ApiError 'Either :invoice_ids or :sender_invoice_numbers parameter should be specified'
|
123
|
+
end
|
124
|
+
|
125
|
+
data = attach_session_id('Sendings', data)
|
126
|
+
json_request(:get_delivery_cost, data)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Вызов курьера
|
130
|
+
def courier(data)
|
131
|
+
ensure_session_state
|
132
|
+
data = data.clone
|
133
|
+
data['SessionId'] = @session_id
|
134
|
+
res = json_request(:courier, data)
|
135
|
+
check_for_error(res, 'ErrorMessage', CourierError)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Отмена вызова курьера
|
139
|
+
def courier_cancel(courier_order_number)
|
140
|
+
ensure_session_state
|
141
|
+
data = attach_session_id('OrderNumber', courier_order_number)
|
142
|
+
res = json_request(:courier_cancel, data)
|
143
|
+
res['Canceled']
|
144
|
+
end
|
145
|
+
|
146
|
+
# Формирование реестра по списку отправлений в PDF
|
147
|
+
def make_reestr(invoice_id)
|
148
|
+
request_by_invoice_ids(invoice_id, :make_reestr)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Формирование реестра (по списку отправлений)
|
152
|
+
def make_reestr_number(invoice_ids)
|
153
|
+
ensure_session_state
|
154
|
+
response = request_by_invoice_ids(invoice_ids, :make_reestr_number)
|
155
|
+
res = JSON.parse(response)
|
156
|
+
check_for_error(res, 'ErrorMessage')
|
157
|
+
res['Numbers']
|
158
|
+
end
|
159
|
+
|
160
|
+
# Получение созданного реестра в PDF
|
161
|
+
def get_reestr(invoice_id = nil, reestr_number = nil)
|
162
|
+
ensure_session_state
|
163
|
+
data = {
|
164
|
+
'SessionId' => @session_id
|
165
|
+
}
|
166
|
+
data['InvoiceNumber'] = invoice_id if !invoice_id.nil?
|
167
|
+
data['ReestrNumber'] = reestr_number if !reestr_number.nil?
|
168
|
+
response = execute_action(:get_reestr, data)
|
169
|
+
|
170
|
+
if response.start_with?('Error')
|
171
|
+
raise ApiError, response
|
172
|
+
else
|
173
|
+
return response
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# Формирование этикеток в PDF
|
178
|
+
def make_label(invoice_id)
|
179
|
+
request_by_invoice_ids(invoice_id, :make_label)
|
180
|
+
end
|
181
|
+
|
182
|
+
# Формирование этикеток в PDF для принтера Zebra
|
183
|
+
def make_zlabel(invoice_id)
|
184
|
+
request_by_invoice_ids(invoice_id, :make_zlabel)
|
185
|
+
end
|
186
|
+
|
187
|
+
# Получение списка городов
|
188
|
+
def city_list
|
189
|
+
parameterless_request(:city_list)
|
190
|
+
end
|
191
|
+
|
192
|
+
# Получение списка терминалов
|
193
|
+
def postamat_list
|
194
|
+
parameterless_request(:postamat_list)
|
195
|
+
end
|
196
|
+
|
197
|
+
# Получение информации по зонам
|
198
|
+
def get_zone(city, pt = nil)
|
199
|
+
ensure_session_state
|
200
|
+
data = {
|
201
|
+
'SessionId' => @session_id,
|
202
|
+
'FromCity' => city
|
203
|
+
}
|
204
|
+
|
205
|
+
if !pt.nil?
|
206
|
+
data['ToPT'] = pt
|
207
|
+
end
|
208
|
+
|
209
|
+
json_request(:get_zone, data)
|
210
|
+
end
|
211
|
+
|
212
|
+
# Получение акта возврата денег
|
213
|
+
def get_money_return_order(ikn, document_number, date_from, date_to = DateTime.now)
|
214
|
+
return_request(:get_money_return_order, ikn, document_number, date_from, date_to)
|
215
|
+
end
|
216
|
+
|
217
|
+
# Получение акта возврата товара
|
218
|
+
def get_product_return_order(ikn, document_number, date_from, date_to = DateTime.now)
|
219
|
+
return_request(:get_product_return_order, ikn, document_number, date_from, date_to)
|
220
|
+
end
|
221
|
+
|
222
|
+
# Получение информации по вложимому
|
223
|
+
def enclose_info(barcode)
|
224
|
+
ensure_session_state
|
225
|
+
data = attach_session_id('Barcode', barcode)
|
226
|
+
res = json_request(:enclose_info, data)
|
227
|
+
check_for_error(res, 'Error')
|
228
|
+
end
|
229
|
+
|
230
|
+
# Получение истории по списку отправлений
|
231
|
+
def track_sendings(invoice_id)
|
232
|
+
request_by_invoice_ids(invoice_id, :track_sendings)
|
233
|
+
end
|
234
|
+
|
235
|
+
# Получение справочника статусов отправления
|
236
|
+
def get_states
|
237
|
+
parameterless_request(:get_states)
|
238
|
+
end
|
239
|
+
|
240
|
+
# Получение списка отправлений, прошедших этап (статус)
|
241
|
+
def get_invoices_change_state(state, date_from, date_to = DateTime.now)
|
242
|
+
ensure_session_state
|
243
|
+
data = {
|
244
|
+
'SessionId' => @session_id,
|
245
|
+
'DateFrom' => date_from.strftime(DATE_FORMAT),
|
246
|
+
'DateTo' => date_to.strftime(DATE_FORMAT),
|
247
|
+
'State' => state
|
248
|
+
}
|
249
|
+
json_request(:get_invoices_change_state, data)
|
250
|
+
end
|
251
|
+
|
252
|
+
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
module PickpointApi::Exceptions
|
2
2
|
|
3
3
|
ApiError = Class.new(StandardError)
|
4
|
-
|
4
|
+
InvalidSessionState = Class.new(ApiError)
|
5
|
+
LoginError = Class.new(ApiError)
|
6
|
+
LogoutError = Class.new(ApiError)
|
7
|
+
UnknownApiAction = Class.new(ApiError)
|
8
|
+
CourierError = Class.new(ApiError)
|
5
9
|
end
|
@@ -1,7 +1,10 @@
|
|
1
|
-
|
2
|
-
require('json')
|
1
|
+
require_relative('api_actions.rb')
|
3
2
|
|
4
3
|
class PickpointApi::Session
|
4
|
+
include(::PickpointApi::Exceptions)
|
5
|
+
include(::PickpointApi::Constants)
|
6
|
+
include(::PickpointApi::ApiActions)
|
7
|
+
|
5
8
|
attr_reader :state
|
6
9
|
attr_reader :test
|
7
10
|
|
@@ -10,130 +13,101 @@ class PickpointApi::Session
|
|
10
13
|
@test = hash[:test] == true
|
11
14
|
end
|
12
15
|
|
13
|
-
|
14
|
-
if @state!= :new
|
15
|
-
return nil
|
16
|
-
end
|
17
|
-
|
18
|
-
data = {'Login' => login, 'Password' => password}
|
19
|
-
response = execute_action(:login, data)
|
20
|
-
response = JSON.parse(response)
|
16
|
+
private
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
def check_for_error(response, error_field, error = ApiError)
|
19
|
+
if !response[error_field].nil? && !response[error_field].empty?
|
20
|
+
yield if block_given?
|
21
|
+
raise error, response[error_field]
|
25
22
|
else
|
26
|
-
|
27
|
-
raise ::PickpointApi::Exceptions::ApiError, response['ErrorMessage']
|
23
|
+
response
|
28
24
|
end
|
29
25
|
end
|
30
26
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
response = JSON.parse(response)
|
36
|
-
if response['Success']
|
37
|
-
@state = :closed
|
38
|
-
@session_id = nil
|
39
|
-
return true
|
40
|
-
else
|
41
|
-
return false
|
42
|
-
end
|
43
|
-
else
|
44
|
-
return false
|
45
|
-
end
|
27
|
+
def sendings_request(action, data)
|
28
|
+
ensure_session_state
|
29
|
+
data = attach_session_id(data, 'Sendings')
|
30
|
+
json_request(action, data)
|
46
31
|
end
|
47
32
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
response = JSON.parse(response)
|
53
|
-
end
|
33
|
+
def parameterless_request(action)
|
34
|
+
ensure_session_state
|
35
|
+
response = execute_action(action)
|
36
|
+
JSON.parse(response)
|
54
37
|
end
|
55
38
|
|
56
|
-
def
|
57
|
-
if @state !=
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
data = invoice_id
|
62
|
-
data = attach_session_id(data, 'InvoiceNumber')
|
63
|
-
response = execute_action(:track_sending, data)
|
64
|
-
|
65
|
-
if response.nil? || response.empty?
|
66
|
-
return nil
|
39
|
+
def ensure_session_state(state = :started)
|
40
|
+
if @state != state
|
41
|
+
raise InvalidSessionState
|
67
42
|
end
|
68
|
-
|
69
|
-
response = JSON.parse(response)
|
70
43
|
end
|
71
44
|
|
72
|
-
def
|
73
|
-
|
74
|
-
|
75
|
-
response = JSON.parse(response)
|
76
|
-
end
|
45
|
+
def json_request(action, data)
|
46
|
+
response = execute_action(action, data)
|
47
|
+
JSON.parse(response)
|
77
48
|
end
|
78
49
|
|
79
|
-
def
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
data = invoice_id
|
86
|
-
elsif
|
87
|
-
data = [invoice_id]
|
50
|
+
def request_by_invoice_ids(invoice_ids, action)
|
51
|
+
ensure_session_state
|
52
|
+
data = if invoice_ids.kind_of?(Array)
|
53
|
+
invoice_ids
|
54
|
+
else
|
55
|
+
[invoice_ids]
|
88
56
|
end
|
89
57
|
|
90
58
|
data = attach_session_id(data,'Invoices')
|
91
|
-
response = execute_action(
|
59
|
+
response = execute_action(action, data)
|
92
60
|
|
93
|
-
if response.start_with?(
|
94
|
-
raise
|
95
|
-
return nil
|
61
|
+
if response.start_with?('Error')
|
62
|
+
raise ApiError, response
|
96
63
|
else
|
97
64
|
return response
|
98
65
|
end
|
99
66
|
end
|
100
67
|
|
101
|
-
def
|
102
|
-
|
103
|
-
|
104
|
-
|
68
|
+
def return_request(action, ikn, document_number, date_from, date_to = DateTime.now)
|
69
|
+
ensure_session_state
|
70
|
+
data = {
|
71
|
+
'SessionId' => @session_id,
|
72
|
+
'IKN' => ikn,
|
73
|
+
'DocumentNumber' => document_number,
|
74
|
+
'DateFrom' => date_from.strftime(DATE_FORMAT),
|
75
|
+
'DateEnd' => date_to.strftime(DATE_FORMAT)
|
76
|
+
}
|
77
|
+
json_request(action, data)
|
78
|
+
check_for_error(res, 'Error')
|
79
|
+
end
|
105
80
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
81
|
+
def request_by_invoice_id(action, invoice_id = nil, sender_invoice_number = nil)
|
82
|
+
ensure_session_state
|
83
|
+
data = {
|
84
|
+
'SessionId' => @session_id
|
85
|
+
}
|
111
86
|
|
112
|
-
|
113
|
-
|
87
|
+
if !invoice_id.nil?
|
88
|
+
data['InvoiceNumber'] = invoice_id
|
89
|
+
end
|
114
90
|
|
115
|
-
if
|
116
|
-
|
117
|
-
return nil
|
118
|
-
else
|
119
|
-
return response
|
91
|
+
if !sender_invoice_number.nil?
|
92
|
+
data['SenderInvoiceNumber'] = sender_invoice_number
|
120
93
|
end
|
121
|
-
end
|
122
94
|
|
123
|
-
|
95
|
+
json_request(action, data)
|
96
|
+
end
|
124
97
|
|
125
98
|
def api_path
|
126
99
|
if @test
|
127
|
-
|
100
|
+
API_TEST_PATH
|
128
101
|
else
|
129
|
-
|
102
|
+
API_PROD_PATH
|
130
103
|
end
|
131
104
|
end
|
132
105
|
|
133
106
|
def create_request(action)
|
134
|
-
action_config =
|
107
|
+
action_config = ACTIONS[action]
|
108
|
+
|
135
109
|
if action_config.nil?
|
136
|
-
|
110
|
+
raise UnknownApiAction, action
|
137
111
|
end
|
138
112
|
|
139
113
|
action_path = "#{api_path}#{action_config[:path]}"
|
@@ -145,7 +119,6 @@ class PickpointApi::Session
|
|
145
119
|
end
|
146
120
|
|
147
121
|
req.content_type = 'application/json'
|
148
|
-
|
149
122
|
req
|
150
123
|
end
|
151
124
|
|
@@ -157,23 +130,36 @@ class PickpointApi::Session
|
|
157
130
|
end
|
158
131
|
|
159
132
|
def execute_action(action, data = {})
|
160
|
-
|
161
|
-
|
162
|
-
if req.nil?
|
163
|
-
return nil
|
164
|
-
end
|
165
|
-
|
133
|
+
logger.debug("Request: action: #{action}; data: #{data.inspect}")
|
134
|
+
req = create_request(action)
|
166
135
|
req.body = data.to_json
|
167
|
-
|
168
136
|
response = send_request(req)
|
137
|
+
log_response(response)
|
138
|
+
|
139
|
+
if response.code != '200'
|
140
|
+
raise ApiError, response.body
|
141
|
+
end
|
169
142
|
|
170
143
|
response.body
|
171
144
|
end
|
172
145
|
|
173
146
|
def send_request(req)
|
174
|
-
::Net::HTTP.start(
|
147
|
+
::Net::HTTP.start(API_HOST, API_PORT) do |http|
|
175
148
|
http.request(req)
|
176
149
|
end
|
177
150
|
end
|
178
151
|
|
152
|
+
def log_response(response)
|
153
|
+
if !response.body.nil?
|
154
|
+
if response.body.start_with?('%PDF')
|
155
|
+
logger.debug("Response: #{response.code}; data: PDF")
|
156
|
+
else
|
157
|
+
logger.debug("Response: #{response.code}; data: #{response.body[0,200]}#{response.body.size > 200 ? '...' : ''}")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def logger
|
163
|
+
::PickpointApi.logger
|
164
|
+
end
|
179
165
|
end
|
data/pickpoint_api.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require_relative('./lib/pickpoint_api.rb')
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
4
|
s.name = "pickpoint_api"
|
3
|
-
s.version =
|
5
|
+
s.version = ::PickpointApi::VERSION
|
4
6
|
s.authors = ["Kinderly LTD"]
|
5
7
|
s.email = ["nuinuhin@gmail.com"]
|
6
8
|
s.homepage = "http://github.com/kinderly/pickpoint_api"
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require_relative '../spec_helper.rb'
|
2
|
+
|
3
|
+
include DummyData
|
4
|
+
|
5
|
+
describe ::PickpointApi::Session do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
::HttpMocking.clear_response_queue
|
9
|
+
@session = ::PickpointApi::Session.new(test: true)
|
10
|
+
::HttpMocking.enqueue_response(LOGIN_SUCCESSFUL)
|
11
|
+
@session.login('login', 'password')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should create instance' do
|
15
|
+
@session = ::PickpointApi::Session.new(test: true)
|
16
|
+
expect(@session).not_to be_nil
|
17
|
+
expect(@session.test).to eq true
|
18
|
+
expect(@session.state).to eq :new
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should raise error on invalid session state' do
|
22
|
+
::HttpMocking.enqueue_response(LOGOUT_SUCCESSFUL)
|
23
|
+
@session.logout
|
24
|
+
expect {@session.city_list}.to raise_error ::PickpointApi::Exceptions::InvalidSessionState
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.login' do
|
28
|
+
it 'should log-in' do
|
29
|
+
expect(@session.state).to eq :started
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should handle incorrect login' do
|
33
|
+
@session = ::PickpointApi::Session.new(test: true)
|
34
|
+
::HttpMocking.enqueue_response(LOGIN_FAILED)
|
35
|
+
expect { @session.login('login', 'password') }.to raise_error ::PickpointApi::Exceptions::LoginError
|
36
|
+
expect(@session.state).to eq(:error)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '.logout' do
|
41
|
+
it 'should log out' do
|
42
|
+
::HttpMocking.enqueue_response(LOGOUT_SUCCESSFUL)
|
43
|
+
@session.logout
|
44
|
+
expect(@session.state).to eq(:closed)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should raise error on logout fail' do
|
48
|
+
::HttpMocking.enqueue_response(LOGOUT_FAIL)
|
49
|
+
expect{@session.logout}.to raise_error ::PickpointApi::Exceptions::LogoutError
|
50
|
+
expect(@session.state).to eq(:error)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.create_sending' do
|
55
|
+
it 'should handle successfull request' do
|
56
|
+
::HttpMocking.enqueue_response(CREATE_SENDING_SUCCESSFUL)
|
57
|
+
res = @session.create_sending(SAMPLE_SENDING_REQUEST)
|
58
|
+
expect(res['CreatedSendings']).not_to be_empty
|
59
|
+
expect(res['RejectedSendings']).to be_empty
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
[:track_sending, :sending_info].each do |m|
|
64
|
+
describe ".#{m}" do
|
65
|
+
it 'should handle successfull request' do
|
66
|
+
::HttpMocking.enqueue_response({}.to_json)
|
67
|
+
res = @session.send(m, '21121312')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
[:make_label, :make_zlabel, :make_reestr].each do |m|
|
73
|
+
describe ".#{m}" do
|
74
|
+
it 'should handle successfull request' do
|
75
|
+
::HttpMocking.enqueue_response(PDF_SUCCESS)
|
76
|
+
@session.send(m, '12345')
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should handle multiple invoices' do
|
80
|
+
::HttpMocking.enqueue_response(PDF_SUCCESS)
|
81
|
+
@session.send(m, ['123123','123213'])
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should handle api error' do
|
85
|
+
::HttpMocking.enqueue_response(PDF_ERROR)
|
86
|
+
expect{@session.send(m, ['123123'])}.to raise_error PickpointApi::Exceptions::ApiError
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '.city_list' do
|
92
|
+
it 'should handle successfull request' do
|
93
|
+
::HttpMocking.enqueue_response(CITY_LIST_SUCCESS)
|
94
|
+
res = @session.city_list
|
95
|
+
expect(res.count).to eq(2)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '.get_states' do
|
100
|
+
it 'should handle successfull request' do
|
101
|
+
::HttpMocking.enqueue_response(STATES_SUCCESS)
|
102
|
+
res = @session.get_states
|
103
|
+
expect(res.count).to eq(3)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '.postamat_list' do
|
108
|
+
it 'should handle successfull request' do
|
109
|
+
::HttpMocking.enqueue_response({}.to_json)
|
110
|
+
@session.postamat_list
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe '.get_zone' do
|
115
|
+
it 'should handle successfull request' do
|
116
|
+
::HttpMocking.enqueue_response(ZONES_SUCCESS)
|
117
|
+
res = @session.get_zone('Some city', '7801-035')
|
118
|
+
expect(res['Error']).to be_nil
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '.get_invoices_change_state' do
|
123
|
+
it 'should handle successfull request' do
|
124
|
+
::HttpMocking.enqueue_response(GET_STATE_SUCCESS)
|
125
|
+
res = @session.get_invoices_change_state(102, DateTime.parse('2014-01-01'), DateTime.parse('2014-03-01'))
|
126
|
+
expect(res.count).to eq(1)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe '.courier' do
|
131
|
+
it 'should handle successfull request' do
|
132
|
+
::HttpMocking.enqueue_response('{}')
|
133
|
+
res = @session.courier({})
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require('logger')
|
2
|
+
require_relative 'spec_helper.rb'
|
3
|
+
|
4
|
+
include DummyData
|
5
|
+
|
6
|
+
describe 'PickpointApi' do
|
7
|
+
before(:each) do
|
8
|
+
HttpMocking.clear_response_queue
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should run session' do
|
12
|
+
HttpMocking.enqueue_response(LOGIN_SUCCESSFUL)
|
13
|
+
HttpMocking.enqueue_response(LOGOUT_SUCCESSFUL)
|
14
|
+
|
15
|
+
PickpointApi.session('login', 'password', test:true) do |s|
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should write logs' do
|
20
|
+
PickpointApi.logger.level = Logger::UNKNOWN
|
21
|
+
PickpointApi.logger.info('INFO')
|
22
|
+
PickpointApi.logger.error('ERROR')
|
23
|
+
PickpointApi.logger.warn('WARNING')
|
24
|
+
PickpointApi.logger.fatal('FATAL')
|
25
|
+
PickpointApi.logger.debug('DEBUG')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should assign logger' do
|
29
|
+
PickpointApi.logger = nil
|
30
|
+
PickpointApi.logger = Logger.new($stderr)
|
31
|
+
expect(PickpointApi.logger).not_to be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should handle session error' do
|
35
|
+
PickpointApi.logger.level = Logger::UNKNOWN
|
36
|
+
|
37
|
+
HttpMocking.enqueue_response(LOGIN_SUCCESSFUL)
|
38
|
+
HttpMocking.enqueue_response(PDF_ERROR)
|
39
|
+
HttpMocking.enqueue_response(LOGOUT_SUCCESSFUL)
|
40
|
+
|
41
|
+
expect do
|
42
|
+
PickpointApi.session('login', 'password', test:true) do |s|
|
43
|
+
s.make_label('111111')
|
44
|
+
end
|
45
|
+
end.to raise_error PickpointApi::Exceptions::ApiError
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/spec/support/dummy_data.rb
CHANGED
@@ -3,43 +3,89 @@
|
|
3
3
|
require ('json')
|
4
4
|
|
5
5
|
module DummyData
|
6
|
-
|
6
|
+
|
7
|
+
LOGIN_SUCCESSFUL = {'SessionId' => '111111111'}.to_json
|
8
|
+
|
7
9
|
LOGIN_FAILED = {'ErrorMessage' => 'Неверный логин или пароль'}.to_json
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
|
11
|
+
LOGOUT_SUCCESSFUL = {'Success' => true}.to_json
|
12
|
+
LOGOUT_FAIL = {'Success' => false}.to_json
|
13
|
+
|
14
|
+
CREATE_SENDING_SUCCESSFUL = {
|
15
|
+
'CreatedSendings' => [
|
11
16
|
{
|
12
|
-
'EDTN' =>
|
13
|
-
'IKN' =>
|
17
|
+
'EDTN' => '14',
|
18
|
+
'IKN' => '9990000000',
|
14
19
|
'Barcode' => '200819647155'
|
15
20
|
}
|
16
21
|
],
|
17
|
-
|
22
|
+
'RejectedSendings' => []
|
23
|
+
}.to_json
|
24
|
+
|
25
|
+
PDF_SUCCESS = '%PDF'
|
26
|
+
|
27
|
+
PDF_ERROR = 'Error: Произошла ошибка'
|
28
|
+
|
29
|
+
CITY_LIST_SUCCESS = [
|
30
|
+
{'Id'=>3926841, 'Name'=>'Борзые', 'Owner_Id'=>923, 'RegionName'=>'Московская обл.'},
|
31
|
+
{'Id'=>3940057, 'Name'=>'Северный', 'Owner_Id'=>5, 'RegionName'=>'Московская обл.'}
|
32
|
+
].to_json
|
33
|
+
|
34
|
+
STATES_SUCCESS = [
|
35
|
+
{'State'=>101, 'StateText'=>'Зарегистрирован'},
|
36
|
+
{'State'=>102, 'StateText'=>'Сформирован для передачи Логисту'},
|
37
|
+
{'State'=>103, 'StateText'=>'Развоз до ПТ самостоятельно'}
|
38
|
+
].to_json
|
39
|
+
|
40
|
+
ZONES_SUCCESS = {
|
41
|
+
'Error' => nil,
|
42
|
+
'Zones' => [
|
43
|
+
{
|
44
|
+
'DeliveryMax' => 2,
|
45
|
+
'DeliveryMin' => 1,
|
46
|
+
'FromCity' => 'Химки',
|
47
|
+
'Koeff' => 1,
|
48
|
+
'ToCity' => 'Санкт-Петербург',
|
49
|
+
'ToPT' => '7801-035',
|
50
|
+
'Zone' => '0'
|
51
|
+
}
|
52
|
+
]
|
18
53
|
}.to_json
|
19
54
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
55
|
+
GET_STATE_SUCCESS = [
|
56
|
+
{
|
57
|
+
"ChangeDT" => "16.01.14 00:28",
|
58
|
+
"State" => 112,
|
59
|
+
"StateMessage" => "Невостребованное",
|
60
|
+
"InvoiceNumber"=>"0000000000000",
|
61
|
+
"SenderInvoiceNumber"=>"00000"
|
62
|
+
}
|
63
|
+
].to_json
|
64
|
+
|
65
|
+
|
66
|
+
SAMPLE_SENDING_REQUEST = [{
|
67
|
+
'EDTN' => 14,
|
68
|
+
'IKN' => '9990000000',
|
69
|
+
'Invoice' => {
|
70
|
+
'SenderCode' => 2121,
|
71
|
+
'Description' => 'A description',
|
72
|
+
'RecipientName' => 'John Doe',
|
73
|
+
'PostamatNumber' => '6101-004',
|
74
|
+
'MobilePhone' => '+79030000000',
|
75
|
+
'Email' => nil,
|
76
|
+
'PostageType' => '10003',
|
77
|
+
'GettingType' => '101',
|
78
|
+
'PayType' => '1',
|
79
|
+
'Sum' => 4490.0,
|
80
|
+
'SubEncloses' => [
|
35
81
|
{
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
82
|
+
'Line' => 1,
|
83
|
+
'ProductCode' => 4559802,
|
84
|
+
'GoodsCode' => '79380-555',
|
85
|
+
'Name' => 'Fire extinguisher large',
|
86
|
+
'Price' => 4290.0
|
41
87
|
}]
|
42
88
|
}
|
43
|
-
}
|
89
|
+
}]
|
44
90
|
|
45
91
|
end
|
@@ -1,12 +1,19 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
|
3
|
-
|
4
3
|
module HttpMocking
|
5
4
|
|
6
|
-
def self.
|
5
|
+
def self.clear_response_queue
|
6
|
+
@responses = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.enqueue_response(response_body, code = '200', msg='OK')
|
10
|
+
@responses ||= []
|
11
|
+
@responses.push([response_body, code, msg])
|
12
|
+
|
7
13
|
Net::HTTP.any_instance.stub(:request) do |req|
|
8
|
-
|
9
|
-
response.
|
14
|
+
next_response = @responses.shift
|
15
|
+
response = Net::HTTPResponse.new(1.0, next_response[1], next_response[2])
|
16
|
+
response.stub(:body => next_response[0])
|
10
17
|
response
|
11
18
|
end
|
12
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pickpoint_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kinderly LTD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem provides a Ruby wrapper over Pickpoint API.
|
14
14
|
email:
|
@@ -18,16 +18,19 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- ".gitignore"
|
21
|
+
- ".rspec"
|
21
22
|
- ".travis.yml"
|
22
23
|
- LICENSE
|
23
24
|
- README.md
|
24
25
|
- lib/pickpoint_api.rb
|
26
|
+
- lib/pickpoint_api/api_actions.rb
|
25
27
|
- lib/pickpoint_api/constants.rb
|
26
28
|
- lib/pickpoint_api/exceptions.rb
|
27
29
|
- lib/pickpoint_api/session.rb
|
28
30
|
- pickpoint_api.gemspec
|
29
|
-
- spec/pickpoint_api.rb
|
30
|
-
- spec/
|
31
|
+
- spec/pickpoint_api/session_spec.rb
|
32
|
+
- spec/pickpoint_api_spec.rb
|
33
|
+
- spec/spec_helper.rb
|
31
34
|
- spec/support/dummy_data.rb
|
32
35
|
- spec/support/http_mocking.rb
|
33
36
|
homepage: http://github.com/kinderly/pickpoint_api
|
data/spec/pickpoint_api.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require_relative '../lib/pickpoint_api.rb'
|
2
|
-
require_relative './support/dummy_data.rb'
|
3
|
-
require_relative './support/http_mocking.rb'
|
4
|
-
|
5
|
-
include DummyData
|
6
|
-
|
7
|
-
describe 'PickpointApi' do
|
8
|
-
it 'should run session' do
|
9
|
-
HttpMocking.set_next_response(LOGIN_SUCCESSFULL)
|
10
|
-
|
11
|
-
PickpointApi.session('login', 'password', test:true) do |s|
|
12
|
-
HttpMocking.set_next_response(LOGOUT_SUCCESSFULL)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/spec/session.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require_relative '../lib/pickpoint_api.rb'
|
4
|
-
require_relative './support/dummy_data.rb'
|
5
|
-
require_relative './support/http_mocking.rb'
|
6
|
-
|
7
|
-
include DummyData
|
8
|
-
|
9
|
-
describe ::PickpointApi::Session do
|
10
|
-
before(:each) do
|
11
|
-
@session = ::PickpointApi::Session.new(test: true)
|
12
|
-
|
13
|
-
::HttpMocking.set_next_response(LOGIN_SUCCESSFULL)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'can instatiate' do
|
17
|
-
expect(@session).not_to be_nil
|
18
|
-
expect(@session.test).to eq true
|
19
|
-
expect(@session.state).to eq :new
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '.login' do
|
23
|
-
it 'should log-in' do
|
24
|
-
@session.login('login', 'password')
|
25
|
-
expect(@session.state).to eq :started
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'should handle incorrect login' do
|
29
|
-
::HttpMocking.set_next_response(LOGIN_FAILED)
|
30
|
-
expect { @session.login('login', 'password') }.to raise_error ::PickpointApi::Exceptions::ApiError
|
31
|
-
expect(@session.state).to eq(:error)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe '.logout' do
|
36
|
-
it 'should log out' do
|
37
|
-
@session.login('login', 'password')
|
38
|
-
::HttpMocking.set_next_response(LOGOUT_SUCCESSFULL)
|
39
|
-
expect(@session.logout).to eq(true)
|
40
|
-
expect(@session.state).to eq(:closed)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '.create_sending' do
|
45
|
-
it 'should handle succesfull request' do
|
46
|
-
@session.login('login', 'password')
|
47
|
-
::HttpMocking.set_next_response(CREATE_SENDING_SUCCESSFULL)
|
48
|
-
res = @session.create_sending(SAMPLE_SENDING_REQUEST)
|
49
|
-
expect(res['CreatedSendings']).not_to be_empty
|
50
|
-
expect(res['RejectedSendings']).to be_empty
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '.track_sending' do
|
55
|
-
it 'should handle succesfull request' do
|
56
|
-
@session.login('login', 'password')
|
57
|
-
::HttpMocking.set_next_response({}.to_json)
|
58
|
-
res = @session.track_sending('21121312')
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe '.postamat_list' do
|
63
|
-
it 'should handle succesfull request' do
|
64
|
-
@session.login('login', 'password')
|
65
|
-
::HttpMocking.set_next_response({}.to_json)
|
66
|
-
@session.postamat_list
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe '.make_label' do
|
71
|
-
it 'should handle succesfull request' do
|
72
|
-
@session.login('login', 'password')
|
73
|
-
::HttpMocking.set_next_response('%PDF')
|
74
|
-
@session.make_label('12345')
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should handle multiple invoices' do
|
78
|
-
@session.login('login', 'password')
|
79
|
-
::HttpMocking.set_next_response('%PDF')
|
80
|
-
@session.make_label(['123123','123213'])
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'should handle api error' do
|
84
|
-
@session.login('login', 'password')
|
85
|
-
::HttpMocking.set_next_response('Error: Случилось что-то ужасное')
|
86
|
-
expect{@session.make_label(['123123'])}.to raise_error PickpointApi::Exceptions::ApiError
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe '.make_reestr' do
|
91
|
-
it 'should handle succesfull request' do
|
92
|
-
@session.login('login', 'password')
|
93
|
-
::HttpMocking.set_next_response('%PDF')
|
94
|
-
@session.make_reestr('12345')
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'should handle multiple invoices' do
|
98
|
-
@session.login('login', 'password')
|
99
|
-
::HttpMocking.set_next_response('%PDF')
|
100
|
-
@session.make_reestr(['123123','123213'])
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'should handle api error' do
|
105
|
-
@session.login('login', 'password')
|
106
|
-
::HttpMocking.set_next_response('Error: Случилось что-то ужасное')
|
107
|
-
expect{@session.make_reestr(['123123'])}.to raise_error PickpointApi::Exceptions::ApiError
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|