big_machines 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,70 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soapenv:Body>
4
+ <bm:getUserInfoResponse xmlns:bm="urn:soap.bigmachines.com">
5
+ <bm:status>
6
+ <bm:success>true</bm:success>
7
+ <bm:message>Successfully processed API for newtempge at Tue Sep 09 12:04:05 CDT 2014</bm:message>
8
+ </bm:status>
9
+ <bm:userInfo>
10
+ <bm:company_name>newtempge</bm:company_name>
11
+ <bm:login>jheth</bm:login>
12
+ <bm:password/>
13
+ <bm:type>FullAccess</bm:type>
14
+ <bm:first_name>Joe</bm:first_name>
15
+ <bm:last_name>Heth</bm:last_name>
16
+ <bm:job_title/>
17
+ <bm:email>joe.heth@gettinderbox.com</bm:email>
18
+ <bm:phone/>
19
+ <bm:fax/>
20
+ <bm:bill_address_1/>
21
+ <bm:bill_address_2/>
22
+ <bm:bill_city/>
23
+ <bm:bill_state_province/>
24
+ <bm:bill_zip/>
25
+ <bm:bill_country/>
26
+ <bm:separate_ship_addr>true</bm:separate_ship_addr>
27
+ <bm:ship_address_1/>
28
+ <bm:ship_address_2/>
29
+ <bm:ship_city/>
30
+ <bm:ship_state_province/>
31
+ <bm:ship_zip/>
32
+ <bm:ship_country/>
33
+ <bm:notification_pref>
34
+ <bm:is_notify_email>true</bm:is_notify_email>
35
+ </bm:notification_pref>
36
+ <bm:bm_language>English</bm:bm_language>
37
+ <bm:currency_preference>USD</bm:currency_preference>
38
+ <bm:session_currency>USD</bm:session_currency>
39
+ <bm:bill_first_name/>
40
+ <bm:bill_last_name/>
41
+ <bm:bill_company/>
42
+ <bm:bill_company_2/>
43
+ <bm:bill_phone/>
44
+ <bm:bill_fax/>
45
+ <bm:bill_email/>
46
+ <bm:ship_first_name/>
47
+ <bm:ship_last_name/>
48
+ <bm:ship_company/>
49
+ <bm:ship_company_2/>
50
+ <bm:ship_phone/>
51
+ <bm:ship_fax/>
52
+ <bm:ship_email/>
53
+ <bm:bm_units>System Default</bm:bm_units>
54
+ <bm:date_format>MM/dd/yyyy h:mm a</bm:date_format>
55
+ <bm:time_zone>(GMT-5:00 GMT-4:00) US Eastern Time</bm:time_zone>
56
+ <bm:number_format>####.##</bm:number_format>
57
+ <bm:partner_login/>
58
+ <bm:partner_password/>
59
+ <bm:status>Active</bm:status>
60
+ <bm:super_user_access_perm>0</bm:super_user_access_perm>
61
+ <bm:unplugged_default_check_in>0</bm:unplugged_default_check_in>
62
+ <bm:enabled_for_sso>0</bm:enabled_for_sso>
63
+ <bm:external_sso_id/>
64
+ <bm:approval_delegate/>
65
+ <bm:mobile_enabled>0</bm:mobile_enabled>
66
+ <bm:web_services_only>0</bm:web_services_only>
67
+ </bm:userInfo>
68
+ </bm:getUserInfoResponse>
69
+ </soapenv:Body>
70
+ </soapenv:Envelope>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soapenv:Body>
4
+ <bm:loginResponse xmlns:bm="urn:soap.bigmachines.com">
5
+ <bm:status>
6
+ <bm:success>true</bm:success>
7
+ <bm:message>Successfully processed API for newtempge at Tue Sep 09 10:33:38 CDT 2014</bm:message>
8
+ </bm:status>
9
+ <bm:userInfo>
10
+ <bm:sessionId>E4A5CCEEA2A6746B4388F647149CD2FF</bm:sessionId>
11
+ </bm:userInfo>
12
+ </bm:loginResponse>
13
+ </soapenv:Body>
14
+ </soapenv:Envelope>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soapenv:Body>
4
+ <bm:logoutResponse xmlns:bm="urn:soap.bigmachines.com">
5
+ <bm:status>
6
+ <bm:success>true</bm:success>
7
+ <bm:message>Successfully processed API for newtempge at Tue Sep 09 12:27:26 CDT 2014</bm:message>
8
+ </bm:status>
9
+ </bm:logoutResponse>
10
+ </soapenv:Body>
11
+ </soapenv:Envelope>
@@ -0,0 +1,10 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
2
+ <soapenv:Body>
3
+ <bm:setSessionCurrencyResponse xmlns:bm="urn:soap.bigmachines.com">
4
+ <bm:status>
5
+ <bm:success>true</bm:success>
6
+ <bm:message>Successfully processed API for newtempge at Tue Sep 16 23:46:29 CDT 2014</bm:message>
7
+ </bm:status>
8
+ </bm:setSessionCurrencyResponse>
9
+ </soapenv:Body>
10
+ </soapenv:Envelope>
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+
3
+ describe BigMachines::Client do
4
+ let(:subject) { BigMachines::Client.new('newtempge', process_name: 'quotes_process_bmClone_16')}
5
+
6
+ let(:login_body) {
7
+ %Q{<targetNamespace:login>
8
+ <targetNamespace:userInfo>
9
+ <targetNamespace:username>jheth</targetNamespace:username>
10
+ <targetNamespace:password>changeme</targetNamespace:password>
11
+ </targetNamespace:userInfo>
12
+ </targetNamespace:login>}
13
+ }
14
+
15
+ describe "#operations" do
16
+ it "should return list of operations from the wsdl" do
17
+ subject.operations.should be_a(Array)
18
+ subject.operations.should include(:get_user_info, :login, :logout, :set_session_currency)
19
+ end
20
+ end
21
+
22
+ describe "#login" do
23
+ it "authenticates with username and password" do
24
+ stub = stub_login_request({with_body: login_body})
25
+ stub.to_return(:status => 200, :body => fixture("login_response"))
26
+
27
+ subject.login(username: 'jheth', password: 'changeme')
28
+ end
29
+ end
30
+
31
+ describe "#logout" do
32
+ it "logout current session" do
33
+ body = %Q{<targetNamespace:logout></targetNamespace:logout>}
34
+ stub = stub_api_request({with_body: body, fixture: 'logout_response'})
35
+
36
+ response = subject.logout
37
+ expect(response[:status][:success]).to eq(true)
38
+ end
39
+
40
+ end
41
+
42
+ describe "#get_user_info" do
43
+ it "retrieve user info" do
44
+ body = %Q{<targetNamespace:getUserInfo></targetNamespace:getUserInfo>}
45
+ stub = stub_api_request({with_body: body, fixture: 'get_user_info_response'})
46
+
47
+ response = subject.get_user_info
48
+ user_info = response[:user_info]
49
+ expect(user_info[:company_name]).to eq('newtempge')
50
+ expect(user_info[:first_name]).to eq('Joe')
51
+ expect(user_info[:last_name]).to eq('Heth')
52
+ end
53
+ end
54
+
55
+ describe "#set_session_currency" do
56
+ it "sets currency for existing session" do
57
+ body = %Q{<targetNamespace:setSessionCurrency><targetNamespace:sessionCurrency>USD</targetNamespace:sessionCurrency></targetNamespace:setSessionCurrency>}
58
+ stub = stub_api_request({with_body: body, fixture: 'set_session_currency_response'})
59
+
60
+ response = subject.set_session_currency('USD')
61
+ expect(response[:status][:success]).to eq(true)
62
+ end
63
+ end
64
+
65
+ context "Commerce API" do
66
+ describe "getTransaction" do
67
+ it "returns transaction with specific attributes" do
68
+
69
+ body = %Q{
70
+ <bm:getTransaction>
71
+ <bm:transaction>
72
+ <bm:id>26539349</bm:id>
73
+ <bm:return_specific_attributes>
74
+ <bm:documents>
75
+ <bm:document>
76
+ <bm:var_name>quote_process</bm:var_name>
77
+ </bm:document>
78
+ </bm:documents>
79
+ </bm:return_specific_attributes>
80
+ </bm:transaction>
81
+ </bm:getTransaction>
82
+ }.gsub(/^\s+/, '').gsub(/[\n]/, '').gsub("bm:", "targetNamespace:")
83
+
84
+ stub = stub_commerce_request({with_body: body, fixture: 'get_transaction_response'})
85
+
86
+ transaction = subject.get_transaction(26539349)
87
+ expect(transaction).to be_a(BigMachines::Transaction)
88
+
89
+ expect(transaction.id).to eq('26539349')
90
+ expect(transaction.language_pref).to eq('English')
91
+
92
+ quote_process = transaction.quote
93
+ expect(quote_process).to be_a(Hash)
94
+
95
+ quote_line_items = transaction.quote_line_items
96
+ expect(quote_line_items).to be_a(Array)
97
+
98
+ expect(quote_line_items.length).to eq(109)
99
+ expect(quote_line_items.first[:_model_id]).to eq("17400975")
100
+ end
101
+ end
102
+ end
103
+
104
+ end
@@ -0,0 +1,21 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter "/vendor/"
4
+ end
5
+
6
+ require 'bundler/setup'
7
+ Bundler.require :default, :test
8
+
9
+ require 'webmock/rspec'
10
+
11
+ WebMock.disable_net_connect!
12
+
13
+ RSpec.configure do |config|
14
+ config.order = 'random'
15
+ config.filter_run :focus => true
16
+ config.run_all_when_everything_filtered = true
17
+ end
18
+
19
+ # Requires supporting ruby files with custom matchers and macros, etc,
20
+ # in spec/support/ and its subdirectories.
21
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
@@ -0,0 +1,75 @@
1
+ module FixtureHelpers
2
+ module InstanceMethods
3
+
4
+ def stub_commerce_request(options={})
5
+ options = options.merge({headers: {service: :commerce}})
6
+ stub_api_request(options)
7
+ end
8
+
9
+ def stub_security_request(options={})
10
+ options = options.merge({headers: {service: :security}})
11
+ stub_api_request(options)
12
+ end
13
+
14
+ def stub_api_request(options={})
15
+ options = {
16
+ :method => :post,
17
+ :status => 200,
18
+ }.merge(options)
19
+
20
+ instance_url = "https://newtempge.bigmachines.com/v1_0/receiver"
21
+ stub = stub_request(options[:method], instance_url)
22
+ stub = stub.with(:body => soap_envelope(options[:headers], options[:with_body]))
23
+ stub = stub.to_return(:status => options[:status], :body => fixture(options[:fixture]), :headers => { 'Content-Type' => 'text/xml;charset=UTF-8'}) if options[:fixture]
24
+ stub
25
+ end
26
+
27
+ def stub_login_request(options={})
28
+ server_url = "https://newtempge.bigmachines.com/v1_0/receiver"
29
+ stub = stub_request(:post, server_url)
30
+ stub = stub.with(:body => soap_envelope(options[:headers], options[:with_body]))
31
+ stub
32
+ end
33
+
34
+ def fixture(f)
35
+ File.read(File.expand_path("../../fixtures/#{f}.xml", __FILE__))
36
+ end
37
+
38
+ def soap_envelope(headers, body)
39
+ %Q{
40
+ <?xml version="1.0" encoding="UTF-8"?>
41
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:targetNamespace="urn:soap.bigmachines.com" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
42
+ #{soap_headers(headers)}
43
+ <env:Body>
44
+ #{body}
45
+ </env:Body>
46
+ </env:Envelope>
47
+ }.gsub(/[\n\t]/, '')
48
+ end
49
+
50
+ def soap_headers(params={})
51
+ service = params.is_a?(Hash) ? params[:service] : :security
52
+
53
+ if service == :security
54
+ category = "Security"
55
+ schema = "https://newtempge.bigmachines.com/bmfsweb/newtempge/schema/v1_0/security/Security.xsd"
56
+ else
57
+ category = "Commerce"
58
+ schema = "https://newtempge.bigmachines.com/bmfsweb/newtempge/schema/v1_0/commerce/quotes_process_bmClone_16.xsd"
59
+ end
60
+
61
+ %Q{<env:Header>
62
+ <bm:category xmlns:bm="urn:soap.bigmachines.com">#{category}</bm:category>
63
+ <bm:xsdInfo xmlns:bm="urn:soap.bigmachines.com">
64
+ <bm:schemaLocation>#{schema}</bm:schemaLocation>
65
+ </bm:xsdInfo>
66
+ </env:Header>}
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
73
+ RSpec.configure do |config|
74
+ config.include FixtureHelpers::InstanceMethods
75
+ end
metadata ADDED
@@ -0,0 +1,183 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: big_machines
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Joe Heth
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: savon
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 2.3.0
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 2.3.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.3.0
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 2.3.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '1.5'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '1.5'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 2.14.0
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: 2.14.0
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.14.0
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 2.14.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: webmock
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.13.0
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: 1.13.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: 1.13.0
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: 1.13.0
101
+ - !ruby/object:Gem::Dependency
102
+ name: simplecov
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: 0.7.1
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.7.1
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.7.1
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: 0.7.1
121
+ description: BigMachine's SOAP API Implementation
122
+ email:
123
+ - joeheth@gmail.com
124
+ executables: []
125
+ extensions: []
126
+ extra_rdoc_files: []
127
+ files:
128
+ - .gitignore
129
+ - .travis.yml
130
+ - Gemfile
131
+ - LICENSE.txt
132
+ - README.md
133
+ - Rakefile
134
+ - big_machines.gemspec
135
+ - lib/big_machines.rb
136
+ - lib/big_machines/client.rb
137
+ - lib/big_machines/transaction.rb
138
+ - lib/big_machines/version.rb
139
+ - resources/commerce.wsdl.xml
140
+ - resources/security.wsdl.xml
141
+ - spec/fixtures/get_transaction_response.xml
142
+ - spec/fixtures/get_transaction_response_full.xml
143
+ - spec/fixtures/get_user_info_response.xml
144
+ - spec/fixtures/login_response.xml
145
+ - spec/fixtures/logout_response.xml
146
+ - spec/fixtures/set_session_currency_response.xml
147
+ - spec/lib/client_spec.rb
148
+ - spec/spec_helper.rb
149
+ - spec/support/fixture_helpers.rb
150
+ homepage: https://github.com/TinderBox/big_machines
151
+ licenses:
152
+ - MIT
153
+ metadata: {}
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubyforge_project:
170
+ rubygems_version: 2.2.2
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: Communicate with BigMachine's SOAP API
174
+ test_files:
175
+ - spec/fixtures/get_transaction_response.xml
176
+ - spec/fixtures/get_transaction_response_full.xml
177
+ - spec/fixtures/get_user_info_response.xml
178
+ - spec/fixtures/login_response.xml
179
+ - spec/fixtures/logout_response.xml
180
+ - spec/fixtures/set_session_currency_response.xml
181
+ - spec/lib/client_spec.rb
182
+ - spec/spec_helper.rb
183
+ - spec/support/fixture_helpers.rb