bintje 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,50 @@
1
+ ##
2
+ #
3
+ # Bintje Maps OpenERP xml object to Ruby objects
4
+ #
5
+ # Copyright (C) 2013 Siclic
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+ ##
21
+
22
+
23
+ module XMLRPC
24
+ module Convert
25
+
26
+ # Converts the given +hash+ to an XMLRPC::FaultException object by passing
27
+ # the +faultCode+ and +faultString+ attributes of the Hash to
28
+ # XMLRPC::FaultException.new
29
+ #
30
+ # Raises an Exception if the given +hash+ doesn't meet the requirements.
31
+ # Those requirements being:
32
+ # * 2 keys
33
+ # * <code>'faultCode'</code> key is an Integer
34
+ # * <code>'faultString'</code> key is a String
35
+ #
36
+ # @param hash [Hash] the fault exception
37
+ # @return [XMLRPC:FaultException] the better exception
38
+ def self.fault(hash)
39
+ if hash.kind_of? Hash and hash.size == 2 and
40
+ hash.has_key? "faultCode" and hash.has_key? "faultString" and
41
+ hash["faultCode"].kind_of? Integer or hash["faultCode"].kind_of? String and hash["faultString"].kind_of? String
42
+
43
+ XMLRPC::FaultException.new(hash["faultCode"], hash["faultString"])
44
+ else
45
+ raise "wrong fault-structure: #{hash.inspect}"
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,22 @@
1
+ ##
2
+ #
3
+ # Bintje Maps OpenERP xml object to Ruby objects
4
+ #
5
+ # Copyright (C) 2013 Siclic
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+ ##
21
+
22
+
@@ -0,0 +1 @@
1
+ warning -- Erreur d'accès Opération interdite par les règles d'accès, ou effectué sur un document déjà supprimé (Opération : lecture, Type de document: openstc.ask).
@@ -0,0 +1,5 @@
1
+ XMLRPC::FaultException ():
2
+ app/controllers/openstc/api/intervention_requests_controller.rb:19:in `update'
3
+ Rendered /home/cedric/.rvm/gems/ruby-2.0.0-p195@barakafrites/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
4
+ Rendered /home/cedric/.rvm/gems/ruby-2.0.0-p195@barakafrites/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.6ms)
5
+ Rendered /home/cedric/.rvm/gems/ruby-2.0.0-p195@barakafrites/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (30.2ms)
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+ require 'request_shared_examples'
3
+
4
+ describe "OpenObject" do
5
+
6
+ context 'for common context' do
7
+
8
+ before :each do
9
+ open_object_settings
10
+ end
11
+
12
+ describe '.common_client' do
13
+ it 'build new XMLRPC connection client Proxy' do
14
+ allow_message_expectations_on_nil
15
+ XMLRPC::Client.should_receive(:new)
16
+ .with('localhost', '/xmlrpc/common', '8069')
17
+ .and_return().should_receive(:proxy).with(nil)
18
+ OpenObject.common_client
19
+ end
20
+ end
21
+
22
+ describe '.login' do
23
+
24
+ context 'with wrong database name' do
25
+ before(:each) do
26
+ ServerStub::Common::Login.wrong_data_base_name
27
+ end
28
+ let(:response) { OpenObject.login('dbname', 'user', 'password') }
29
+
30
+ it "response.success : false" do
31
+ response.success.should be false
32
+ end
33
+
34
+ it " response.errors : #{ServerStub::Common::Login.wrong_database_name_fault_code}" do
35
+ response.errors[:faultCode].should include(ServerStub::Common::Login.wrong_database_name_fault_code)
36
+ end
37
+
38
+ end
39
+
40
+ context 'with wrong user name and/or password' do
41
+ before(:each) do
42
+ ServerStub::Common::Login.wrong_user_name
43
+ end
44
+ let(:response) { OpenObject.login('dbname', 'user', 'password') }
45
+
46
+ it "response.success : false" do
47
+ response.success.should be false
48
+ end
49
+
50
+ end
51
+
52
+
53
+ context 'on successful authentication request' do
54
+ before(:each) do
55
+ ServerStub::Common::Login.successful
56
+ end
57
+ let(:response) { OpenObject.login('dbname', 'user', 'password') }
58
+
59
+ it_behaves_like 'any successful request'
60
+
61
+ it "response.content.class = Fixnum (user id)" do
62
+ response.content.class.should be Fixnum
63
+ end
64
+
65
+ it "response.content == #{ServerStub::Common::Login.uid} (expected user id)" do
66
+ response.content.should be ServerStub::Common::Login.uid
67
+ end
68
+
69
+ end
70
+
71
+
72
+ end
73
+
74
+ end
75
+
76
+
77
+ end
@@ -0,0 +1,270 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'reciever model' do
4
+ before(:each) do
5
+ open_object_settings
6
+ end
7
+ let(:user_context) { {dbname: 'dbname', uid: 2, pwd: 'pwd'} }
8
+
9
+ class ReceiverModel
10
+ include OpenObject
11
+ end
12
+
13
+ it 'should respond to .open_object_model' do
14
+ ReceiverModel.should respond_to(:open_object_model)
15
+ end
16
+
17
+
18
+ describe '.open_object_model_name' do
19
+ context 'when not defined in model' do
20
+
21
+ it 'should be a string' do
22
+ ReceiverModel.open_object_model.class.should be String
23
+ end
24
+
25
+ it 'should be humanized model name' do
26
+ ReceiverModel.open_object_model.should eql 'receiver_model'
27
+ end
28
+
29
+ end
30
+
31
+ describe ".set_open_object_mode('another_name')" do
32
+ class AnotherModel
33
+ include OpenObject
34
+ end
35
+ it "should set the open_object model name with the given string" do
36
+ AnotherModel.set_open_object_model "another_name"
37
+ AnotherModel.open_object_model.should eql "another_name"
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ describe ".connection(user_context:{dbname:String,uid:Fixnum,pwd:String})" do
45
+
46
+
47
+ it "should build a new XMLRPC connection" do
48
+ allow_message_expectations_on_nil
49
+ XMLRPC::Client.should_receive(:new)
50
+ .with(OpenObject.host, OpenObject.object, OpenObject.port)
51
+ .and_return().should_receive(:proxy)
52
+ ReceiverModel.connection(user_context)
53
+ end
54
+
55
+
56
+ end
57
+
58
+ describe ".search(user_context, args = [], limit:Fixnum, offset:Fixnum)" do
59
+ before(:each) do
60
+ allow_message_expectations_on_nil
61
+ ServerStub::Object::Search.prologue
62
+ end
63
+
64
+ let(:response) { ReceiverModel.search(user_context, [["field", "operator", "value"]]) }
65
+
66
+
67
+ context "with offset and limit parameters" do
68
+ let(:response) { ReceiverModel.search(user_context, [["field", "operator", "value"]],offset: 10,limit: 5) }
69
+
70
+ it "invokes execute with model_name, search, [params], offset,limit" do
71
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
72
+ .with('receiver_model','search',[["field", "operator", "value"]], 10 , 5 )
73
+ response
74
+ end
75
+
76
+ end
77
+
78
+ context "with limit parameter (missing offset)" do
79
+ let(:response) { ReceiverModel.search(user_context, [["field", "operator", "value"]],limit: 5) }
80
+
81
+ it "invokes execute with model_name, search, [params], offset :0, limit " do
82
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
83
+ .with('receiver_model','search',[["field", "operator", "value"]], 0 , 5 )
84
+ response
85
+ end
86
+
87
+ end
88
+
89
+ context "with offset parameter (missing limit)" do
90
+ let(:response) { ReceiverModel.search(user_context, [["field", "operator", "value"]], offset: 10) }
91
+
92
+ it "invokes execute with model_name, search, [params], offset, limit: 0" do
93
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
94
+ .with('receiver_model','search',[["field", "operator", "value"]], 10 , 0 )
95
+ response
96
+ end
97
+
98
+ end
99
+
100
+ context "without limit and offset" do
101
+
102
+ it_behaves_like "any object request"
103
+
104
+ it "invokes execute with model_name, search, [params], 0, 0" do
105
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
106
+ .with('receiver_model','search',[["field", "operator", "value"]], 0,0)
107
+ response
108
+
109
+ end
110
+ end
111
+
112
+
113
+ context "with order parameter" do
114
+ let(:response) { ReceiverModel.search(user_context, [["field", "operator", "value"]], order: 'name DESC') }
115
+
116
+ it "invokes execute with model_name, search, [params], 0, 0, order" do
117
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
118
+ .with('receiver_model','search',[["field", "operator", "value"]], 0,0, 'name DESC')
119
+ response
120
+ end
121
+
122
+ end
123
+
124
+ context "successful request" do
125
+ before(:each) { ServerStub::Object::Search.successful }
126
+ let(:response) { ReceiverModel.search(user_context, [["field", "operator", "value"]]) }
127
+
128
+ it_behaves_like "any successful request"
129
+
130
+ it "response.content should be an Array" do
131
+ response.content.should be_an Array
132
+ end
133
+
134
+ end
135
+
136
+ context "failed request" do
137
+ before(:each) do
138
+ ServerStub::Object::Search.failure
139
+ end
140
+
141
+ it_behaves_like "any failed request"
142
+
143
+ end
144
+
145
+ end
146
+
147
+ describe ".read(user_context,[ids],[fields])" do
148
+ before(:each) do
149
+ allow_message_expectations_on_nil
150
+ ServerStub::Object::Read.prologue
151
+ end
152
+
153
+ let(:response) {ReceiverModel.read(user_context,[1,2],['fields']) }
154
+
155
+ it_behaves_like "any object request"
156
+
157
+ it "invokes execute with model_name, read, [ids], [fields]" do
158
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
159
+ .with('receiver_model','read',[1,2],['fields'])
160
+ response
161
+ end
162
+
163
+ context "successful request" do
164
+ before(:each) do
165
+ ServerStub::Object::Read.successful
166
+ end
167
+
168
+ it_behaves_like "any successful request"
169
+
170
+ it "response.content should be Array" do
171
+ response.content.should be_an Array
172
+ end
173
+
174
+ it "reponse.content.first should be #{ServerStub::Object::Read.standard_response.first}" do
175
+ response.content.first.should eql ServerStub::Object::Read.standard_response.first
176
+ end
177
+
178
+ end
179
+
180
+ context "failed request" do
181
+ before(:each) do
182
+ ServerStub::Object::Read.failure
183
+ end
184
+
185
+ it_behaves_like "any failed request"
186
+
187
+ end
188
+
189
+ end
190
+
191
+ describe ".write(user_context,[ids],{field:'value'})" do
192
+ before(:each) do
193
+ allow_message_expectations_on_nil
194
+ ServerStub::Object::Write.prologue
195
+ end
196
+ let(:response) { ReceiverModel.write(user_context, [1,2],{field:'value'})}
197
+
198
+ it_behaves_like "any object request"
199
+
200
+ it "invokes execute with model_name, 'write', [ids], {field:'value'}" do
201
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
202
+ .with('receiver_model', 'write', [1,2], {field:'value'})
203
+ response
204
+ end
205
+
206
+ context "successful request" do
207
+ before(:each) do
208
+ ServerStub::Object::Write.successful
209
+ end
210
+
211
+ it_behaves_like "any successful request"
212
+
213
+ it "response.content should be nil" do
214
+ response.content.should be nil
215
+ end
216
+
217
+ end
218
+
219
+ context "failed request" do
220
+ before(:each) do
221
+ ServerStub::Object::Write.failure
222
+ end
223
+
224
+ it_behaves_like "any failed request"
225
+
226
+ end
227
+
228
+ end
229
+
230
+ describe ".create(user_context,{field:value})" do
231
+ before(:each) do
232
+ allow_message_expectations_on_nil
233
+ ServerStub::Object::Create.prologue
234
+ end
235
+
236
+ let(:response) { ReceiverModel.create(user_context,{field:'value'})}
237
+
238
+ it_behaves_like "any object request"
239
+
240
+ it "invokes execute with model_name, 'create', {field:'value'}" do
241
+ ServerStub::Object::Connection.prologue.should_receive(:execute)
242
+ .with('receiver_model', 'create', {field:'value'})
243
+ response
244
+ end
245
+
246
+ context "successful request" do
247
+ before(:each) do
248
+ ServerStub::Object::Create.successful
249
+ end
250
+
251
+ it_behaves_like "any successful request"
252
+
253
+ it "reponse.content should be 1" do
254
+ response.content.should be 1
255
+ end
256
+
257
+ end
258
+
259
+ context "failed request" do
260
+ before(:each) do
261
+ ServerStub::Object::Create.failure
262
+ end
263
+
264
+ it_behaves_like "any failed request"
265
+
266
+ end
267
+
268
+ end
269
+
270
+ end
@@ -0,0 +1,42 @@
1
+ module RequestSharedExamples
2
+
3
+
4
+ shared_examples_for "any request" do
5
+ it "response.class == OpenObject::BackendResponse" do
6
+ response.class.should be OpenObject::BackendResponse
7
+ end
8
+ end
9
+
10
+ shared_examples_for "any successful request" do
11
+ it_behaves_like "any request"
12
+ it "response.success : true" do
13
+ response.success.should be true
14
+ end
15
+ end
16
+
17
+ shared_examples_for "any failed request" do
18
+ it_behaves_like "any request"
19
+ it "response.success : false" do
20
+ response.success.should be false
21
+ end
22
+
23
+ it "response.errors[:faultCode] Server faultCode" do
24
+ response.errors[:faultCode].should eql ServerStub.faultCode
25
+ end
26
+
27
+ it "response.errors[:faultString] Server faultString" do
28
+ response.errors[:faultString].should eql ServerStub.faultString
29
+ end
30
+
31
+ end
32
+
33
+
34
+ shared_examples_for "any object request" do
35
+ it "creates connection with context" do
36
+ ReceiverModel.should_receive(:connection).with(user_context)
37
+ response
38
+ end
39
+ end
40
+
41
+
42
+ end