rules_engine 0.1.10 → 0.2.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.
Files changed (55) hide show
  1. data/VERSION +1 -1
  2. data/rails_generators/manifests/rules_engine.rb +25 -18
  3. data/rails_generators/manifests/rules_engine.yml +10 -3
  4. data/rails_generators/templates/app/controllers/re_history_controller.rb +15 -0
  5. data/rails_generators/templates/app/controllers/re_plan_workflows_controller.rb +12 -23
  6. data/rails_generators/templates/app/controllers/re_plans_controller.rb +11 -11
  7. data/rails_generators/templates/app/controllers/re_workflow_rules_controller.rb +2 -1
  8. data/rails_generators/templates/app/controllers/re_workflows_controller.rb +7 -7
  9. data/rails_generators/templates/app/helpers/rules_engine_helper.rb +1 -1
  10. data/rails_generators/templates/app/models/re_plan.rb +1 -1
  11. data/rails_generators/templates/app/models/re_rule.rb +1 -2
  12. data/rails_generators/templates/app/models/re_workflow.rb +1 -9
  13. data/rails_generators/templates/app/views/re_history/_index_prepare.html.erb +12 -0
  14. data/rails_generators/templates/app/views/re_history/_index_update.html.erb +20 -0
  15. data/rails_generators/templates/app/views/re_history/_show.html.erb +30 -0
  16. data/rails_generators/templates/app/views/re_history/index.html.erb +11 -0
  17. data/rails_generators/templates/app/views/re_history/index.js.erb +4 -0
  18. data/rails_generators/templates/app/views/re_history/show.html.erb +8 -0
  19. data/rails_generators/templates/app/views/re_history/show.js.erb +4 -0
  20. data/rails_generators/templates/app/views/re_plans/_copy.html.erb +1 -1
  21. data/rails_generators/templates/app/views/re_plans/{re_process.html.erb → history.html.erb} +3 -3
  22. data/rails_generators/templates/app/views/re_plans/history.js.erb +4 -0
  23. data/rails_generators/templates/app/views/re_plans/index.html.erb +2 -2
  24. data/rails_generators/templates/app/views/re_plans/preview.html.erb +0 -1
  25. data/rails_generators/templates/app/views/re_plans/show.html.erb +2 -2
  26. data/rails_generators/templates/app/views/re_workflows/_copy.html.erb +1 -1
  27. data/rails_generators/templates/app/views/re_workflows/index.html.erb +2 -2
  28. data/rails_generators/templates/doc/README.rules_engine +1 -1
  29. data/rails_generators/templates/public/javascripts/rules_engine/re_history_index.js +43 -0
  30. data/rails_generators/templates/public/javascripts/rules_engine/{re_process_show.js → re_history_show.js} +3 -3
  31. data/rails_generators/templates/public/stylesheets/rules_engine/images/rules_engine/{re_process → re_history}/error-14.png +0 -0
  32. data/rails_generators/templates/public/stylesheets/rules_engine/images/rules_engine/{re_process → re_history}/info-14.png +0 -0
  33. data/rails_generators/templates/public/stylesheets/rules_engine/images/rules_engine/{re_process → re_history}/list-25.png +0 -0
  34. data/rails_generators/templates/public/stylesheets/rules_engine/images/rules_engine/{re_process → re_history}/success-14.png +0 -0
  35. data/rails_generators/templates/public/stylesheets/rules_engine/screen.css +19 -69
  36. data/rails_generators/templates/spec/controllers/re_application_controller_spec.rb +68 -0
  37. data/rails_generators/templates/spec/controllers/re_history_controller_spec.rb +41 -0
  38. data/rails_generators/templates/spec/controllers/re_plan_workflow_rules_controller_spec.rb +355 -0
  39. data/rails_generators/templates/spec/controllers/re_plan_workflows_controller_spec.rb +364 -0
  40. data/rails_generators/templates/spec/controllers/re_plans_controller_spec.rb +165 -223
  41. data/rails_generators/templates/spec/controllers/re_publications_controller_spec.rb +29 -0
  42. data/rails_generators/templates/spec/controllers/re_workflow_rules_controller_spec.rb +353 -0
  43. data/rails_generators/templates/spec/controllers/re_workflows_controller_spec.rb +326 -0
  44. data/rails_generators/templates/spec/helpers/rules_engine_helper_spec.rb +8 -8
  45. metadata +28 -21
  46. data/rails_generators/templates/app/controllers/re_processes_controller.rb +0 -15
  47. data/rails_generators/templates/app/views/re_plans/re_process.js.erb +0 -4
  48. data/rails_generators/templates/app/views/re_processes/_index_prepare.html.erb +0 -12
  49. data/rails_generators/templates/app/views/re_processes/_index_update.html.erb +0 -20
  50. data/rails_generators/templates/app/views/re_processes/_show.html.erb +0 -30
  51. data/rails_generators/templates/app/views/re_processes/index.html.erb +0 -11
  52. data/rails_generators/templates/app/views/re_processes/index.js.erb +0 -4
  53. data/rails_generators/templates/app/views/re_processes/show.html.erb +0 -8
  54. data/rails_generators/templates/app/views/re_processes/show.js.erb +0 -4
  55. data/rails_generators/templates/public/javascripts/rules_engine/re_process_index.js +0 -43
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe RePublicationsController do
4
+ extend RulesEngineMacros
5
+
6
+ integrate_views
7
+
8
+ before(:each) do
9
+ controller.instance_eval { flash.stub!(:sweep) }
10
+ controller.stub!(:rules_engine_reader_access_required).and_return(true)
11
+ end
12
+
13
+ describe "show" do
14
+ it_should_require_rules_engine_reader_access(:show, :id => 123)
15
+
16
+ it "should get the audit history record with the process ID" do
17
+ re_plan = RePlan.make(:code => "mock_code")
18
+
19
+ publisher = mock('publisher')
20
+ RulesEngine::Publish.stub!(:publisher).and_return(publisher)
21
+
22
+ re_publications = {:history => "none"}
23
+ publisher.should_receive(:history).with("mock_code", anything).and_return(re_publications)
24
+
25
+ get :show, :id => re_plan.id
26
+ assigns[:re_publications].should == re_publications
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,353 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ReWorkflowRulesController do
4
+ extend RulesEngineMacros
5
+
6
+ integrate_views
7
+
8
+ before(:each) do
9
+ controller.instance_eval { flash.stub!(:sweep) }
10
+ controller.stub!(:rules_engine_reader_access_required).and_return(true)
11
+ controller.stub!(:rules_engine_editor_access_required).and_return(true)
12
+
13
+ @re_workflow = ReWorkflow.make
14
+
15
+ @rule_class = RulesEngine::Rule::Definition
16
+ @rule_class.options = {
17
+ :group => 'Mock',
18
+ :display_name => 'Mock Rule',
19
+ :help_partial => '/mock_rule/help',
20
+ :new_partial => '/mock_rule/new',
21
+ :edit_partial => '/mock_rule/edit'
22
+ }
23
+
24
+ RulesEngine::Discovery.stub!(:rule_class).and_return(@rule_class)
25
+ end
26
+
27
+ describe "help" do
28
+ it_should_require_rules_engine_reader_access(:help, :re_workflow_id => 123, :rule_class_name => 'mock_rule')
29
+
30
+ before(:each) do
31
+ controller.stub!(:render).with('/mock_rule/help')
32
+ end
33
+
34
+ describe "rule class exists" do
35
+ it "should get the rule record with the rule_class_name" do
36
+ get :help, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule'
37
+ assigns[:re_workflow].should == @re_workflow
38
+ assigns[:rule_class].should == @rule_class
39
+ end
40
+
41
+ it "should render the help partial" do
42
+ controller.should_receive(:render).with('/mock_rule/help')
43
+ get :help, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule'
44
+ response.should render_template(:help)
45
+ end
46
+ end
47
+
48
+ describe "rule class does not exist" do
49
+ it "should render the error template" do
50
+ RulesEngine::Discovery.stub!(:rule_class).and_return(nil)
51
+ get :help, :re_workflow_id => @re_workflow.id, :rule_class_name => 'unknown'
52
+ response.should render_template(:error)
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "error" do
58
+ it_should_require_rules_engine_reader_access(:error, :re_workflow_id => 123)
59
+
60
+ it "should render the error template" do
61
+ get :error, :re_workflow_id => @re_workflow.id
62
+ response.should render_template(:error)
63
+ end
64
+ end
65
+
66
+ describe "new" do
67
+ it_should_require_rules_engine_editor_access(:new, :re_workflow_id => 123)
68
+
69
+ before(:each) do
70
+ controller.stub!(:render).with('/mock_rule/new')
71
+ end
72
+
73
+ it "should assign a new rule record" do
74
+ get :new, :re_workflow_id => @re_workflow.id
75
+ assigns[:re_rule].should be_instance_of(ReRule)
76
+ end
77
+
78
+ describe "the rule class exists" do
79
+ it "should render the new partial" do
80
+ controller.should_receive(:render).with('/mock_rule/new')
81
+ get :new, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule'
82
+ response.should render_template(:new)
83
+ end
84
+ end
85
+
86
+ describe "rule class does not exist" do
87
+ it "should render the error template" do
88
+ RulesEngine::Discovery.stub!(:rule_class).and_return(nil)
89
+ get :new, :re_workflow_id => @re_workflow.id, :rule_class_name => 'unknown'
90
+ response.should render_template(:error)
91
+ end
92
+ end
93
+ end
94
+
95
+ describe "create" do
96
+ it_should_require_rules_engine_editor_access(:create, :re_workflow_id => 123, :rule_class_name => 'mock_rule')
97
+
98
+ before do
99
+ @re_rule = ReRule.make(:re_workflow => @re_workflow)
100
+ ReRule.stub!(:new).and_return(@re_rule)
101
+ end
102
+
103
+ it "should assign the re_rule" do
104
+ ReRule.should_receive(:new).with(:re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule')
105
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
106
+ end
107
+
108
+ describe "rule class does not exist" do
109
+ it "should render the error template" do
110
+ @re_rule.stub!(:rule).and_return(nil)
111
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
112
+ response.should render_template(:error)
113
+ end
114
+ end
115
+
116
+ describe "rule class exists" do
117
+ it "should assign the re_rule attributess" do
118
+ @re_rule.should_receive(:rule_attributes=).with(hash_including(:rule_attibutes => 'mock attributes'))
119
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
120
+ end
121
+ end
122
+
123
+ describe "save failed" do
124
+ before(:each) do
125
+ @re_rule.stub!(:save).and_return(false)
126
+ end
127
+
128
+ it "should render the 'new' template" do
129
+ controller.should_receive(:render).with('/mock_rule/new')
130
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
131
+ response.should render_template(:new)
132
+ end
133
+ end
134
+
135
+ describe "the rule is valid" do
136
+ before(:each) do
137
+ @re_rule.stub!(:valid?).and_return(true)
138
+ @re_rule.stub!(:save).and_return(true)
139
+ end
140
+
141
+ it "should add the rule to the workflow" do
142
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
143
+ @re_workflow.re_rules.should include(@re_rule)
144
+ end
145
+
146
+ it "should display a flash success message" do
147
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
148
+ flash[:success].should_not be_blank
149
+ end
150
+
151
+ it "should redirect to the change re_rule page for HTML" do
152
+ post :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
153
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
154
+ end
155
+
156
+ it "should render 'update' template for JAVASCRIPT" do
157
+ xhr :post, :create, :re_workflow_id => @re_workflow.id, :rule_class_name => 'mock_rule', :rule_attibutes => 'mock attributes'
158
+ response.should render_template(:update)
159
+ end
160
+ end
161
+ end
162
+
163
+ describe "edit" do
164
+ it_should_require_rules_engine_editor_access(:edit, :re_workflow_id => 123)
165
+
166
+ before(:each) do
167
+ controller.stub!(:render).with('/mock_rule/edit')
168
+ @re_rule = ReRule.make(:re_workflow => @re_workflow)
169
+ end
170
+
171
+ it "should assign a the rule record" do
172
+ get :edit, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
173
+ assigns[:re_rule].should == @re_rule
174
+ end
175
+
176
+ describe "the rule class exists" do
177
+ it "should render the edit partial" do
178
+ controller.should_receive(:render).with('/mock_rule/edit')
179
+ get :edit, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
180
+ response.should render_template(:edit)
181
+ end
182
+ end
183
+
184
+ describe "rule class does not exist" do
185
+ it "should render the error template" do
186
+ RulesEngine::Discovery.stub!(:rule_class).and_return(nil)
187
+ get :edit, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
188
+ response.should render_template(:error)
189
+ end
190
+ end
191
+ end
192
+
193
+ describe "update" do
194
+ it_should_require_rules_engine_editor_access(:update, :re_workflow_id => 123, :id => 456, :rule_attibutes => 'mock attributes')
195
+
196
+ before do
197
+ @re_rule = ReRule.make(:re_workflow => @re_workflow)
198
+ end
199
+
200
+ it "should get the rule record with the ID" do
201
+ ReRule.should_receive(:find).with("123").and_return(@re_rule)
202
+ put :update, :re_workflow_id => @re_workflow.id, :id => 123, :rule_attibutes => 'mock attributes'
203
+ assigns[:re_rule].should == @re_rule
204
+ end
205
+
206
+ describe "rule class does not exist" do
207
+ it "should render the error template" do
208
+ ReRule.stub!(:find).and_return(@re_rule)
209
+ @re_rule.stub!(:rule).and_return(nil)
210
+ put :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
211
+ response.should render_template(:error)
212
+ end
213
+ end
214
+
215
+ describe "rule class exists" do
216
+ it "should assign the re_rule attributess" do
217
+ ReRule.stub!(:find).and_return(@re_rule)
218
+ @re_rule.should_receive(:rule_attributes=).with(hash_including(:rule_attibutes => 'mock attributes'))
219
+ put :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
220
+ end
221
+ end
222
+
223
+ describe "save failed" do
224
+ before(:each) do
225
+ ReRule.stub!(:find).and_return(@re_rule)
226
+ @re_rule.stub!(:save).and_return(false)
227
+ end
228
+
229
+ it "should render the 'edit' template" do
230
+ controller.should_receive(:render).with('/mock_rule/edit')
231
+ put :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
232
+ response.should render_template(:edit)
233
+ end
234
+ end
235
+
236
+ describe "the rule is valid" do
237
+ it "should add the rule to the workflow" do
238
+ put :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
239
+ @re_workflow.re_rules.should include(@re_rule)
240
+ end
241
+
242
+ it "should display a flash success message" do
243
+ put :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
244
+ flash[:success].should_not be_blank
245
+ end
246
+
247
+ it "should redirect to the change re_rule page for HTML" do
248
+ put :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
249
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
250
+ end
251
+
252
+ it "should render 'update' template for JAVASCRIPT" do
253
+ xhr :put, :update, :re_workflow_id => @re_workflow.id, :id => @re_rule.id, :rule_attibutes => 'mock attributes'
254
+ response.should render_template(:update)
255
+ end
256
+ end
257
+ end
258
+
259
+ describe "destroy" do
260
+ it_should_require_rules_engine_editor_access(:destroy, :re_workflow_id => 123, :id => 456)
261
+
262
+ before do
263
+ @re_rule = ReRule.make(:re_workflow => @re_workflow)
264
+ ReRule.stub!(:find).and_return(@re_rule)
265
+ end
266
+
267
+ it "should get the rule record with the ID" do
268
+ ReRule.should_receive(:find).with("123").and_return(@re_rule)
269
+ delete :destroy, :re_workflow_id => @re_workflow.id, :id => 123
270
+ assigns[:re_rule].should == @re_rule
271
+ end
272
+
273
+ it "should destroy the re_rule" do
274
+ @re_rule.should_receive(:destroy)
275
+ delete :destroy, :re_workflow_id => @re_workflow.id, :id => 123
276
+ end
277
+
278
+ it "should display a flash success message" do
279
+ delete :destroy, :re_workflow_id => @re_workflow.id, :id => 123
280
+ flash[:success].should_not be_blank
281
+ end
282
+
283
+ it "should redirect to the change re_workflow page for HTML" do
284
+ delete :destroy, :re_workflow_id => @re_workflow.id, :id => 123
285
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
286
+ end
287
+
288
+ it "should render the update template for JAVASCRIPT" do
289
+ xhr :delete, :destroy, :re_workflow_id => @re_workflow.id, :id => 123
290
+ response.should render_template(:update)
291
+ end
292
+ end
293
+
294
+ describe "move_up" do
295
+ it_should_require_rules_engine_editor_access(:move_up, :re_workflow_id => 123, :id => 456)
296
+
297
+ before(:each) do
298
+ @re_rule = ReRule.make(:re_workflow => @re_workflow)
299
+ end
300
+
301
+ it "should get the rule record with the ID" do
302
+ get :move_up, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
303
+ assigns[:re_workflow].should == @re_workflow
304
+ assigns[:re_rule].should == @re_rule
305
+ end
306
+
307
+ it "should move the rule up" do
308
+ ReRule.stub!(:find).and_return(@re_rule)
309
+ @re_rule.should_receive(:move_higher)
310
+ put :move_up, :re_workflow_id => @re_workflow.id, :id => 123
311
+ end
312
+
313
+ it "should redirect to the change re_workflow page for HTML" do
314
+ put :move_up, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
315
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
316
+ end
317
+
318
+ it "should render the update template for JAVASCRIPT" do
319
+ xhr :put, :move_up, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
320
+ response.should render_template(:update)
321
+ end
322
+ end
323
+
324
+ describe "move_down" do
325
+ it_should_require_rules_engine_editor_access(:move_down, :re_workflow_id => 123, :id => 456)
326
+
327
+ before(:each) do
328
+ @re_rule = ReRule.make(:re_workflow => @re_workflow)
329
+ end
330
+
331
+ it "should get the rule record with the ID" do
332
+ get :move_down, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
333
+ assigns[:re_workflow].should == @re_workflow
334
+ assigns[:re_rule].should == @re_rule
335
+ end
336
+
337
+ it "should move the rule down" do
338
+ ReRule.stub!(:find).and_return(@re_rule)
339
+ @re_rule.should_receive(:move_lower)
340
+ put :move_down, :re_workflow_id => @re_workflow.id, :id => 123
341
+ end
342
+
343
+ it "should redirect to the change re_workflow page for HTML" do
344
+ put :move_down, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
345
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
346
+ end
347
+
348
+ it "should render the update template for JAVASCRIPT" do
349
+ xhr :put, :move_down, :re_workflow_id => @re_workflow.id, :id => @re_rule.id
350
+ response.should render_template(:update)
351
+ end
352
+ end
353
+ end
@@ -0,0 +1,326 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ReWorkflowsController do
4
+ extend RulesEngineMacros
5
+
6
+ integrate_views
7
+
8
+ before(:each) do
9
+ controller.instance_eval { flash.stub!(:sweep) }
10
+ controller.stub!(:rules_engine_reader_access_required).and_return(true)
11
+ controller.stub!(:rules_engine_editor_access_required).and_return(true)
12
+ end
13
+
14
+ describe "index" do
15
+ it_should_require_rules_engine_reader_access(:index)
16
+
17
+ it "should get the list of workflows" do
18
+ re_workflows = [ReWorkflow.make(:title => 'a'), ReWorkflow.make(:title => 'b')]
19
+ get :index
20
+ assigns[:re_workflows].should == re_workflows
21
+ end
22
+ end
23
+
24
+ describe "show" do
25
+ it_should_require_rules_engine_reader_access(:show, :id => 123)
26
+
27
+ it "should get the workflow record with the ID" do
28
+ re_workflow = ReWorkflow.make
29
+ get :show, :id => re_workflow.id
30
+ assigns[:re_workflow].should == re_workflow
31
+ end
32
+ end
33
+
34
+ describe "new" do
35
+ it_should_require_rules_engine_editor_access(:new, :id => 123)
36
+
37
+ it "should assign a new workflow record" do
38
+ get :new
39
+ assigns[:re_workflow].should be_instance_of(ReWorkflow)
40
+ end
41
+
42
+ it "should render the 'new' template" do
43
+ get :new
44
+ response.should render_template(:new)
45
+ end
46
+ end
47
+
48
+ describe "create" do
49
+ it_should_require_rules_engine_editor_access(:create, :re_workflow => {})
50
+
51
+ before do
52
+ @re_workflow = ReWorkflow.make
53
+ ReWorkflow.stub!(:new).and_return(@re_workflow)
54
+ end
55
+
56
+ it "should assign the re_workflow parameters" do
57
+ ReWorkflow.should_receive(:new).with("code" => "name", "title" => "value")
58
+ post :create, :re_workflow => { :code => "name", :title => "value" }
59
+ end
60
+
61
+ it "should save the re_workflow" do
62
+ @re_workflow.should_receive(:save)
63
+ post :create, :re_workflow => { :title => "name" }
64
+ end
65
+
66
+ describe "save failed" do
67
+ before(:each) do
68
+ @re_workflow.stub!(:save).and_return(false)
69
+ end
70
+
71
+ it "should render the 'new' template" do
72
+ post :create, :re_workflow => { :title => "name" }
73
+ response.should render_template(:new)
74
+ end
75
+ end
76
+
77
+ describe "save succeeded" do
78
+ before(:each) do
79
+ @re_workflow.stub!(:save).and_return(true)
80
+ end
81
+
82
+ it "should display a flash success message" do
83
+ post :create, :re_workflow => { :title => "name" }
84
+ flash[:success].should_not be_blank
85
+ end
86
+
87
+ it "should redirect to the change re_workflow page for HTML" do
88
+ post :create, :re_workflow => { :title => "name" }
89
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
90
+ end
91
+
92
+ it "should render 'create' template for JAVASCRIPT" do
93
+ xhr :post, :create, :re_workflow => { :title => "name" }
94
+ response.should render_template(:create)
95
+ end
96
+ end
97
+ end
98
+
99
+ describe "edit" do
100
+ it_should_require_rules_engine_editor_access(:edit, :id => 123)
101
+
102
+ it "should get the workflow record with the ID" do
103
+ re_workflow = ReWorkflow.make
104
+ get :edit, :id => re_workflow.id
105
+ assigns[:re_workflow].should == re_workflow
106
+ end
107
+ end
108
+
109
+ describe "update" do
110
+ it_should_require_rules_engine_editor_access(:update, :id => 123, :re_workflow => {})
111
+
112
+ before do
113
+ @re_workflow = ReWorkflow.make
114
+ ReWorkflow.stub!(:find).and_return(@re_workflow)
115
+ end
116
+
117
+ it "should get the workflow record with the ID" do
118
+ ReWorkflow.should_receive(:find).with("123").and_return(@re_workflow)
119
+ put :update, :id => 123, :re_workflow => { :title => "value" }
120
+ assigns[:re_workflow].should == @re_workflow
121
+ end
122
+
123
+ it "should assign the re_workflow parameters" do
124
+ @re_workflow.should_receive(:attributes=).with("title" => "name")
125
+ put :update, :id => 123, :re_workflow => { :title => "name" }
126
+ end
127
+
128
+ it "should not assign the re_workflow parameters :code" do
129
+ @re_workflow.should_receive(:attributes=).with("title" => "name")
130
+ put :update, :id => 123, :re_workflow => { :title => "name", :code => "code" }
131
+ end
132
+
133
+ it "should save the re_workflow" do
134
+ @re_workflow.should_receive(:save)
135
+ put :update, :id => 123, :re_workflow => { :title => "name" }
136
+ end
137
+
138
+ describe "save failed" do
139
+ before(:each) do
140
+ @re_workflow.stub!(:save).and_return(false)
141
+ end
142
+
143
+ it "should render the 'edit' template" do
144
+ put :update, :id => 123, :re_workflow => { :title => "name" }
145
+ response.should render_template(:edit)
146
+ end
147
+ end
148
+
149
+ describe "save succeeded" do
150
+ before do
151
+ @re_workflow.stub!(:save).and_return(true)
152
+ end
153
+
154
+ it "should display a flash success message" do
155
+ put :update, :id => 123, :re_workflow => { :title => "name" }
156
+ flash[:success].should_not be_blank
157
+ end
158
+
159
+ it "should redirect to the change re_workflow page for HTML" do
160
+ put :update, :id => 123, :re_workflow => { :title => "name" }
161
+ response.should redirect_to(change_re_workflow_path(@re_workflow))
162
+ end
163
+
164
+ it "should render 'update' template for JAVASCRIPT" do
165
+ xhr :put, :update, :id => 123, :re_workflow => { :title => "name" }
166
+ response.should render_template(:update)
167
+ end
168
+ end
169
+ end
170
+
171
+ describe "destroy" do
172
+ it_should_require_rules_engine_editor_access(:destroy, :id => 123)
173
+
174
+ before do
175
+ @re_workflow = ReWorkflow.make
176
+ ReWorkflow.stub!(:find).and_return(@re_workflow)
177
+ end
178
+
179
+ it "should get the workflow record with the ID" do
180
+ ReWorkflow.should_receive(:find).with("123").and_return(@re_workflow)
181
+ delete :destroy, :id => 123
182
+ assigns[:re_workflow].should == @re_workflow
183
+ end
184
+
185
+ it "should destroy the re_workflow" do
186
+ @re_workflow.should_receive(:destroy)
187
+ delete :destroy, :id => 123
188
+ end
189
+
190
+ it "should display a flash success message" do
191
+ delete :destroy, :id => 123
192
+ flash[:success].should_not be_blank
193
+ end
194
+
195
+ it "should redirect to the re_workflows page for HTML" do
196
+ delete :destroy, :id => 123
197
+ response.should redirect_to(re_workflows_path)
198
+ end
199
+
200
+ it "should redirect to the re_workflows page for JAVASCRIPT" do
201
+ xhr :delete, :destroy, :id => 123
202
+ response.body.should == "window.location.href = '#{re_workflows_path}';"
203
+ end
204
+ end
205
+
206
+ describe "change" do
207
+ it_should_require_rules_engine_editor_access(:change, :id => 123)
208
+
209
+ before(:each) do
210
+ @re_workflow = ReWorkflow.make
211
+ end
212
+
213
+ it "should rediscover all of the rules" do
214
+ RulesEngine::Discovery.should_receive(:discover!)
215
+ get :change, :id => @re_workflow.id
216
+ end
217
+
218
+ it "should get the workflow record with the ID" do
219
+ get :change, :id => @re_workflow.id
220
+ assigns[:re_workflow].should == @re_workflow
221
+ end
222
+ end
223
+
224
+ describe "preview" do
225
+ it_should_require_rules_engine_reader_access(:preview, :id => 123)
226
+
227
+ it "should get the workflow record with the ID" do
228
+ re_workflow = ReWorkflow.make
229
+ ReWorkflow.should_receive(:find).with("123").and_return(re_workflow)
230
+ get :preview, :id => 123
231
+ assigns[:re_workflow].should == re_workflow
232
+ end
233
+ end
234
+
235
+ describe "plan" do
236
+ it_should_require_rules_engine_reader_access(:plan, :id => 123)
237
+
238
+ it "should list the workflows" do
239
+ re_workflow = ReWorkflow.make(:title => 'a')
240
+ re_plan = RePlan.make
241
+ re_plan.re_workflows = [re_workflow]
242
+
243
+ get :plan, :id => re_workflow.id
244
+ assigns[:re_plan_workflows].should == re_workflow.re_plan_workflows
245
+ end
246
+ end
247
+
248
+ describe "add" do
249
+ it_should_require_rules_engine_reader_access(:add)
250
+
251
+ it "should list the workflows to add to a plan" do
252
+ re_workflows = [ReWorkflow.make(:title => 'a'), ReWorkflow.make(:title => 'b')]
253
+ get :add
254
+ assigns[:re_workflows].should == re_workflows
255
+ end
256
+ end
257
+
258
+ describe "copy" do
259
+ it_should_require_rules_engine_editor_access(:copy, :id => 123)
260
+
261
+ before(:each) do
262
+ @re_workflow = ReWorkflow.make
263
+ end
264
+
265
+ it "should assign an empty workflow copy" do
266
+ get :copy, :id => @re_workflow.id
267
+ assigns[:re_workflow].should == @re_workflow
268
+ assigns[:re_workflow_copy].should be_instance_of(ReWorkflow)
269
+ end
270
+ end
271
+
272
+ describe "duplicate" do
273
+ it_should_require_rules_engine_editor_access(:duplicate, :id => 123)
274
+
275
+ before(:each) do
276
+ @re_workflow = ReWorkflow.make
277
+ ReWorkflow.stub!(:find).and_return(@re_workflow)
278
+
279
+ @re_workflow_copy = ReWorkflow.make
280
+ ReWorkflow.stub!(:new).and_return(@re_workflow_copy)
281
+ end
282
+
283
+ it "should use the revert and publish method to copy the parameters" do
284
+ @re_workflow.should_receive(:publish).and_return({:published => "mock value"})
285
+ @re_workflow_copy.should_receive(:revert!).with({:published => "mock value"})
286
+ post :duplicate, :id => 1234, :re_workflow => {:title => 'new title'}
287
+ end
288
+
289
+ it "should update the attributes of the new workflow" do
290
+ post :duplicate, :id => 1234, :re_workflow => {:title => 'new title'}
291
+ @re_workflow_copy.title.should == 'new title'
292
+ end
293
+
294
+ describe "the copied workflow was saved" do
295
+ before(:each) do
296
+ @re_workflow_copy.stub!(:save).and_return(true)
297
+ end
298
+
299
+ it "should display a flash success message" do
300
+ post :duplicate, :id => 1234, :re_workflow => {:title => 'new title'}
301
+ flash[:success].should_not be_blank
302
+ end
303
+
304
+ it "should redirect to the change re_workflow page for HTML" do
305
+ post :duplicate, :id => 1234, :re_workflow => {:title => 'new title'}
306
+ response.should redirect_to(change_re_workflow_path(@re_workflow_copy))
307
+ end
308
+
309
+ it "should redirect to the change re_workflows page for JAVASCRIPT" do
310
+ xhr :post, :duplicate, :id => 1234, :re_workflow => {:title => 'new title'}
311
+ response.body.should == "window.location.href = '#{change_re_workflow_path(@re_workflow_copy)}';"
312
+ end
313
+ end
314
+
315
+ describe "the copied workflow was not saved" do
316
+ before(:each) do
317
+ @re_workflow_copy.stub!(:save).and_return(false)
318
+ end
319
+
320
+ it "should render the 'copy' template" do
321
+ post :duplicate, :id => 1234, :re_workflow => {:title => 'new title'}
322
+ response.should render_template(:copy)
323
+ end
324
+ end
325
+ end
326
+ end