ruote-kit 2.1.4

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.
Files changed (73) hide show
  1. data/.document +0 -0
  2. data/.gitignore +8 -0
  3. data/Gemfile +10 -0
  4. data/README.rdoc +132 -0
  5. data/Rakefile +57 -0
  6. data/config.ru +21 -0
  7. data/lib/ruote-kit/application.rb +50 -0
  8. data/lib/ruote-kit/configuration.rb +52 -0
  9. data/lib/ruote-kit/helpers/engine_helpers.rb +24 -0
  10. data/lib/ruote-kit/helpers/form_helpers.rb +11 -0
  11. data/lib/ruote-kit/helpers/launch_item_parser.rb +59 -0
  12. data/lib/ruote-kit/helpers/navigation_helpers.rb +54 -0
  13. data/lib/ruote-kit/helpers/render_helpers.rb +103 -0
  14. data/lib/ruote-kit/helpers.rb +9 -0
  15. data/lib/ruote-kit/public/_ruote/images/bg.gif +0 -0
  16. data/lib/ruote-kit/public/_ruote/images/bg_button_left.gif +0 -0
  17. data/lib/ruote-kit/public/_ruote/images/bg_button_left_cancel.gif +0 -0
  18. data/lib/ruote-kit/public/_ruote/images/bg_button_left_submit.gif +0 -0
  19. data/lib/ruote-kit/public/_ruote/images/bg_button_right.gif +0 -0
  20. data/lib/ruote-kit/public/_ruote/javascripts/SimplyButtons.js +191 -0
  21. data/lib/ruote-kit/public/_ruote/javascripts/fluo-can.js +1111 -0
  22. data/lib/ruote-kit/public/_ruote/javascripts/fluo-dial.js +149 -0
  23. data/lib/ruote-kit/public/_ruote/javascripts/fluo-json.js +183 -0
  24. data/lib/ruote-kit/public/_ruote/javascripts/fluo-tred.js +515 -0
  25. data/lib/ruote-kit/public/_ruote/stylesheets/SimplyButtons.css +226 -0
  26. data/lib/ruote-kit/public/_ruote/stylesheets/base.css +336 -0
  27. data/lib/ruote-kit/public/_ruote/stylesheets/rk.css +30 -0
  28. data/lib/ruote-kit/public/_ruote/stylesheets/style.css +393 -0
  29. data/lib/ruote-kit/resources/expressions.rb +55 -0
  30. data/lib/ruote-kit/resources/processes.rb +52 -0
  31. data/lib/ruote-kit/resources/workitems.rb +64 -0
  32. data/lib/ruote-kit/spec/ruote_helpers.rb +47 -0
  33. data/lib/ruote-kit/vendor/sinatra-respond_to/LICENSE +21 -0
  34. data/lib/ruote-kit/vendor/sinatra-respond_to/README.markdown +102 -0
  35. data/lib/ruote-kit/vendor/sinatra-respond_to/Rakefile +30 -0
  36. data/lib/ruote-kit/vendor/sinatra-respond_to/VERSION.yml +4 -0
  37. data/lib/ruote-kit/vendor/sinatra-respond_to/lib/sinatra/respond_to.rb +206 -0
  38. data/lib/ruote-kit/vendor/sinatra-respond_to/sinatra-respond_to.gemspec +56 -0
  39. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/public/static folder/.keep +0 -0
  40. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/public/static.txt +1 -0
  41. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/test_app.rb +53 -0
  42. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/unreachable_static.txt +1 -0
  43. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/layout.html.haml +2 -0
  44. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.html.haml +1 -0
  45. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.js.erb +3 -0
  46. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.xml.builder +3 -0
  47. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/extension_spec.rb +403 -0
  48. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/spec_helper.rb +18 -0
  49. data/lib/ruote-kit/views/expression.html.haml +38 -0
  50. data/lib/ruote-kit/views/expressions.html.haml +30 -0
  51. data/lib/ruote-kit/views/index.html.haml +1 -0
  52. data/lib/ruote-kit/views/launch_process.html.haml +19 -0
  53. data/lib/ruote-kit/views/layout.html.haml +46 -0
  54. data/lib/ruote-kit/views/process.html.haml +55 -0
  55. data/lib/ruote-kit/views/processes.html.haml +27 -0
  56. data/lib/ruote-kit/views/resource_not_found.html.haml +7 -0
  57. data/lib/ruote-kit/views/workitem.html.haml +39 -0
  58. data/lib/ruote-kit/views/workitems.html.haml +23 -0
  59. data/lib/ruote-kit.rb +105 -0
  60. data/ruote-kit.gemspec +136 -0
  61. data/spec/helpers/render_helpers_spec.rb +211 -0
  62. data/spec/resources/expressions_spec.rb +179 -0
  63. data/spec/resources/index_spec.rb +46 -0
  64. data/spec/resources/processes_spec.rb +259 -0
  65. data/spec/resources/workitems_spec.rb +308 -0
  66. data/spec/ruote-kit_spec.rb +4 -0
  67. data/spec/spec.opts +2 -0
  68. data/spec/spec_helper.rb +152 -0
  69. data/spec/views/launch_process.html.haml_spec.rb +21 -0
  70. data/spec/views/process.html.haml_spec.rb +16 -0
  71. data/spec/views/processes.html.haml_spec.rb +30 -0
  72. data/spec/views/workitems.html.haml_spec.rb +68 -0
  73. metadata +185 -0
@@ -0,0 +1,46 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "GET /" do
4
+ it "should return a welcome message in HTML be default" do
5
+ get "/_ruote"
6
+
7
+ last_response.should be_ok
8
+ last_response.content_type.should match("text/html")
9
+
10
+ last_response.should match(/Hello world/)
11
+ last_response.should match(/<title>/)
12
+ end
13
+
14
+ it "should return a version string if JSON is requested" do
15
+ header "Accept", "application/json"
16
+
17
+ get "/_ruote"
18
+
19
+ last_response.should be_ok
20
+ last_response.content_type.should match("application/json")
21
+ body = last_response.json_body
22
+
23
+ body["misc"].should == { "ruote-kit" => "welcome", "version" => RuoteKit::VERSION.to_s }
24
+ end
25
+ end
26
+
27
+ describe "Generic error handling" do
28
+ it "should give our own 404 page (HTML)" do
29
+ get "/kenneth"
30
+
31
+ last_response.should_not be_ok
32
+ last_response.status.should be(404)
33
+
34
+ last_response.should be_html
35
+ last_response.should match(/Resource not found/)
36
+ end
37
+
38
+ it "should give our own 404 data (JSON)" do
39
+ get "/kenneth.json"
40
+
41
+ last_response.should_not be_ok
42
+ last_response.status.should be(404)
43
+
44
+ last_response.should be_json
45
+ end
46
+ end
@@ -0,0 +1,259 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "GET /_ruote/processes" do
4
+ describe "without any running processes" do
5
+ it "should give no processes back (HTML)" do
6
+ get "/_ruote/processes"
7
+
8
+ last_response.should be_ok
9
+ end
10
+
11
+ it "should give an empty array (JSON)" do
12
+ get "/_ruote/processes.json"
13
+
14
+ last_response.should be_ok
15
+
16
+ body = last_response.json_body
17
+ body.should have_key("processes")
18
+
19
+ body["processes"].should be_empty
20
+ end
21
+ end
22
+
23
+ describe "with running processes" do
24
+ before(:each) do
25
+ @wfid = launch_test_process
26
+ end
27
+
28
+ it "should give process information back (HTML)" do
29
+ get "/_ruote/processes"
30
+
31
+ last_response.should be_ok
32
+ end
33
+
34
+ it "should give process information back (JSON)" do
35
+ get "/_ruote/processes.json"
36
+
37
+ last_response.should be_ok
38
+
39
+ body = last_response.json_body
40
+
41
+ body["processes"].should_not be_empty
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "GET /_ruote/processes/X-Y" do
47
+ describe "with a running process" do
48
+ before(:each) do
49
+ @wfid = launch_test_process
50
+ end
51
+
52
+ it "should give process information back (HTML)" do
53
+ get "/_ruote/processes/#{@wfid}"
54
+
55
+ last_response.should be_ok
56
+ end
57
+
58
+ it "should give process information back (JSON)" do
59
+ get "/_ruote/processes/#{@wfid}.json"
60
+
61
+ last_response.should be_ok
62
+
63
+ body = last_response.json_body
64
+
65
+ body.should have_key('process')
66
+ end
67
+ end
68
+
69
+ describe "without a running process" do
70
+ it "should 404 correctly (HTML)" do
71
+ get "/_ruote/processes/foo"
72
+
73
+ last_response.should_not be_ok
74
+ last_response.status.should be(404)
75
+
76
+ last_response.should match(/Resource not found/)
77
+ end
78
+
79
+ it "should 404 correctly (JSON)" do
80
+ get "/_ruote/processes/foo.json"
81
+
82
+ last_response.should_not be_ok
83
+ last_response.status.should be(404)
84
+
85
+ last_response.json_body.keys.should include("error")
86
+ last_response.json_body['error'].should == { "code" => "404", "message" => "Resource not found" }
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "GET /_ruote/processes/new" do
92
+ it "should return a launch form" do
93
+ get "/_ruote/processes/new"
94
+
95
+ last_response.should be_ok
96
+ end
97
+ end
98
+
99
+ describe "POST /_ruote/processes" do
100
+ before(:each) do
101
+ engine.processes.should be_empty
102
+ end
103
+
104
+ it "should launch a valid process definition (JSON)" do
105
+ params = {
106
+ :definition => %q{Ruote.process_definition :name => 'test' do
107
+ _sleep '1m'
108
+ end}
109
+ }
110
+
111
+ post '/_ruote/processes.json', params.to_json, { 'CONTENT_TYPE' => 'application/json' }
112
+
113
+ last_response.should be_ok
114
+
115
+ last_response.json_body['launched'].should match(/[0-9a-z\-]+/)
116
+
117
+ sleep 0.4
118
+
119
+ engine.processes.should_not be_empty
120
+ end
121
+
122
+ it "should launch a valid process definition with fields (JSON)" do
123
+ params = {
124
+ :definition => %q{Ruote.process_definition :name => 'test' do
125
+ echo '${f:foo}'
126
+ end},
127
+ :fields => { :foo => 'bar' }
128
+ }
129
+
130
+ post '/_ruote/processes.json', params.to_json, { 'CONTENT_TYPE' => 'application/json' }
131
+
132
+ last_response.should be_ok
133
+ last_response.json_body['launched'].should match(/[0-9a-z\-]+/)
134
+
135
+ sleep 0.5
136
+
137
+ @tracer.to_s.should == "bar"
138
+ end
139
+
140
+ it "should launch a valid process definition (HTML)" do
141
+ params = {
142
+ :process_definition => %q{Ruote.process_definition :name => "test" do
143
+ _sleep '1m'
144
+ end
145
+ }
146
+ }
147
+
148
+ post "/_ruote/processes", params
149
+
150
+ last_response.should be_redirect
151
+ last_response['Location'].should match( /^\/_ruote\/processes\/[0-9a-z\-]+$/ )
152
+
153
+ sleep 0.4
154
+
155
+ engine.processes.should_not be_empty
156
+ end
157
+
158
+ it "should launch a process definition with fields (HTML)" do
159
+ params = {
160
+ :process_definition => %q{Ruote.process_definition :name => 'test' do
161
+ echo '${f:foo}'
162
+ end},
163
+ :process_fields => %q{ { "foo": "bar" } }
164
+ }
165
+
166
+ post '/_ruote/processes', params
167
+
168
+ last_response.should be_redirect
169
+ last_response['Location'].should match( /^\/_ruote\/processes\/([0-9a-z\-]+)$/ )
170
+
171
+ sleep 0.5
172
+
173
+ @tracer.to_s.should == "bar"
174
+ end
175
+
176
+ it "should correct for empty fields sent by browsers" do
177
+ params = {
178
+ :process_definition => %q{Ruote.process_definition :name => 'test' do
179
+ wait '5m'
180
+ end},
181
+ :process_fields => ''
182
+ }
183
+
184
+ post '/_ruote/processes', params
185
+
186
+ last_response.should be_redirect
187
+
188
+ sleep 0.4
189
+
190
+ engine.processes.should_not be_empty
191
+ end
192
+ end
193
+
194
+ describe "DELETE /_ruote/processes/X-Y" do
195
+ before(:each) do
196
+ @wfid = launch_test_process do
197
+ Ruote.process_definition :name => 'test' do
198
+ sequence :on_cancel => 'bail_out' do
199
+ echo "done."
200
+ wait '1d'
201
+ end
202
+
203
+ define :name => 'bail_out' do
204
+ echo "bailout."
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ it "should cancel processes (JSON)" do
211
+ delete "/_ruote/processes/#{@wfid}.json"
212
+
213
+ last_response.should be_ok
214
+
215
+ wait_for( @wfid )
216
+
217
+ engine.process( @wfid ).should be_nil
218
+
219
+ @tracer.to_s.should == "done.\nbailout."
220
+ end
221
+
222
+ it "should cancel processes (HMTL)" do
223
+ delete "/_ruote/processes/#{@wfid}"
224
+
225
+ last_response.should be_redirect
226
+ last_response['Location'].should == "/_ruote/processes"
227
+
228
+ wait_for( @wfid )
229
+
230
+ engine.process( @wfid ).should be_nil
231
+
232
+ @tracer.to_s.should == "done.\nbailout."
233
+ end
234
+
235
+ it "should kill processes (JSON)" do
236
+ delete "/_ruote/processes/#{@wfid}.json?_kill=1"
237
+
238
+ last_response.should be_ok
239
+
240
+ wait_for( @wfid )
241
+
242
+ engine.process( @wfid ).should be_nil
243
+
244
+ @tracer.to_s.should == "done."
245
+ end
246
+
247
+ it "should kill processes (HTML)" do
248
+ delete "/_ruote/processes/#{@wfid}?_kill=1"
249
+
250
+ last_response.should be_redirect
251
+ last_response['Location'].should == '/_ruote/processes'
252
+
253
+ wait_for( @wfid )
254
+
255
+ engine.process( @wfid ).should be_nil
256
+
257
+ @tracer.to_s.should == "done."
258
+ end
259
+ end
@@ -0,0 +1,308 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "GET /_ruote/workitems" do
4
+ describe "without any workitems" do
5
+ it "should report no workitems (HTML)" do
6
+ get "/_ruote/workitems"
7
+
8
+ last_response.should be_ok
9
+ last_response.should match(/No workitems are currently available/)
10
+ end
11
+
12
+ it "should report no workitems (JSON)" do
13
+ get "/_ruote/workitems.json"
14
+
15
+ last_response.should be_ok
16
+ json = last_response.json_body
17
+
18
+ json.should have_key('workitems')
19
+ json['workitems'].should be_empty
20
+ end
21
+ end
22
+
23
+ describe "with workitems" do
24
+ before(:each) do
25
+ @wfid = launch_test_process do
26
+ Ruote.process_definition :name => 'test' do
27
+ sequence do
28
+ nada :activity => 'Work your magic'
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ it "should have a list of workitems (HTML)" do
35
+ get "/_ruote/workitems"
36
+
37
+ last_response.should be_ok
38
+ last_response.should match(/1 workitem available/)
39
+ end
40
+
41
+ it "should have a list of workitems (JSON)" do
42
+ get "/_ruote/workitems.json"
43
+
44
+ last_response.should be_ok
45
+ json = last_response.json_body
46
+
47
+ json['workitems'].size.should be(1)
48
+
49
+ wi = json['workitems'][0]
50
+
51
+ wi.keys.should include('fei', 'participant_name', 'fields')
52
+ wi['fei']['wfid'].should == @wfid
53
+ wi['participant_name'].should == 'nada'
54
+ wi['fields']['params']['activity'].should == 'Work your magic'
55
+ end
56
+ end
57
+ end
58
+
59
+ describe "GET /_ruote/workitems/wfid" do
60
+ describe "with workitems" do
61
+ before(:each) do
62
+ @wfid = launch_test_process do
63
+ Ruote.process_definition :name => 'foo' do
64
+ concurrence do
65
+ nada :activity => 'This'
66
+ nada :activity => 'Or that'
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ it "should list the workitems (HTML)" do
73
+ get "/_ruote/workitems/#{@wfid}"
74
+
75
+ last_response.should be_ok
76
+ last_response.should match(/2 workitems available for #{@wfid}/)
77
+ end
78
+
79
+ it "should list the workitems (JSON)" do
80
+ get "/_ruote/workitems/#{@wfid}.json"
81
+
82
+ last_response.should be_ok
83
+
84
+ json = last_response.json_body
85
+
86
+ json.should have_key('workitems')
87
+ json['workitems'].should_not be_empty
88
+ end
89
+ end
90
+
91
+ describe "without workitems" do
92
+ it "should report no workitems (HTML)" do
93
+ get "/_ruote/workitems/foo"
94
+
95
+ last_response.should be_ok
96
+ last_response.should match(/No workitems are currently available for foo/)
97
+ end
98
+
99
+ it "should report an empty list (JSON)" do
100
+ get "/_ruote/workitems/foo.json"
101
+
102
+ last_response.should be_ok
103
+
104
+ json = last_response.json_body
105
+
106
+ json.should have_key('workitems')
107
+ json['workitems'].should be_empty
108
+ end
109
+ end
110
+ end
111
+
112
+ describe "GET /_ruote/workitems/wfid/expid" do
113
+ describe "with a workitem" do
114
+ before(:each) do
115
+ @wfid = launch_test_process do
116
+ Ruote.process_definition :name => 'foo' do
117
+ sequence do
118
+ nada :activity => 'Work your magic'
119
+ end
120
+ end
121
+ end
122
+
123
+ process = engine.process( @wfid )
124
+ @nada_exp_id = "0_0_0" #process.expressions.last.fei.expid
125
+
126
+ @nada_exp_id.should_not be_nil
127
+ end
128
+
129
+ it "should return it (HTML)" do
130
+ get "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}"
131
+
132
+ last_response.should be_ok
133
+ end
134
+
135
+ it "should return it (JSON)" do
136
+ get "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}.json"
137
+
138
+ last_response.should be_ok
139
+ end
140
+ end
141
+
142
+ describe "without a workitem" do
143
+ it "should return a 404 (HTML)" do
144
+ get "/_ruote/workitems/foo/bar"
145
+
146
+ last_response.should_not be_ok
147
+ last_response.status.should be(404)
148
+ end
149
+
150
+ it "should return a 404 (JSON)" do
151
+ get "/_ruote/workitems/foo/bar.json"
152
+
153
+ last_response.should_not be_ok
154
+ last_response.status.should be(404)
155
+ end
156
+ end
157
+ end
158
+
159
+ describe "PUT /_ruote/workitems/X-Y" do
160
+ before(:each) do
161
+ @wfid = launch_test_process do
162
+ Ruote.process_definition :name => 'foo' do
163
+ sequence do
164
+ nada :activity => 'Work your magic'
165
+ echo "${f:foo}"
166
+ end
167
+ end
168
+ end
169
+
170
+ process = engine.process( @wfid )
171
+ @nada_exp_id = "0_0_0" #process.expressions.last.fei.expid
172
+
173
+ @nada_exp_id.should_not be_nil
174
+ end
175
+
176
+ it "should update the workitem fields (HTML)" do
177
+ fields = {
178
+ "params" => {
179
+ "activity" => "Work your magic",
180
+ },
181
+ "foo" => "bar"
182
+ }
183
+
184
+ put "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}", :fields => fields.to_json
185
+
186
+ last_response.should be_redirect
187
+ last_response['Location'].should == "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}"
188
+
189
+ find_workitem( @wfid, @nada_exp_id ).fields.should == fields
190
+
191
+ sleep 0.4
192
+
193
+ @tracer.to_s.should == ""
194
+ end
195
+
196
+ it "should update the workitem fields (JSON)" do
197
+ fields = {
198
+ "params" => {
199
+ "activity" => "Work your magic",
200
+ },
201
+ "foo" => "bar"
202
+ }
203
+ params = {
204
+ "fields" => fields
205
+ }
206
+
207
+ put "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}.json", params.to_json, { 'CONTENT_TYPE' => 'application/json' }
208
+
209
+ last_response.should be_ok
210
+
211
+ find_workitem( @wfid, @nada_exp_id ).fields.should == fields
212
+
213
+ sleep 0.4
214
+
215
+ @tracer.to_s.should == ""
216
+ end
217
+
218
+ it "should reply to the engine (HTML)" do
219
+ fields = {
220
+ "params" => {
221
+ "activity" => "Work your magic",
222
+ },
223
+ "foo" => "bar"
224
+ }.to_json
225
+
226
+ put "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}", :fields => fields, :_proceed => '1'
227
+
228
+ last_response.should be_redirect
229
+ last_response['Location'].should == "/_ruote/workitems/#{@wfid}"
230
+
231
+ #engine.context[:s_logger].wait_for([
232
+ # [ :processes, :terminated, { :wfid => @wfid } ],
233
+ # [ :errors, nil, { :wfid => @wfid } ]
234
+ #])
235
+ sleep 0.5
236
+
237
+ @tracer.to_s.should == "bar"
238
+ end
239
+
240
+ it "should reply to the engine (JSON)" do
241
+ fields = {
242
+ "params" => {
243
+ "activity" => "Work your magic",
244
+ },
245
+ "foo" => "bar"
246
+ }
247
+ params = {
248
+ "fields" => fields,
249
+ "_proceed" => "1"
250
+ }
251
+
252
+ put "/_ruote/workitems/#{@wfid}/#{@nada_exp_id}.json", params.to_json, { 'CONTENT_TYPE' => 'application/json' }
253
+
254
+ last_response.should be_ok
255
+
256
+ #engine.context[:s_logger].wait_for([
257
+ # [ :processes, :terminated, { :wfid => @wfid } ],
258
+ # [ :errors, nil, { :wfid => @wfid } ]
259
+ #])
260
+ sleep 0.5
261
+
262
+ @tracer.to_s.should == "bar"
263
+ end
264
+ end
265
+
266
+ describe "Filtering workitems" do
267
+ describe "on participants" do
268
+ before(:each) do
269
+ @wfid = launch_test_process do
270
+ Ruote.process_definition :name => 'test' do
271
+ concurrence do
272
+ jack :activity => 'Fetch a pale'
273
+ jill :activity => 'Chase Jack'
274
+ well :activity => 'Ready water'
275
+ end
276
+ end
277
+ end
278
+ end
279
+
280
+ it "should narrow results down to a single participant (JSON)" do
281
+ get '/_ruote/workitems.json', :participant => 'jack'
282
+
283
+ last_response.should be_ok
284
+
285
+ last_response.json_body['workitems'].size.should be(1)
286
+ end
287
+
288
+ it "should narrow results down to a single participant (HTML)" do
289
+ get '/_ruote/workitems', :participant => 'jack'
290
+
291
+ last_response.should be_ok
292
+ end
293
+
294
+ it "should narrow results down to multiple participants (JSON)" do
295
+ get "/_ruote/workitems.json", :participant => 'jack,jill'
296
+
297
+ last_response.should be_ok
298
+
299
+ last_response.json_body['workitems'].size.should be(2)
300
+ end
301
+
302
+ it "should narrow results down to multiple participants (HTML)" do
303
+ get "/_ruote/workitems", :participant => 'jack,jill'
304
+
305
+ last_response.should be_ok
306
+ end
307
+ end
308
+ end
@@ -0,0 +1,4 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe RuoteKit do
4
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --debugger