quickbooks_web_connector 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|