dpd_api 0.0.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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +468 -0
- data/Rakefile +2 -0
- data/dpd_api.gemspec +26 -0
- data/lib/dpd_api/base.rb +36 -0
- data/lib/dpd_api/calculator.rb +21 -0
- data/lib/dpd_api/configuration.rb +33 -0
- data/lib/dpd_api/geography.rb +26 -0
- data/lib/dpd_api/label_print.rb +32 -0
- data/lib/dpd_api/nl.rb +32 -0
- data/lib/dpd_api/order.rb +56 -0
- data/lib/dpd_api/tracing.rb +26 -0
- data/lib/dpd_api/version.rb +3 -0
- data/lib/dpd_api.rb +14 -0
- data/spec/fixtures/dpd_api/calculator/service_cost.xml +55 -0
- data/spec/fixtures/dpd_api/calculator/service_cost_by_parcels.xml +55 -0
- data/spec/fixtures/dpd_api/calculator/service_cost_by_parcels_fault.xml +15 -0
- data/spec/fixtures/dpd_api/calculator/service_cost_fault.xml +15 -0
- data/spec/fixtures/dpd_api/geography/cities_cash_pay.xml +23 -0
- data/spec/fixtures/dpd_api/geography/parcel_shops.xml +39 -0
- data/spec/fixtures/dpd_api/geography/terminals_self_delivery.xml +35 -0
- data/spec/fixtures/dpd_api/order/add_parcels.xml +0 -0
- data/spec/fixtures/dpd_api/order/cancel_order.xml +11 -0
- data/spec/fixtures/dpd_api/order/create_address.xml +11 -0
- data/spec/fixtures/dpd_api/order/create_order.xml +14 -0
- data/spec/fixtures/dpd_api/order/invoice_file.xml +0 -0
- data/spec/fixtures/dpd_api/order/order_status.xml +12 -0
- data/spec/fixtures/dpd_api/order/remove_parcels.xml +0 -0
- data/spec/fixtures/dpd_api/order/update_address.xml +11 -0
- data/spec/fixtures/dpd_api/tracing/states_by_client_order.xml +0 -0
- data/spec/fixtures/dpd_api/tracing/states_by_client_parcel.xml +0 -0
- data/spec/fixtures/dpd_api/tracing/states_by_dpd_order.xml +0 -0
- data/spec/lib/dpd_api/calculator_spec.rb +99 -0
- data/spec/lib/dpd_api/configuration_spec.rb +23 -0
- data/spec/lib/dpd_api/geography_spec.rb +53 -0
- data/spec/lib/dpd_api/order_spec.rb +200 -0
- data/spec/lib/dpd_api/tracing_spec.rb +58 -0
- data/spec/spec_helper.rb +7 -0
- metadata +165 -0
data/lib/dpd_api/nl.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module DpdApi
|
2
|
+
class Nl < Base
|
3
|
+
# TODO: Implement namespace
|
4
|
+
class << self
|
5
|
+
def get_nl_amount(params = {})
|
6
|
+
method = :get_nl_amount
|
7
|
+
namespace = :arg0
|
8
|
+
response(method, params, namespace: namespace)
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_nl_invoice(params = {})
|
12
|
+
method = :get_nl_invoice
|
13
|
+
namespace = :arg0
|
14
|
+
response(method, params, namespace: namespace)
|
15
|
+
end
|
16
|
+
|
17
|
+
def response(method, params = {}, namespace: nil)
|
18
|
+
params = @auth_params.clone.deep_merge!(params)
|
19
|
+
request = namespace ? { namespace => params } : params
|
20
|
+
response = @client.call(method, message: request)
|
21
|
+
namespace = "#{method}_response".to_sym
|
22
|
+
response.body[namespace][:return]
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def url
|
28
|
+
"#{DpdApi.configuration.base_url}/services/nl?wsdl"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module DpdApi
|
2
|
+
class Order < Base
|
3
|
+
class << self
|
4
|
+
def create_order(params = {})
|
5
|
+
method = :create_order
|
6
|
+
response(method, params)
|
7
|
+
end
|
8
|
+
|
9
|
+
def cancel_order(params = {})
|
10
|
+
method = :cancel_order
|
11
|
+
response(method, params)
|
12
|
+
end
|
13
|
+
|
14
|
+
def order_status(params = {})
|
15
|
+
method = :get_order_status
|
16
|
+
response(method, params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_address(params = {})
|
20
|
+
method = :create_address
|
21
|
+
response(method, params)
|
22
|
+
end
|
23
|
+
|
24
|
+
def update_address(params = {})
|
25
|
+
method = :update_address
|
26
|
+
response(method, params)
|
27
|
+
end
|
28
|
+
|
29
|
+
# TODO: add :save for file
|
30
|
+
#
|
31
|
+
#f = File.new("/tmp/file.pdf", "w")
|
32
|
+
#f.write(Base64.decode64(invoice[:file]).force_encoding('UTF-8'))
|
33
|
+
#f.close
|
34
|
+
def invoice_file(params = {})
|
35
|
+
method = :get_invoice_file
|
36
|
+
response(method, params)
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_parcels(params = {})
|
40
|
+
method = :add_parcels
|
41
|
+
response(method, params)
|
42
|
+
end
|
43
|
+
|
44
|
+
def remove_parcels(params = {})
|
45
|
+
method = :remove_parcels
|
46
|
+
response(method, params)
|
47
|
+
end
|
48
|
+
|
49
|
+
protected
|
50
|
+
|
51
|
+
def url
|
52
|
+
"#{DpdApi.configuration.base_url}/services/order2?wsdl"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module DpdApi
|
2
|
+
class Tracing < Base
|
3
|
+
class << self
|
4
|
+
def states_by_client_order(params = {})
|
5
|
+
method = :get_states_by_client_order
|
6
|
+
response(method, params)
|
7
|
+
end
|
8
|
+
|
9
|
+
def states_by_client_parcel(params = {})
|
10
|
+
method = :get_states_by_client_parcel
|
11
|
+
response(method, params)
|
12
|
+
end
|
13
|
+
|
14
|
+
def states_by_dpd_order(params = {})
|
15
|
+
method = :get_states_by_dpd_order
|
16
|
+
response(method, params)
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def url
|
22
|
+
"#{DpdApi.configuration.base_url}/services/tracing1-1?wsdl"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/dpd_api.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "dpd_api/version"
|
2
|
+
|
3
|
+
require "savon"
|
4
|
+
|
5
|
+
require 'dpd_api/configuration'
|
6
|
+
require 'dpd_api/base'
|
7
|
+
require 'dpd_api/geography'
|
8
|
+
require 'dpd_api/calculator'
|
9
|
+
require 'dpd_api/order'
|
10
|
+
require 'dpd_api/tracing'
|
11
|
+
require 'dpd_api/nl'
|
12
|
+
require 'dpd_api/label_print'
|
13
|
+
|
14
|
+
DpdApi.configure {}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:getServiceCost2Response xmlns:ns2="http://dpd.ru/ws/calculator/2012-03-20">
|
5
|
+
<return>
|
6
|
+
<serviceCode>TEN</serviceCode>
|
7
|
+
<serviceName>DPD 10:00</serviceName>
|
8
|
+
<cost>551.65</cost>
|
9
|
+
<days>4</days>
|
10
|
+
</return>
|
11
|
+
<return>
|
12
|
+
<serviceCode>DPT</serviceCode>
|
13
|
+
<serviceName>DPD 13:00</serviceName>
|
14
|
+
<cost>486.75</cost>
|
15
|
+
<days>4</days>
|
16
|
+
</return>
|
17
|
+
<return>
|
18
|
+
<serviceCode>NDY</serviceCode>
|
19
|
+
<serviceName>DPD EXPRESS</serviceName>
|
20
|
+
<cost>1328.83</cost>
|
21
|
+
<days>4</days>
|
22
|
+
</return>
|
23
|
+
<return>
|
24
|
+
<serviceCode>BZP</serviceCode>
|
25
|
+
<serviceName>DPD 18:00</serviceName>
|
26
|
+
<cost>421.85</cost>
|
27
|
+
<days>4</days>
|
28
|
+
</return>
|
29
|
+
<return>
|
30
|
+
<serviceCode>CUR</serviceCode>
|
31
|
+
<serviceName>DPD CLASSIC domestic</serviceName>
|
32
|
+
<cost>1022.18</cost>
|
33
|
+
<days>4</days>
|
34
|
+
</return>
|
35
|
+
<return>
|
36
|
+
<serviceCode>ECN</serviceCode>
|
37
|
+
<serviceName>DPD ECONOMY</serviceName>
|
38
|
+
<cost>324.5</cost>
|
39
|
+
<days>5</days>
|
40
|
+
</return>
|
41
|
+
<return>
|
42
|
+
<serviceCode>CSM</serviceCode>
|
43
|
+
<serviceName>DPD Consumer</serviceName>
|
44
|
+
<cost>448.4</cost>
|
45
|
+
<days>4</days>
|
46
|
+
</return>
|
47
|
+
<return>
|
48
|
+
<serviceCode>PCL</serviceCode>
|
49
|
+
<serviceName>DPD CLASSIC Parcel</serviceName>
|
50
|
+
<cost>177.0</cost>
|
51
|
+
<days>4</days>
|
52
|
+
</return>
|
53
|
+
</ns2:getServiceCost2Response>
|
54
|
+
</S:Body>
|
55
|
+
</S:Envelope>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:getServiceCostByParcels2Response xmlns:ns2="http://dpd.ru/ws/calculator/2012-03-20">
|
5
|
+
<return>
|
6
|
+
<serviceCode>TEN</serviceCode>
|
7
|
+
<serviceName>DPD 10:00</serviceName>
|
8
|
+
<cost>551.65</cost>
|
9
|
+
<days>4</days>
|
10
|
+
</return>
|
11
|
+
<return>
|
12
|
+
<serviceCode>DPT</serviceCode>
|
13
|
+
<serviceName>DPD 13:00</serviceName>
|
14
|
+
<cost>486.75</cost>
|
15
|
+
<days>4</days>
|
16
|
+
</return>
|
17
|
+
<return>
|
18
|
+
<serviceCode>NDY</serviceCode>
|
19
|
+
<serviceName>DPD EXPRESS</serviceName>
|
20
|
+
<cost>1328.83</cost>
|
21
|
+
<days>4</days>
|
22
|
+
</return>
|
23
|
+
<return>
|
24
|
+
<serviceCode>BZP</serviceCode>
|
25
|
+
<serviceName>DPD 18:00</serviceName>
|
26
|
+
<cost>421.85</cost>
|
27
|
+
<days>4</days>
|
28
|
+
</return>
|
29
|
+
<return>
|
30
|
+
<serviceCode>CUR</serviceCode>
|
31
|
+
<serviceName>DPD CLASSIC domestic</serviceName>
|
32
|
+
<cost>1022.18</cost>
|
33
|
+
<days>4</days>
|
34
|
+
</return>
|
35
|
+
<return>
|
36
|
+
<serviceCode>ECN</serviceCode>
|
37
|
+
<serviceName>DPD ECONOMY</serviceName>
|
38
|
+
<cost>324.5</cost>
|
39
|
+
<days>5</days>
|
40
|
+
</return>
|
41
|
+
<return>
|
42
|
+
<serviceCode>CSM</serviceCode>
|
43
|
+
<serviceName>DPD Consumer</serviceName>
|
44
|
+
<cost>448.4</cost>
|
45
|
+
<days>4</days>
|
46
|
+
</return>
|
47
|
+
<return>
|
48
|
+
<serviceCode>PCL</serviceCode>
|
49
|
+
<serviceName>DPD CLASSIC Parcel</serviceName>
|
50
|
+
<cost>177.0</cost>
|
51
|
+
<days>4</days>
|
52
|
+
</return>
|
53
|
+
</ns2:getServiceCostByParcels2Response>
|
54
|
+
</S:Body>
|
55
|
+
</S:Envelope>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
|
5
|
+
<faultcode>S:Server</faultcode>
|
6
|
+
<faultstring>Населенный пункт cityId=0 не найден</faultstring>
|
7
|
+
<detail>
|
8
|
+
<ns2:ServiceCostFault2 xmlns:ns2="http://dpd.ru/ws/calculator/2012-03-20">
|
9
|
+
<code>no-data-found</code>
|
10
|
+
<message>Населенный пункт cityId=0 не найден</message>
|
11
|
+
</ns2:ServiceCostFault2>
|
12
|
+
</detail>
|
13
|
+
</S:Fault>
|
14
|
+
</S:Body>
|
15
|
+
</S:Envelope>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
|
5
|
+
<faultcode>S:Server</faultcode>
|
6
|
+
<faultstring>Населенный пункт cityId=0 не найден</faultstring>
|
7
|
+
<detail>
|
8
|
+
<ns2:ServiceCostFault2 xmlns:ns2="http://dpd.ru/ws/calculator/2012-03-20">
|
9
|
+
<code>no-data-found</code>
|
10
|
+
<message>Населенный пункт cityId=0 не найден</message>
|
11
|
+
</ns2:ServiceCostFault2>
|
12
|
+
</detail>
|
13
|
+
</S:Fault>
|
14
|
+
</S:Body>
|
15
|
+
</S:Envelope>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:getCitiesCashPayResponse xmlns:ns2="http://dpd.ru/ws/geography/2012-04-17">
|
5
|
+
<return>
|
6
|
+
<cityId>48951627</cityId>
|
7
|
+
<countryCode>RU</countryCode>
|
8
|
+
<countryName>Россия</countryName>
|
9
|
+
<regionCode>42</regionCode>
|
10
|
+
<regionName>Кемеровская</regionName>
|
11
|
+
<cityName>Кемерово</cityName>
|
12
|
+
</return>
|
13
|
+
<return>
|
14
|
+
<cityId>48994107</cityId>
|
15
|
+
<countryCode>RU</countryCode>
|
16
|
+
<countryName>Россия</countryName>
|
17
|
+
<regionCode>66</regionCode>
|
18
|
+
<regionName>Свердловская</regionName>
|
19
|
+
<cityName>Екатеринбург</cityName>
|
20
|
+
</return>
|
21
|
+
</ns2:getCitiesCashPayResponse>
|
22
|
+
</S:Body>
|
23
|
+
</S:Envelope>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:getParcelShopsResponse xmlns:ns2="http://dpd.ru/ws/geography/2012-04-17">
|
5
|
+
<return>
|
6
|
+
<parcelShop>
|
7
|
+
<code>01A</code>
|
8
|
+
<parcelShopType>ПВП</parcelShopType>
|
9
|
+
<address>
|
10
|
+
<countryCode>RU</countryCode>
|
11
|
+
<regionCode>61</regionCode>
|
12
|
+
<regionName>Ростовская</regionName>
|
13
|
+
<cityCode>61000001000</cityCode>
|
14
|
+
<cityName>Ростов-на-Дону</cityName>
|
15
|
+
<addressString>344038, Ростовская обл., г. Ростов-на-Дону, пр-т Ленина, д. 115</addressString>
|
16
|
+
</address>
|
17
|
+
<geoCoordinates>
|
18
|
+
<geoX>47.249054</geoX>
|
19
|
+
<geoY>39.722657</geoY>
|
20
|
+
</geoCoordinates>
|
21
|
+
<limits>
|
22
|
+
<maxWeight>31</maxWeight>
|
23
|
+
<maxLength>100</maxLength>
|
24
|
+
<maxWidth>100</maxWidth>
|
25
|
+
<maxHeight>100</maxHeight>
|
26
|
+
</limits>
|
27
|
+
<workingTime>
|
28
|
+
<weekDays>Пн,Вт,Ср,Чт,Пт,Сб</weekDays>
|
29
|
+
<workTime>09:00 - 20:00</workTime>
|
30
|
+
</workingTime>
|
31
|
+
<workingTime>
|
32
|
+
<weekDays>Вс</weekDays>
|
33
|
+
<workTime>выходной</workTime>
|
34
|
+
</workingTime>
|
35
|
+
</parcelShop>
|
36
|
+
</return>
|
37
|
+
</ns2:getParcelShopsResponse>
|
38
|
+
</S:Body>
|
39
|
+
</S:Envelope>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:getTerminalsSelfDelivery2Response xmlns:ns2="http://dpd.ru/ws/geography/2012-04-17">
|
5
|
+
<return>
|
6
|
+
<terminal>
|
7
|
+
<terminalCode>ABA</terminalCode>
|
8
|
+
<terminalName>Абакан - терминал</terminalName>
|
9
|
+
<terminalAddress>655004, Хакасия респ., г. Абакан, ул. Игарская, д. 10</terminalAddress>
|
10
|
+
<geoCoordinates>
|
11
|
+
<geoX>53.710113</geoX>
|
12
|
+
<geoY>91.392873</geoY>
|
13
|
+
</geoCoordinates>
|
14
|
+
<workingTime>
|
15
|
+
<weekDays>Пн,Вт,Ср,Чт,Пт</weekDays>
|
16
|
+
<workTime>08:00 - 19:30</workTime>
|
17
|
+
</workingTime>
|
18
|
+
<workingTime>
|
19
|
+
<weekDays>Сб,Вс</weekDays>
|
20
|
+
<workTime>08:00 - 18:30</workTime>
|
21
|
+
</workingTime>
|
22
|
+
</terminal>
|
23
|
+
<city>
|
24
|
+
<cityId>195851995</cityId>
|
25
|
+
<countryCode>RU</countryCode>
|
26
|
+
<countryName>Россия</countryName>
|
27
|
+
<regionCode>19</regionCode>
|
28
|
+
<regionName>Хакасия</regionName>
|
29
|
+
<cityCode>19000001000</cityCode>
|
30
|
+
<cityName>Абакан</cityName>
|
31
|
+
</city>
|
32
|
+
</return>
|
33
|
+
</ns2:getTerminalsSelfDelivery2Response>
|
34
|
+
</S:Body>
|
35
|
+
</S:Envelope>
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:cancelOrderResponse xmlns:ns2="http://dpd.ru/ws/order2/2012-04-04">
|
5
|
+
<return>
|
6
|
+
<orderNumberInternal>1234567</orderNumberInternal>
|
7
|
+
<status>Canceled</status>
|
8
|
+
</return>
|
9
|
+
</ns2:cancelOrderResponse>
|
10
|
+
</S:Body>
|
11
|
+
</S:Envelope>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:createAddressResponse xmlns:ns2="http://dpd.ru/ws/order2/2012-04-04">
|
5
|
+
<return>
|
6
|
+
<code>78</code>
|
7
|
+
<status>OK</status>
|
8
|
+
</return>
|
9
|
+
</ns2:createAddressResponse>
|
10
|
+
</S:Body>
|
11
|
+
</S:Envelope>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:createOrderResponse xmlns:ns2="http://dpd.ru/ws/order2/2012-04-04">
|
5
|
+
<return>
|
6
|
+
<orderNumberInternal>12345678</orderNumberInternal>
|
7
|
+
<status>OrderPending</status>
|
8
|
+
<errorMessage>Заказ обрабатывается нашими сотрудниками. Не повторяйте оформление данного заказа.
|
9
|
+
---------------------
|
10
|
+
2884657523 Нет разрешения на загрузку посылок!</errorMessage>
|
11
|
+
</return>
|
12
|
+
</ns2:createOrderResponse>
|
13
|
+
</S:Body>
|
14
|
+
</S:Envelope>
|
File without changes
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:getOrderStatusResponse xmlns:ns2="http://dpd.ru/ws/order2/2012-04-04">
|
5
|
+
<return>
|
6
|
+
<orderNumberInternal>1234567</orderNumberInternal>
|
7
|
+
<status>OrderError</status>
|
8
|
+
<errorMessage>2884657523 Нет разрешения на загрузку посылок!</errorMessage>
|
9
|
+
</return>
|
10
|
+
</ns2:getOrderStatusResponse>
|
11
|
+
</S:Body>
|
12
|
+
</S:Envelope>
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version = "1.0" encoding = "UTF-8" ?>
|
2
|
+
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<S:Body>
|
4
|
+
<ns2:updateAddressResponse xmlns:ns2="http://dpd.ru/ws/order2/2012-04-04">
|
5
|
+
<return>
|
6
|
+
<code>78</code>
|
7
|
+
<status>OK</status>
|
8
|
+
</return>
|
9
|
+
</ns2:updateAddressResponse>
|
10
|
+
</S:Body>
|
11
|
+
</S:Envelope>
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe DpdApi::Calculator do
|
4
|
+
include Savon::SpecHelper
|
5
|
+
before(:all) { savon.mock! }
|
6
|
+
after(:all) { savon.unmock! }
|
7
|
+
|
8
|
+
let(:auth) do
|
9
|
+
{ request: {
|
10
|
+
auth: {
|
11
|
+
client_number: "234",
|
12
|
+
client_key: "123"
|
13
|
+
} } }
|
14
|
+
end
|
15
|
+
let(:message) { auth.clone.deep_merge!({ request: params }) }
|
16
|
+
|
17
|
+
context ".service_cost" do
|
18
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/calculator/service_cost.xml") }
|
19
|
+
let(:params) do
|
20
|
+
{ pickup: { city_id: 195851995 },
|
21
|
+
delivery: { city_id: 48951627 },
|
22
|
+
self_pickup: false,
|
23
|
+
self_delivery: false,
|
24
|
+
weight: 1, }
|
25
|
+
end
|
26
|
+
|
27
|
+
it "is success" do
|
28
|
+
savon.expects(:get_service_cost2).with(message: message).returns(fixture)
|
29
|
+
|
30
|
+
response = described_class.service_cost(params)
|
31
|
+
expect(response.first).to have_key(:service_code) # 'TEN'
|
32
|
+
expect(response.first).to have_key(:service_name) # 'DPD 10:00'
|
33
|
+
expect(response.first).to have_key(:cost) # '551.65'
|
34
|
+
expect(response.first).to have_key(:days) # '4'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context ".serivce_cost" do
|
39
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/calculator/service_cost_fault.xml") }
|
40
|
+
let(:params) do
|
41
|
+
{ pickup: { city_id: '0' },
|
42
|
+
delivery: { city_id: '0' },
|
43
|
+
self_pickup: false,
|
44
|
+
self_delivery: false,
|
45
|
+
weight: 1, }
|
46
|
+
end
|
47
|
+
|
48
|
+
it "is fault" do
|
49
|
+
savon.expects(:get_service_cost2).with(message: message).returns(fixture)
|
50
|
+
|
51
|
+
response = described_class.service_cost(params)
|
52
|
+
expect(response).to have_key(:errors)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context ".service_cost_by_parcels" do
|
57
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/calculator/service_cost_by_parcels.xml") }
|
58
|
+
let(:params) do
|
59
|
+
{ pickup: { city_id: 195851995 },
|
60
|
+
delivery: { city_id: 48951627 },
|
61
|
+
self_pickup: true,
|
62
|
+
self_delivery: true,
|
63
|
+
parcel: {
|
64
|
+
weight: 0.5,
|
65
|
+
length: 0.5,
|
66
|
+
width: 0.5,
|
67
|
+
height: 0.5,
|
68
|
+
},
|
69
|
+
parcel: {
|
70
|
+
weight: 1,
|
71
|
+
length: 1,
|
72
|
+
width: 1,
|
73
|
+
height: 1,
|
74
|
+
} }
|
75
|
+
end
|
76
|
+
|
77
|
+
it "is success" do
|
78
|
+
savon.expects(:get_service_cost_by_parcels2).with(message: message).returns(fixture)
|
79
|
+
|
80
|
+
response = described_class.service_cost_by_parcels(params)
|
81
|
+
expect(response.first).to have_key(:service_code)
|
82
|
+
expect(response.first).to have_key(:service_name)
|
83
|
+
expect(response.first).to have_key(:cost)
|
84
|
+
expect(response.first).to have_key(:days)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context ".service_cost_by_parcels" do
|
89
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/calculator/service_cost_by_parcels_fault.xml") }
|
90
|
+
let(:params) { { pickup: { city_id: 0 } } }
|
91
|
+
|
92
|
+
it "is fails" do
|
93
|
+
savon.expects(:get_service_cost_by_parcels2).with(message: message).returns(fixture)
|
94
|
+
|
95
|
+
response = described_class.service_cost_by_parcels(params)
|
96
|
+
expect(response).to have_key(:errors)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DpdApi do
|
4
|
+
let(:client_key) { '123' }
|
5
|
+
let(:client_number) { '234' }
|
6
|
+
let(:base_url) { 'http://wstest.dpd.ru' }
|
7
|
+
let(:auth_params) do
|
8
|
+
{
|
9
|
+
auth: {
|
10
|
+
client_number: client_number,
|
11
|
+
client_key: client_key
|
12
|
+
}
|
13
|
+
}
|
14
|
+
end
|
15
|
+
let(:configuration) { described_class.configuration }
|
16
|
+
|
17
|
+
it ".configuration" do
|
18
|
+
expect(configuration.client_key).to eq client_key
|
19
|
+
expect(configuration.client_number).to eq client_number
|
20
|
+
expect(configuration.base_url).to eq base_url
|
21
|
+
expect(configuration.auth_params).to eq auth_params
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe DpdApi::Geography do
|
4
|
+
include Savon::SpecHelper
|
5
|
+
before(:all) { savon.mock! }
|
6
|
+
after(:all) { savon.unmock! }
|
7
|
+
|
8
|
+
let(:auth) do
|
9
|
+
{ request: {
|
10
|
+
auth: {
|
11
|
+
client_number: "234",
|
12
|
+
client_key: "123"
|
13
|
+
} } }
|
14
|
+
end
|
15
|
+
let(:message) { auth }
|
16
|
+
|
17
|
+
context ".cities_cash_pay" do
|
18
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/geography/cities_cash_pay.xml") }
|
19
|
+
|
20
|
+
it "is success" do
|
21
|
+
savon.expects(:get_cities_cash_pay).with(message: message).returns(fixture)
|
22
|
+
|
23
|
+
response = described_class.cities_cash_pay
|
24
|
+
expect(response.first).to have_key(:city_id)
|
25
|
+
expect(response.first).to have_key(:country_code)
|
26
|
+
expect(response.first).to have_key(:region_code)
|
27
|
+
expect(response.first).to have_key(:region_name)
|
28
|
+
expect(response.first).to have_key(:city_name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context ".terminals_self_delivery" do
|
33
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/geography/terminals_self_delivery.xml") }
|
34
|
+
|
35
|
+
it "is success" do
|
36
|
+
savon.expects(:get_terminals_self_delivery2).with(message: message).returns(fixture)
|
37
|
+
|
38
|
+
response = described_class.terminals_self_delivery
|
39
|
+
expect(response.first).to have_key(:terminal)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context ".parcel_shops" do
|
44
|
+
let(:fixture) { File.read("spec/fixtures/dpd_api/geography/parcel_shops.xml") }
|
45
|
+
|
46
|
+
it "is success" do
|
47
|
+
savon.expects(:get_parcel_shops).with(message: message).returns(fixture)
|
48
|
+
|
49
|
+
response = described_class.parcel_shops
|
50
|
+
expect(response.first).to have_key(:parcel_shop)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|