quickbooks_web_connector 0.5.0 → 0.6.0
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/Rakefile +1 -1
- data/app/controllers/quickbooks_web_connector/qwc_controller.rb +10 -4
- data/app/views/quickbooks_web_connector/qwc/qwc.xml.builder +4 -4
- data/config/routes.rb +1 -1
- data/lib/quickbooks_web_connector.rb +1 -0
- data/lib/quickbooks_web_connector/config.rb +30 -13
- data/lib/quickbooks_web_connector/soap_wrapper/defaultServant.rb +5 -2
- data/lib/quickbooks_web_connector/user.rb +24 -0
- data/lib/quickbooks_web_connector/version.rb +1 -1
- data/spec/config/config_spec.rb +32 -85
- data/spec/controllers/quickbooks_web_connector/qwc_controller_spec.rb +12 -14
- data/spec/controllers/quickbooks_web_connector/soap_controller_spec.rb +5 -17
- data/spec/dummy/log/test.log +5687 -0
- data/spec/lib/quickbooks_web_connector/failure_spec.rb +4 -4
- data/spec/lib/quickbooks_web_connector/job_spec.rb +2 -2
- data/spec/lib/quickbooks_web_connector/soap_wrapper/defaultServant_spec.rb +25 -46
- data/spec/lib/quickbooks_web_connector/user_spec.rb +29 -0
- data/spec/routing/quickbooks_web_connector_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/support/redis/stdout +53154 -0
- data/spec/views/quickbooks_web_connector/qwc/qwc.xml.builder_spec.rb +10 -11
- metadata +31 -40
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 571ae04bbdd6cefeb9f277118239b06bf98dc292
|
4
|
+
data.tar.gz: 2a121acd4c1450fa7626b00c8fb4555a8d2c0af2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 26b37af64bafefbcf016367e66cd13b0db7aaf9192dff2d0b6e0ab70f48e30fe15c843c4fa2503c1cfbd2dc4a94cde2ae2b72c9d29a4022a36f424655c8f58b5
|
7
|
+
data.tar.gz: 5a5045052b55c5fd906afd4a9cb4b5db28d2e54c9351d5638560bc4f6a6490b139d05add8f4ad02b61c6ef8891cb723abaebc7b868d65dffdeeb9029151ba717
|
data/Rakefile
CHANGED
@@ -2,10 +2,16 @@ module QuickbooksWebConnector
|
|
2
2
|
class QwcController < QuickbooksWebConnectorController
|
3
3
|
|
4
4
|
def download
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
@user = QuickbooksWebConnector.config.users[params[:username]]
|
6
|
+
|
7
|
+
if !@user
|
8
|
+
render nothing: true, status: :not_found
|
9
|
+
else
|
10
|
+
send_data render_to_string(:qwc),
|
11
|
+
disposition: 'attachment',
|
12
|
+
filename: "#{@user.username}.qwc",
|
13
|
+
type: :xml
|
14
|
+
end
|
9
15
|
end
|
10
16
|
|
11
17
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
xml.instruct!
|
2
2
|
xml.QBWCXML do
|
3
|
-
xml.AppName QuickbooksWebConnector.config.app_name
|
3
|
+
xml.AppName "#{QuickbooksWebConnector.config.app_name} (#{@user.username})"
|
4
4
|
xml.AppID
|
5
5
|
xml.AppURL quickbooks_web_connector.soap_url
|
6
6
|
xml.AppDescription QuickbooksWebConnector.config.app_description
|
7
7
|
xml.AppSupport main_app.root_url
|
8
|
-
xml.UserName
|
9
|
-
xml.OwnerID
|
10
|
-
xml.FileID
|
8
|
+
xml.UserName @user.username
|
9
|
+
xml.OwnerID "{#{@user.owner_id}}"
|
10
|
+
xml.FileID "{#{@user.file_id}}"
|
11
11
|
xml.QBType 'QBFS'
|
12
12
|
end
|
data/config/routes.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
QuickbooksWebConnector::Engine.routes.draw do
|
2
2
|
|
3
|
-
get 'qwc' => 'qwc#download', defaults: { format: :xml }
|
3
|
+
get 'qwc/:username' => 'qwc#download', as: :qwc, defaults: { format: :xml }
|
4
4
|
post 'soap' => 'soap#endpoint'
|
5
5
|
|
6
6
|
# QWC will perform a GET request to verify the SSL certificate
|
@@ -6,6 +6,7 @@ require 'quickbooks_web_connector/config'
|
|
6
6
|
require 'quickbooks_web_connector/failure'
|
7
7
|
require 'quickbooks_web_connector/job'
|
8
8
|
require 'quickbooks_web_connector/json_coder'
|
9
|
+
require 'quickbooks_web_connector/user'
|
9
10
|
|
10
11
|
require 'quickbooks_web_connector/soap_wrapper/default'
|
11
12
|
require 'quickbooks_web_connector/soap_wrapper/defaultMappingRegistry'
|
@@ -14,32 +14,49 @@ module QuickbooksWebConnector
|
|
14
14
|
@config
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.reset_configuration!
|
18
|
+
@config = QuickbooksWebConnector::Configuration.new
|
19
|
+
set_default_configuration
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.set_default_configuration
|
23
|
+
configure do |config|
|
24
|
+
config.server_version = '1.0.0'
|
25
|
+
config.minimum_web_connector_client_version = nil
|
26
|
+
|
27
|
+
config.parent_controller = 'ApplicationController'
|
28
|
+
|
29
|
+
config.app_name = 'My QBWC App'
|
30
|
+
config.app_description = 'My QBWC App Description'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
17
34
|
class Configuration
|
18
35
|
include ActiveSupport::Configurable
|
19
36
|
|
20
37
|
config_accessor :server_version
|
21
38
|
config_accessor :minimum_web_connector_client_version
|
22
|
-
config_accessor :username
|
23
|
-
config_accessor :password
|
24
|
-
config_accessor :company_file_path
|
25
39
|
|
26
40
|
config_accessor :parent_controller
|
27
41
|
|
28
42
|
config_accessor :app_name
|
29
43
|
config_accessor :app_description
|
30
|
-
end
|
31
44
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
config.username = 'web_connector'
|
36
|
-
config.password = 'secret'
|
37
|
-
config.company_file_path = ''
|
45
|
+
def initialize
|
46
|
+
config.users = {}
|
47
|
+
end
|
38
48
|
|
39
|
-
|
49
|
+
def users
|
50
|
+
config.users
|
51
|
+
end
|
40
52
|
|
41
|
-
|
42
|
-
|
53
|
+
def user(username, *args)
|
54
|
+
username = username.to_s
|
55
|
+
|
56
|
+
config.users[username] = User.new(username, *args)
|
57
|
+
end
|
43
58
|
end
|
44
59
|
|
60
|
+
set_default_configuration
|
61
|
+
|
45
62
|
end
|
@@ -45,12 +45,15 @@ module QuickbooksWebConnector
|
|
45
45
|
#
|
46
46
|
def authenticate(parameters)
|
47
47
|
token = SecureRandom.uuid
|
48
|
-
|
48
|
+
|
49
|
+
user = QuickbooksWebConnector.config.users[parameters.strUserName]
|
50
|
+
|
51
|
+
result = if user && user.valid_password?(parameters.strPassword)
|
49
52
|
if QuickbooksWebConnector.size > 0
|
50
53
|
# Store how many jobs are queued so we can track progress later
|
51
54
|
QuickbooksWebConnector.store_job_count_for_session
|
52
55
|
|
53
|
-
|
56
|
+
user.company_file_path
|
54
57
|
else
|
55
58
|
'none'
|
56
59
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module QuickbooksWebConnector
|
2
|
+
class User
|
3
|
+
|
4
|
+
attr_reader :username, :company_file_path, :owner_id, :file_id
|
5
|
+
|
6
|
+
def initialize(username, password, company_file_path, owner_id = nil, file_id = nil)
|
7
|
+
@username = username
|
8
|
+
@password = password
|
9
|
+
@company_file_path = company_file_path
|
10
|
+
|
11
|
+
@owner_id = owner_id || 'd69682e6-4436-44bc-bd19-d6bfbd11778d'
|
12
|
+
@file_id = file_id || '916222f3-c574-4c70-8c9d-e3cec2634e49'
|
13
|
+
end
|
14
|
+
|
15
|
+
def valid_password?(provided_password)
|
16
|
+
provided_password == password
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :password
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/spec/config/config_spec.rb
CHANGED
@@ -1,131 +1,78 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe QuickbooksWebConnector::Configuration do
|
4
|
-
subject { QuickbooksWebConnector.config }
|
4
|
+
subject(:configuration) { QuickbooksWebConnector.config }
|
5
5
|
|
6
6
|
describe 'server_version' do
|
7
|
-
|
8
|
-
|
9
|
-
its(:server_version) { should eq '1.0.0' }
|
7
|
+
it 'returns 1.0.0 by default' do
|
8
|
+
expect(configuration.server_version).to eq('1.0.0')
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
its(:server_version) { should eq '1.2.3' }
|
11
|
+
it 'allows the server_version to be configured' do
|
12
|
+
QuickbooksWebConnector.config.server_version = '1.2.3'
|
16
13
|
|
17
|
-
|
14
|
+
expect(configuration.server_version).to eq('1.2.3')
|
18
15
|
end
|
19
|
-
|
20
16
|
end
|
21
17
|
|
22
18
|
describe 'minimum_web_connector_client_version' do
|
23
|
-
|
24
|
-
|
25
|
-
its(:minimum_web_connector_client_version) { should be_nil }
|
19
|
+
it 'sets no minimum by default' do
|
20
|
+
expect(configuration.minimum_web_connector_client_version).to be_nil
|
26
21
|
end
|
27
22
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
its(:minimum_web_connector_client_version) { should eq '2.1.0.30' }
|
23
|
+
it 'allows the minimum_web_connector_client_version to be configured' do
|
24
|
+
QuickbooksWebConnector.config.minimum_web_connector_client_version = '2.1.0.30'
|
32
25
|
|
33
|
-
|
26
|
+
expect(configuration.minimum_web_connector_client_version).to eq('2.1.0.30')
|
34
27
|
end
|
35
|
-
|
36
28
|
end
|
37
29
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
its(:username) { should eq 'web_connector' }
|
30
|
+
describe 'user' do
|
31
|
+
it 'defaults to no users' do
|
32
|
+
expect(configuration.users).to be_empty
|
42
33
|
end
|
43
34
|
|
44
|
-
|
45
|
-
|
35
|
+
it 'adds a new user' do
|
36
|
+
configuration.user 'jane', 'secret', '/path/to/company.qbw'
|
46
37
|
|
47
|
-
|
48
|
-
|
49
|
-
after { QuickbooksWebConnector.configure { |c| c.username = 'web_connector' } }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'password' do
|
54
|
-
|
55
|
-
context 'by default' do
|
56
|
-
its(:password) { should eq 'secret' }
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'configured via a config block' do
|
60
|
-
before { QuickbooksWebConnector.configure { |c| c.password = 'quickbooks' } }
|
61
|
-
|
62
|
-
its(:password) { should eq 'quickbooks' }
|
63
|
-
|
64
|
-
after { QuickbooksWebConnector.configure { |c| c.password = 'secret' } }
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'company_file_path' do
|
69
|
-
|
70
|
-
context 'by default' do
|
71
|
-
its(:company_file_path) { should eq '' }
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'configured via a config block' do
|
75
|
-
before { QuickbooksWebConnector.configure { |c| c.company_file_path = '/path/to/company.qbw' } }
|
76
|
-
|
77
|
-
its(:company_file_path) { should eq '/path/to/company.qbw' }
|
78
|
-
|
79
|
-
after { QuickbooksWebConnector.configure { |c| c.company_file_path = '' } }
|
38
|
+
expect(configuration.users.size).to eq(1)
|
80
39
|
end
|
81
40
|
end
|
82
41
|
|
83
42
|
describe 'parent_controller' do
|
84
|
-
|
85
|
-
|
86
|
-
its(:parent_controller) { should eq 'ApplicationController' }
|
43
|
+
it 'uses ApplicationController by default' do
|
44
|
+
expect(configuration.parent_controller).to eq('ApplicationController')
|
87
45
|
end
|
88
46
|
|
89
|
-
|
90
|
-
|
47
|
+
it 'allows the parent_controller to be configured' do
|
48
|
+
QuickbooksWebConnector.config.parent_controller = 'MyController'
|
91
49
|
|
92
|
-
|
93
|
-
|
94
|
-
after { QuickbooksWebConnector.configure { |c| c.parent_controller = 'ApplicationController' } }
|
50
|
+
expect(configuration.parent_controller).to eq('MyController')
|
95
51
|
end
|
96
|
-
|
97
52
|
end
|
98
53
|
|
99
54
|
describe 'app_name' do
|
100
|
-
|
101
|
-
|
102
|
-
its(:app_name) { should eq 'My QBWC App' }
|
55
|
+
it 'uses My QBWC App by default' do
|
56
|
+
expect(configuration.app_name).to eq('My QBWC App')
|
103
57
|
end
|
104
58
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
its(:app_name) { should eq 'Sample App' }
|
59
|
+
it 'allows the app_name to be configured' do
|
60
|
+
QuickbooksWebConnector.config.app_name = 'Sample App'
|
109
61
|
|
110
|
-
|
62
|
+
expect(configuration.app_name).to eq('Sample App')
|
111
63
|
end
|
112
|
-
|
113
64
|
end
|
114
65
|
|
115
66
|
describe 'app_description' do
|
116
|
-
|
117
|
-
|
118
|
-
its(:app_description) { should eq 'My QBWC App Description' }
|
67
|
+
it 'sets a default description' do
|
68
|
+
expect(configuration.app_description).to eq('My QBWC App Description')
|
119
69
|
end
|
120
70
|
|
121
|
-
|
122
|
-
|
71
|
+
it 'allows the app_description to be configured' do
|
72
|
+
QuickbooksWebConnector.config.app_description = 'Sample Description'
|
123
73
|
|
124
|
-
|
125
|
-
|
126
|
-
after { QuickbooksWebConnector.configure { |c| c.app_description = 'My QBWC App Description' } }
|
74
|
+
expect(configuration.app_description).to eq('Sample Description')
|
127
75
|
end
|
128
|
-
|
129
76
|
end
|
130
77
|
|
131
78
|
end
|
@@ -1,28 +1,26 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe QuickbooksWebConnector::QwcController do
|
3
|
+
RSpec.describe QuickbooksWebConnector::QwcController, type: :controller do
|
4
4
|
|
5
5
|
describe 'GET :download' do
|
6
|
-
|
6
|
+
it 'renders the QWC file' do
|
7
|
+
QuickbooksWebConnector.config.user 'jane', 'password', '/path/to/company.qbw'
|
7
8
|
|
8
|
-
|
9
|
-
expect(response).to be_success
|
10
|
-
end
|
9
|
+
get :download, username: 'jane', format: :xml, use_route: 'quickbooks_web_connector'
|
11
10
|
|
12
|
-
|
11
|
+
expect(response).to be_success
|
13
12
|
expect(response.header['Content-Type']).to match(/application\/xml/)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'sends the file as an attachment' do
|
17
13
|
expect(response.header['Content-Disposition']).to match(/attachment/)
|
14
|
+
expect(response.header['Content-Disposition']).to match(/jane\.qwc/)
|
15
|
+
expect(response).to render_template(:qwc)
|
16
|
+
expect(assigns(:user).username).to eq('jane')
|
18
17
|
end
|
19
18
|
|
20
|
-
it '
|
21
|
-
|
22
|
-
end
|
19
|
+
it 'returns a 404 when no user matches the given username' do
|
20
|
+
get :download, username: 'jane', format: :xml, use_route: 'quickbooks_web_connector'
|
23
21
|
|
24
|
-
|
25
|
-
|
22
|
+
expect(response.code).to eq('404')
|
23
|
+
expect(response).to_not render_template(:qwc)
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe QuickbooksWebConnector::SoapController do
|
3
|
+
RSpec.describe QuickbooksWebConnector::SoapController, type: :controller do
|
4
4
|
|
5
5
|
# QWC will perform a GET to check the certificate, so we gotta respond
|
6
6
|
describe 'GET :endpoint' do
|
@@ -47,7 +47,7 @@ describe QuickbooksWebConnector::SoapController do
|
|
47
47
|
# </env:Envelope>
|
48
48
|
|
49
49
|
before do
|
50
|
-
QuickbooksWebConnector.
|
50
|
+
QuickbooksWebConnector.config.server_version = '1.2.3'
|
51
51
|
|
52
52
|
post :endpoint, { use_route: 'quickbooks_web_connector' }
|
53
53
|
end
|
@@ -135,19 +135,7 @@ describe QuickbooksWebConnector::SoapController do
|
|
135
135
|
# </env:Envelope>
|
136
136
|
|
137
137
|
before do
|
138
|
-
QuickbooksWebConnector.
|
139
|
-
c.username = 'foo'
|
140
|
-
c.password = 'bar'
|
141
|
-
c.company_file_path = "C:\\path\\to\\company.qbw"
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
after do
|
146
|
-
QuickbooksWebConnector.configure do |c|
|
147
|
-
c.username = 'web_connector'
|
148
|
-
c.password = 'secret'
|
149
|
-
c.company_file_path = nil
|
150
|
-
end
|
138
|
+
QuickbooksWebConnector.config.user 'foo', 'bar', "C:\\path\\to\\company.qbw"
|
151
139
|
end
|
152
140
|
|
153
141
|
it 'responds that theres no jobs to work when authenticated without jobs' do
|
@@ -159,7 +147,7 @@ describe QuickbooksWebConnector::SoapController do
|
|
159
147
|
end
|
160
148
|
|
161
149
|
it 'returns the company_file_path when theres data to send' do
|
162
|
-
SomeBuilder.
|
150
|
+
allow(SomeBuilder).to receive(:perform).with(1).and_return('<some><xml></xml></some>')
|
163
151
|
QuickbooksWebConnector.enqueue SomeBuilder, SomeHandler, 1
|
164
152
|
|
165
153
|
do_post
|
@@ -202,7 +190,7 @@ describe QuickbooksWebConnector::SoapController do
|
|
202
190
|
# </env:Envelope>
|
203
191
|
|
204
192
|
before do
|
205
|
-
SomeBuilder.
|
193
|
+
allow(SomeBuilder).to receive(:perform).with(1).and_return('<some><xml></xml></some>')
|
206
194
|
QuickbooksWebConnector.enqueue SomeBuilder, SomeHandler, 1
|
207
195
|
|
208
196
|
do_post
|