axiomus_api 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.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +10 -0
  6. data/Gemfile +10 -0
  7. data/Gemfile.lock +67 -0
  8. data/LICENSE +21 -0
  9. data/README.md +119 -0
  10. data/axiomus_api.gemspec +19 -0
  11. data/lib/axiomus_api/actions.rb +32 -0
  12. data/lib/axiomus_api/address/dpd_address.rb +8 -0
  13. data/lib/axiomus_api/address/ems_address.rb +8 -0
  14. data/lib/axiomus_api/address/post_address.rb +7 -0
  15. data/lib/axiomus_api/address/region_courier_address.rb +8 -0
  16. data/lib/axiomus_api/address/region_pickup_address.rb +7 -0
  17. data/lib/axiomus_api/base.rb +69 -0
  18. data/lib/axiomus_api/base_auth.rb +9 -0
  19. data/lib/axiomus_api/errors.rb +14 -0
  20. data/lib/axiomus_api/item/export_item.rb +5 -0
  21. data/lib/axiomus_api/item/item.rb +7 -0
  22. data/lib/axiomus_api/order/base_order.rb +53 -0
  23. data/lib/axiomus_api/order/carry_order.rb +7 -0
  24. data/lib/axiomus_api/order/dpd_order.rb +11 -0
  25. data/lib/axiomus_api/order/ems_order.rb +12 -0
  26. data/lib/axiomus_api/order/export_order.rb +14 -0
  27. data/lib/axiomus_api/order/order.rb +8 -0
  28. data/lib/axiomus_api/order/post_order.rb +12 -0
  29. data/lib/axiomus_api/order/region_courier_order.rb +8 -0
  30. data/lib/axiomus_api/order/region_order.rb +8 -0
  31. data/lib/axiomus_api/order/region_pickup_order.rb +8 -0
  32. data/lib/axiomus_api/order/self_export_order.rb +15 -0
  33. data/lib/axiomus_api/request/order_request.rb +17 -0
  34. data/lib/axiomus_api/request/request.rb +10 -0
  35. data/lib/axiomus_api/request/status_request.rb +5 -0
  36. data/lib/axiomus_api/response/order_response.rb +29 -0
  37. data/lib/axiomus_api/response/regions_response.rb +54 -0
  38. data/lib/axiomus_api/response/status_response.rb +84 -0
  39. data/lib/axiomus_api/response_codes.rb +24 -0
  40. data/lib/axiomus_api/serializable.rb +55 -0
  41. data/lib/axiomus_api/services/export_services.rb +7 -0
  42. data/lib/axiomus_api/services/post_services.rb +7 -0
  43. data/lib/axiomus_api/services/region_services.rb +7 -0
  44. data/lib/axiomus_api/services/services.rb +7 -0
  45. data/lib/axiomus_api/session.rb +109 -0
  46. data/lib/axiomus_api/validated.rb +32 -0
  47. data/lib/axiomus_api/version.rb +3 -0
  48. data/lib/axiomus_api.rb +34 -0
  49. data/spec/factories.rb +200 -0
  50. data/spec/integration/axiomus_api/session_spec.rb +130 -0
  51. data/spec/lib/axiomus_api/base_order_spec.rb +55 -0
  52. data/spec/lib/axiomus_api/session_spec.rb +47 -0
  53. data/spec/lib/axiomus_api_spec.rb +5 -0
  54. data/spec/spec_helper.rb +19 -0
  55. data/spec/support/dummy_data.rb +61 -0
  56. data/spec/support/http_mocking.rb +21 -0
  57. metadata +113 -0
@@ -0,0 +1,130 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe 'AxiomusApi::Sesion' do
4
+ before(:all) do
5
+ AxiomusApi.logger.level = Logger::INFO
6
+ @session = AxiomusApi.test_session
7
+ end
8
+
9
+ describe '#get_regions' do
10
+ it 'should handle successfull request' do
11
+ z = @session.get_regions()
12
+ expect(z.regions.count > 0).to be_true
13
+ end
14
+ end
15
+
16
+ describe '#new, #update' do
17
+ it 'should create new order and update it' do
18
+ order = build(:order)
19
+ z = @session.new(order)
20
+ expect(z.code).to eq 0
21
+ okey = z.okey
22
+ order.okey = okey
23
+ z = @session.update(order)
24
+ expect(z.code).to eq 0
25
+ z = @session.status(okey)
26
+ end
27
+ end
28
+
29
+ describe '#new_carry, #update_carry' do
30
+ it 'should create new order and update it' do
31
+ carry_order = build(:carry_order)
32
+ z = @session.new_carry(carry_order)
33
+ expect(z.code).to eq 0
34
+ okey = z.okey
35
+ carry_order.okey = okey
36
+ z = @session.update_carry(carry_order)
37
+ expect(z.code).to eq 0
38
+ z = @session.status(okey)
39
+ end
40
+ end
41
+
42
+ describe '#new_export, #update_export' do
43
+ it 'should create new order and update it' do
44
+ export_order = build(:export_order)
45
+ z = @session.new_export(export_order)
46
+ expect(z.code).to eq 0
47
+ okey = z.okey
48
+ export_order.okey = okey
49
+ z = @session.update_export(export_order)
50
+ expect(z.code).to eq 0
51
+ z = @session.status(okey)
52
+ end
53
+ end
54
+
55
+ describe '#new_self_export, #update_self_export' do
56
+ it 'should create new order and update it' do
57
+ self_export_order = build(:self_export_order)
58
+ z = @session.new_self_export(self_export_order)
59
+ expect(z.code).to eq 0
60
+ okey = z.okey
61
+ self_export_order.okey = okey
62
+ z = @session.update_self_export(self_export_order)
63
+ expect(z.code).to eq 0
64
+ z = @session.status(okey)
65
+ end
66
+ end
67
+
68
+ describe '#new_post, #update_post' do
69
+ it 'should create new order and update it' do
70
+ post_order = build(:post_order)
71
+ z = @session.new_post(post_order)
72
+ expect(z.code).to eq 0
73
+ okey = z.okey
74
+ post_order.okey = okey
75
+ z = @session.update_post(post_order)
76
+ expect(z.code).to eq 0
77
+ z = @session.status(okey)
78
+ end
79
+ end
80
+
81
+ describe '#new_dpd, #update_dpd' do
82
+ it 'should create new order and update it' do
83
+ dpd_order = build(:dpd_order)
84
+ z = @session.new_dpd(dpd_order)
85
+ expect(z.code).to eq 0
86
+ okey = z.okey
87
+ dpd_order.okey = okey
88
+ z = @session.update_dpd(dpd_order)
89
+ expect(z.code).to eq 0
90
+ z = @session.status(okey)
91
+ end
92
+ end
93
+
94
+ describe '#new_ems, #update_ems' do
95
+ it 'should create new order and update it' do
96
+ ems_order = build(:ems_order)
97
+ z = @session.new_ems(ems_order)
98
+ expect(z.code).to eq 0
99
+ okey = z.okey
100
+ ems_order.okey = okey
101
+ z = @session.update_ems(ems_order)
102
+ expect(z.code).to eq 0
103
+ z = @session.status(okey)
104
+ end
105
+ end
106
+
107
+ describe '#new_region_courier, #update_region_courier' do
108
+ it 'should create new order and update it' do
109
+ region_courier_order = build(:region_courier_order)
110
+ z = @session.new_region_courier(region_courier_order)
111
+ expect(z.code).to eq 0
112
+ okey = z.okey
113
+ region_courier_order.okey = okey
114
+ expect{@session.update_region_courier(region_courier_order)}.to raise_error ::AxiomusApi::Errors::RequestError
115
+
116
+ end
117
+ end
118
+
119
+ describe '#new_region_pickup, #update_region_pickup' do
120
+ it 'should create new order and update it' do
121
+ region_pickup_order = build(:region_pickup_order)
122
+ z = @session.new_region_pickup(region_pickup_order)
123
+ expect(z.code).to eq 0
124
+ okey = z.okey
125
+ region_pickup_order.okey = okey
126
+ expect{@session.update_region_pickup(region_pickup_order)}.to raise_error ::AxiomusApi::Errors::RequestError
127
+ end
128
+ end
129
+
130
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe 'AxiomusApi::BaseOrder' do
4
+
5
+ it 'should build order by mode' do
6
+ ORDER_MODES.each do |mode|
7
+ order = AxiomusApi::BaseOrder.create_by_mode(mode)
8
+ end
9
+ end
10
+
11
+ it 'should create item' do
12
+ ORDER_MODES.each do |mode|
13
+ order = AxiomusApi::BaseOrder.create_by_mode(mode)
14
+ item = order.create_item
15
+
16
+ if [:new_export, :update_export].include?(mode)
17
+ expect(item.is_a?(AxiomusApi::ExportItem)).to be_true
18
+ else
19
+ expect(item.is_a?(AxiomusApi::Item)).to be_true
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ {
27
+ AxiomusApi::EmsOrder => AxiomusApi::EmsAddress,
28
+ AxiomusApi::PostOrder => AxiomusApi::PostAddress,
29
+ AxiomusApi::RegionCourierOrder => AxiomusApi::RegionCourierAddress,
30
+ AxiomusApi::RegionPickupOrder => AxiomusApi::RegionPickupAddress,
31
+ AxiomusApi::DpdOrder => AxiomusApi::DpdAddress
32
+ }.each do |c, a|
33
+ describe c.name do
34
+ it 'should have correct address type' do
35
+ expect(c.new.address).to be_an a
36
+ end
37
+ end
38
+ end
39
+
40
+ {
41
+ AxiomusApi::Order => AxiomusApi::Services,
42
+ AxiomusApi::EmsOrder => AxiomusApi::PostServices,
43
+ AxiomusApi::ExportOrder => AxiomusApi::ExportServices,
44
+ AxiomusApi::CarryOrder => AxiomusApi::Services,
45
+ AxiomusApi::PostOrder => AxiomusApi::PostServices,
46
+ AxiomusApi::RegionCourierOrder => AxiomusApi::RegionServices,
47
+ AxiomusApi::RegionPickupOrder => AxiomusApi::RegionServices,
48
+ AxiomusApi::DpdOrder => AxiomusApi::PostServices
49
+ }.each do |c, a|
50
+ describe c.name do
51
+ it 'should have correct services type' do
52
+ expect(c.new.services).to be_an a
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe 'AxiomusApi::Session' do
4
+ before(:all) do
5
+ AxiomusApi.logger.level = Logger::UNKNOWN
6
+
7
+ @session = AxiomusApi.test_session
8
+ end
9
+
10
+ ORDER_MODES.each do |method|
11
+ describe "##{method}" do
12
+ it 'should handle successful request' do
13
+ HttpMocking.enqueue_response(DummyData.order_success_response(method))
14
+ response = @session.send(method, build(:base_order))
15
+ expect(response.code).to eq 0
16
+ end
17
+
18
+ it 'should raise on error' do
19
+ HttpMocking.enqueue_response(DummyData.order_error_response(method))
20
+ expect{@session.send(method, build(:base_order))}.to raise_error(AxiomusApi::Errors::RequestError)
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '#get_regions' do
26
+ it 'should handle successfull request' do
27
+ HttpMocking.enqueue_response(DummyData::REGIONS_SUCCESS_RESPONSE)
28
+ z = @session.get_regions()
29
+ expect(z.regions.count).to eq 1
30
+ expect(z.regions.first.code).to eq '21'
31
+ end
32
+ end
33
+
34
+ describe '#status' do
35
+ it 'should handle successfull request' do
36
+ HttpMocking.enqueue_response(DummyData::STATUS_SUCCESS_RESPONSE)
37
+ z = @session.status('2e3023c3e78f4f0c8cbb81257743c2d7')
38
+ expect(z.order.id).to eq('1013')
39
+ expect(z.order.inner_id).to eq('16777')
40
+ expect(z.order.price).to eq(156.83)
41
+ expect(z.status.code).to eq(211)
42
+ expect(z.refused_items.count).to eq(1)
43
+ expect(z.packs.count).to eq(1)
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,5 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe 'AxiomusApi' do
4
+
5
+ end
@@ -0,0 +1,19 @@
1
+ require 'coveralls'
2
+ require 'codeclimate-test-reporter'
3
+ require 'factory_girl'
4
+
5
+ Coveralls.wear!
6
+ CodeClimate::TestReporter.start
7
+
8
+ RSpec.configure do |config|
9
+ config.include FactoryGirl::Syntax::Methods
10
+ end
11
+
12
+ ORDER_MODES = [:new, :update, :new_carry, :update_carry, :new_export, :update_export,
13
+ :new_self_export, :update_self_export, :new_post, :update_post, :new_dpd, :update_dpd, :new_ems, :update_ems,
14
+ :new_region_courier, :update_region_courier, :new_region_pickup, :update_region_pickup]
15
+
16
+ require_relative '../lib/axiomus_api.rb'
17
+ require_relative 'support/dummy_data.rb'
18
+ require_relative 'support/http_mocking.rb'
19
+ require_relative 'factories.rb'
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+
3
+ module DummyData
4
+
5
+ def self.order_success_response(mode = :new)
6
+ ORDER_SUCCESS_RESPONSE % {:mode => mode}
7
+ end
8
+
9
+ def self.order_error_response(mode = 'new', code = 1, description = 'Ошибка')
10
+ ORDER_ERROR_RESPONSE % {:mode => mode, :code => code, :description => description}
11
+ end
12
+
13
+ ORDER_SUCCESS_RESPONSE = <<-XML
14
+ <?xml version='1.0' standalone='yes'?>
15
+ <response>
16
+ <request>%{mode}</request>
17
+ <auth objectid="1234567">642d208495dtgu8906e7dff9f98764da</auth>
18
+ <status price="100.00" code="0">Запрос выполнен успешно</status>
19
+ </response>
20
+ XML
21
+
22
+ ORDER_ERROR_RESPONSE = <<-XML
23
+ <?xml version='1.0' standalone='yes'?>
24
+ <response>
25
+ <request>%{mode}</request>
26
+ <status code="%{code}">%{description}</status>
27
+ </response>
28
+ XML
29
+
30
+ REGIONS_SUCCESS_RESPONSE = <<-XML
31
+ <?xml version='1.0' standalone='yes'?>
32
+ <response>
33
+ <region region_code='21' name='Волшебная страна'>
34
+ <courier>
35
+ <city city_code='21'>King's Landing</city>
36
+ </courier>
37
+ <pickup>
38
+ <office office_code='44' city_code='21'>Office 2</office>
39
+ </pickup>
40
+ </region>
41
+ </response>
42
+ XML
43
+
44
+ STATUS_SUCCESS_RESPONSE = <<-XML
45
+ <?xml version="1.0" encoding="utf-8"?>
46
+ <response>
47
+ <request>status</request>
48
+ <order id="1013" inner_id="16777" price="156.83" />
49
+ <status code="211">расчет за доставку</status>
50
+ <refused_items>
51
+ <item name="mbon" quantity="2" price="34.4"/>
52
+ </refused_items>
53
+ <packs>
54
+ <pack number="32" places="1" status="1"/>
55
+ </packs>
56
+ <d_date>2011-03-17</d_date>
57
+ <poststatus tracking="32167" postprice="34.3"/>
58
+ </response>
59
+ XML
60
+
61
+ end
@@ -0,0 +1,21 @@
1
+ require 'net/http'
2
+
3
+ module HttpMocking
4
+
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
+
13
+ Net::HTTP.any_instance.stub(:request) do |req|
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])
17
+ response
18
+ end
19
+ end
20
+
21
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: axiomus_api
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Kinderly LTD
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ description: This gem provides a Ruby wrapper over Axiomus API.
28
+ email:
29
+ - nuinuhin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - ".rspec"
36
+ - ".ruby-version"
37
+ - ".travis.yml"
38
+ - Gemfile
39
+ - Gemfile.lock
40
+ - LICENSE
41
+ - README.md
42
+ - axiomus_api.gemspec
43
+ - lib/axiomus_api.rb
44
+ - lib/axiomus_api/actions.rb
45
+ - lib/axiomus_api/address/dpd_address.rb
46
+ - lib/axiomus_api/address/ems_address.rb
47
+ - lib/axiomus_api/address/post_address.rb
48
+ - lib/axiomus_api/address/region_courier_address.rb
49
+ - lib/axiomus_api/address/region_pickup_address.rb
50
+ - lib/axiomus_api/base.rb
51
+ - lib/axiomus_api/base_auth.rb
52
+ - lib/axiomus_api/errors.rb
53
+ - lib/axiomus_api/item/export_item.rb
54
+ - lib/axiomus_api/item/item.rb
55
+ - lib/axiomus_api/order/base_order.rb
56
+ - lib/axiomus_api/order/carry_order.rb
57
+ - lib/axiomus_api/order/dpd_order.rb
58
+ - lib/axiomus_api/order/ems_order.rb
59
+ - lib/axiomus_api/order/export_order.rb
60
+ - lib/axiomus_api/order/order.rb
61
+ - lib/axiomus_api/order/post_order.rb
62
+ - lib/axiomus_api/order/region_courier_order.rb
63
+ - lib/axiomus_api/order/region_order.rb
64
+ - lib/axiomus_api/order/region_pickup_order.rb
65
+ - lib/axiomus_api/order/self_export_order.rb
66
+ - lib/axiomus_api/request/order_request.rb
67
+ - lib/axiomus_api/request/request.rb
68
+ - lib/axiomus_api/request/status_request.rb
69
+ - lib/axiomus_api/response/order_response.rb
70
+ - lib/axiomus_api/response/regions_response.rb
71
+ - lib/axiomus_api/response/status_response.rb
72
+ - lib/axiomus_api/response_codes.rb
73
+ - lib/axiomus_api/serializable.rb
74
+ - lib/axiomus_api/services/export_services.rb
75
+ - lib/axiomus_api/services/post_services.rb
76
+ - lib/axiomus_api/services/region_services.rb
77
+ - lib/axiomus_api/services/services.rb
78
+ - lib/axiomus_api/session.rb
79
+ - lib/axiomus_api/validated.rb
80
+ - lib/axiomus_api/version.rb
81
+ - spec/factories.rb
82
+ - spec/integration/axiomus_api/session_spec.rb
83
+ - spec/lib/axiomus_api/base_order_spec.rb
84
+ - spec/lib/axiomus_api/session_spec.rb
85
+ - spec/lib/axiomus_api_spec.rb
86
+ - spec/spec_helper.rb
87
+ - spec/support/dummy_data.rb
88
+ - spec/support/http_mocking.rb
89
+ homepage: https://github.com/kinderly/axiomus_api
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.2.2
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: A wrapper for Axiomus API
113
+ test_files: []