purolator-web-services 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module PurolatorWebServices
2
+ VERSION = "3.0.0"
3
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'purolator_web_services/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "purolator-web-services"
8
+ spec.version = PurolatorWebServices::VERSION
9
+ spec.authors = ["Brian Abreu"]
10
+ spec.email = ["brian@nuts.com"]
11
+ spec.description = "Provies an interface to the Purolator web services API"
12
+ spec.summary = "Interfaces with the Purolator SOAP API"
13
+ spec.homepage = "https://github.com/brewski/purolator-web-services"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "soap4r-ruby1.9"
22
+ spec.required_ruby_version = '>= 2.0.0'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rake"
26
+ end
@@ -0,0 +1,21 @@
1
+ task :generate_definitions do
2
+ require 'wsdl/soap/wsdl2ruby'
3
+
4
+ require 'fileutils'
5
+
6
+ module_path = File.join(%w(lib purolator_web_services soap))
7
+
8
+ Dir.glob(File.expand_path("../wsdl/*.wsdl", __FILE__)).each do |wsdl_file|
9
+ worker = WSDL::SOAP::WSDL2Ruby.new
10
+ worker.basedir = FileUtils.mkdir_p(File.join(module_path)).first
11
+ worker.location = File.new(wsdl_file).path
12
+ worker.logger.level = Logger::WARN
13
+ worker.opt.update(
14
+ "module_path" => "PurolatorWebServices::Soap",
15
+ "mapping_registry" => nil,
16
+ "driver" => nil,
17
+ "classdef" => nil
18
+ )
19
+ worker.run
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ namespace :purolator_web_services do
2
+ task :test do
3
+ Dir.glob(File.expand_path("../../test/*.rb", __FILE__)).each { |file| require file }
4
+ end
5
+ end
@@ -0,0 +1,150 @@
1
+ require 'minitest/autorun'
2
+ require 'purolator_web_services'
3
+ require 'purolator_web_services/soap'
4
+
5
+ require 'date'
6
+ require 'securerandom'
7
+
8
+ class IntegrationTest < MiniTest::Unit::TestCase
9
+ include PurolatorWebServices::Soap
10
+
11
+ def setup
12
+ username, password, client_id = %w(USERNAME PASSWORD CLIENT_ID).map(&ENV.method(:[]))
13
+ unless (username && password && client_id)
14
+ $stderr.puts "missing environment variable USERNAME" unless (username)
15
+ $stderr.puts "missing environment variable PASSWORD" unless (password)
16
+ $stderr.puts "missing environment variable CLIENT_ID" unless (client_id)
17
+ exit
18
+ end
19
+
20
+ @credentials = CredentialInfo.new(username, password, client_id)
21
+ @api = PurolatorWebServices::Api.new(:test)
22
+ end
23
+
24
+ def test_add_order_request
25
+ add_order = AddOrder.new(order_request([ 10.5, 1.0 ]))
26
+ add_order_response = @api.addOrder(add_order)
27
+ assert_equal(0, add_order_response.status)
28
+ assert_equal(2, add_order_response.packages.size)
29
+ ensure
30
+ handle_service_exceptions
31
+ end
32
+
33
+ def test_closeout_request
34
+ add_order = AddOrder.new(order_request([ 10.0, 15.0, 12 ]))
35
+ add_order_response = @api.addOrder(add_order)
36
+ assert_equal(0, add_order_response.status)
37
+
38
+ closeout = Closeout.new(
39
+ CloseoutRequest.new.tap do |closeout_req|
40
+ closeout_req.credentials = @credentials
41
+ closeout_req.shipDate = Date.today
42
+ closeout_req.packIDType = "Pin"
43
+ closeout_req.skidCount = 1
44
+ closeout_req.packageIDs = add_order_response.packages.map(&:trackingNumber)
45
+ end
46
+ )
47
+ closeout_response = @api.closeout(closeout)
48
+ assert_equal(0, closeout_response.status)
49
+ ensure
50
+ handle_service_exceptions
51
+ end
52
+
53
+ def test_void_request
54
+ add_order_a = AddOrder.new(order_request([ 15, 12, 22, 13 ]))
55
+ add_order_b = AddOrder.new(order_request([ 15, 12 ]))
56
+
57
+ assert_equal(0, @api.addOrder(add_order_a).status)
58
+ assert_equal(0, @api.addOrder(add_order_b).status)
59
+
60
+ shipment_numbers = [ add_order_a.request.orderNumber, add_order_b.request.orderNumber ]
61
+ void_orders = VoidOrders.new(
62
+ OrderListRequest.new.tap do |order_list|
63
+ order_list.credentials = @credentials
64
+ order_list.orderNumbers = shipment_numbers
65
+ end
66
+ )
67
+ void_orders_response = @api.voidOrders(void_orders)
68
+ assert_equal(0, void_orders_response.status)
69
+ ensure
70
+ handle_service_exceptions
71
+ end
72
+
73
+ def test_rate_request
74
+ get_rates = GetRates.new(order_request([ 10.0, 15.0, 12.5 ]))
75
+ get_rates_response = @api.getRates(get_rates)
76
+ assert_equal(0, get_rates_response.status)
77
+ ensure
78
+ handle_service_exceptions
79
+ end
80
+
81
+ private
82
+ def handle_service_exceptions
83
+ if ($!.is_a?(PurolatorWebServices::Api::ServiceException))
84
+ flunk("error creating shipment: #{$!.message}")
85
+ end
86
+ end
87
+
88
+ def order_request(package_weights)
89
+ from_address = Address.new
90
+ from_address.name = "Joe Shmoe"
91
+ from_address.add1 = "123 4th St."
92
+ from_address.city = "San Luis Obispo"
93
+ from_address.stateProv = "CA"
94
+ from_address.postalCode = "93401"
95
+ from_address.country = "US"
96
+ from_address.phone = "(123) 456 789"
97
+ from_address.email = "joe@shmoe.com"
98
+
99
+ to_address = Address.new
100
+ to_address.name = "Test Customer Name"
101
+ to_address.add1 = "560 Kings Road"
102
+ to_address.city = "Sydney"
103
+ to_address.stateProv = "NS"
104
+ to_address.postalCode = "B1S1B8"
105
+ to_address.country = "CA"
106
+
107
+ packages = package_weights.map do |weight|
108
+ RequestPackage.new.tap do |package|
109
+ package.packageID = SecureRandom.uuid
110
+ package.weightUOM = "LB"
111
+ package.weight = weight
112
+ package.dimensionUOM = "IN"
113
+ package.dimL = nil
114
+ package.dimW = nil
115
+ package.dimH = nil
116
+ end
117
+ end
118
+
119
+ items = [
120
+ RequestItem.new.tap do |item|
121
+ item.sKU = "SK401232"
122
+ item.customsDesc = "Roasted Nuts"
123
+ item.quantity = 11
124
+ item.totalValue = "98.99"
125
+ item.currency = "USD"
126
+ item.countryOfOrigin = "VN"
127
+ item.hSCode = "2008199020"
128
+ item.nAFTAEligible = false
129
+ item.fDAFood = false
130
+ item.textile = false
131
+ end
132
+ ]
133
+
134
+ request = OrderRequestV3.new
135
+ request.credentials = @credentials
136
+ request.orderNumber = SecureRandom.uuid
137
+ request.shipDate = Date.today
138
+ request.shipMethod = "Ground"
139
+ request.billingOption = "Prepaid"
140
+ request.labelType = "ZPL"
141
+ request.shipFromAddress = from_address
142
+ request.shipToAddress = to_address
143
+ request.declaredValue = "98.99"
144
+ request.currency = "USD"
145
+ request.packages = packages
146
+ request.items = items
147
+
148
+ request
149
+ end
150
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: purolator-web-services
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brian Abreu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: soap4r-ruby1.9
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Provies an interface to the Purolator web services API
56
+ email:
57
+ - brian@nuts.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - lib/purolator_web_services.rb
68
+ - lib/purolator_web_services/api.rb
69
+ - lib/purolator_web_services/railtie.rb
70
+ - lib/purolator_web_services/soap.rb
71
+ - lib/purolator_web_services/soap/default.rb
72
+ - lib/purolator_web_services/soap/defaultDriver.rb
73
+ - lib/purolator_web_services/soap/defaultMappingRegistry.rb
74
+ - lib/purolator_web_services/version.rb
75
+ - purolator-web-services.gemspec
76
+ - tasks/generate_definitions.rake
77
+ - tasks/test.rake
78
+ - test/integration_test.rb
79
+ homepage: https://github.com/brewski/purolator-web-services
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 2.0.0
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.2.0
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: Interfaces with the Purolator SOAP API
103
+ test_files:
104
+ - test/integration_test.rb