bumbleworks 0.0.74 → 0.0.76

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +1 -1
  3. data/.ruby-version +1 -1
  4. data/bumbleworks.gemspec +2 -2
  5. data/lib/bumbleworks.rb +1 -0
  6. data/lib/bumbleworks/expression.rb +12 -1
  7. data/lib/bumbleworks/process.rb +10 -0
  8. data/lib/bumbleworks/process/error_record.rb +14 -0
  9. data/lib/bumbleworks/schedule.rb +58 -0
  10. data/lib/bumbleworks/task.rb +2 -1
  11. data/lib/bumbleworks/task/finder.rb +4 -0
  12. data/lib/bumbleworks/version.rb +1 -1
  13. data/lib/bumbleworks/workitem.rb +4 -0
  14. data/spec/fixtures/schedules.rb +40 -0
  15. data/spec/integration/entity_spec.rb +7 -7
  16. data/spec/integration/example_configurations_spec.rb +5 -5
  17. data/spec/integration/history_storage_spec.rb +9 -9
  18. data/spec/integration/sample_application_spec.rb +15 -15
  19. data/spec/lib/bumbleworks/configuration_spec.rb +52 -52
  20. data/spec/lib/bumbleworks/entity_spec.rb +66 -68
  21. data/spec/lib/bumbleworks/error_handler_spec.rb +1 -1
  22. data/spec/lib/bumbleworks/error_logger_spec.rb +5 -5
  23. data/spec/lib/bumbleworks/expression_spec.rb +34 -12
  24. data/spec/lib/bumbleworks/hash_storage_spec.rb +2 -2
  25. data/spec/lib/bumbleworks/participant/base_spec.rb +1 -1
  26. data/spec/lib/bumbleworks/participant/entity_interactor_spec.rb +20 -20
  27. data/spec/lib/bumbleworks/participant/error_dispatcher_spec.rb +3 -3
  28. data/spec/lib/bumbleworks/participant/local_participant_spec.rb +1 -1
  29. data/spec/lib/bumbleworks/participant_registration_spec.rb +4 -4
  30. data/spec/lib/bumbleworks/process/error_record_spec.rb +13 -0
  31. data/spec/lib/bumbleworks/process_definition_spec.rb +30 -24
  32. data/spec/lib/bumbleworks/process_spec.rb +86 -54
  33. data/spec/lib/bumbleworks/ruote/exp/broadcast_event_expression_spec.rb +2 -2
  34. data/spec/lib/bumbleworks/ruote/exp/wait_for_event_expression_spec.rb +4 -4
  35. data/spec/lib/bumbleworks/ruote_spec.rb +73 -71
  36. data/spec/lib/bumbleworks/schedule_spec.rb +124 -0
  37. data/spec/lib/bumbleworks/simple_logger_spec.rb +8 -8
  38. data/spec/lib/bumbleworks/storage_adapter_spec.rb +16 -16
  39. data/spec/lib/bumbleworks/support_spec.rb +23 -19
  40. data/spec/lib/bumbleworks/task/finder_spec.rb +46 -46
  41. data/spec/lib/bumbleworks/task_spec.rb +188 -167
  42. data/spec/lib/bumbleworks/tracker_spec.rb +41 -42
  43. data/spec/lib/bumbleworks/tree_builder_spec.rb +9 -7
  44. data/spec/lib/bumbleworks/user_spec.rb +35 -35
  45. data/spec/lib/bumbleworks/workitem_entity_storage_spec.rb +5 -5
  46. data/spec/lib/bumbleworks/workitem_spec.rb +28 -17
  47. data/spec/lib/bumbleworks_spec.rb +57 -51
  48. data/spec/spec_helper.rb +0 -1
  49. data/spec/support/shared_examples.rb +3 -3
  50. metadata +35 -54
@@ -1,5 +1,12 @@
1
1
  describe Bumbleworks::Task do
2
- let(:workflow_item) {Ruote::Workitem.new('fields' => {'params' => {'task' => 'go_to_work'} })}
2
+ let(:workflow_item) {
3
+ Ruote::Workitem.new({
4
+ 'fields' => {
5
+ 'params' => {'task' => 'go_to_work'},
6
+ 'dispatched_at' => 'some time ago'
7
+ }
8
+ })
9
+ }
3
10
 
4
11
  before :each do
5
12
  Bumbleworks::Ruote.register_participants
@@ -14,17 +21,18 @@ describe Bumbleworks::Task do
14
21
  describe '#not_completable_error_message' do
15
22
  it 'defaults to generic message' do
16
23
  task = described_class.new(workflow_item)
17
- task.not_completable_error_message.should ==
24
+ expect(task.not_completable_error_message).to eq(
18
25
  "This task is not currently completable."
26
+ )
19
27
  end
20
28
  end
21
29
 
22
30
  describe '.autoload_all' do
23
31
  it 'autoloads all task modules in directory' do
24
32
  Bumbleworks.root = File.join(fixtures_path, 'apps', 'with_default_directories')
25
- Object.should_receive(:autoload).with(:MakeSomeHoneyTask,
33
+ expect(Object).to receive(:autoload).with(:MakeSomeHoneyTask,
26
34
  File.join(Bumbleworks.root, 'tasks', 'make_some_honey_task.rb'))
27
- Object.should_receive(:autoload).with(:TasteThatMolassesTask,
35
+ expect(Object).to receive(:autoload).with(:TasteThatMolassesTask,
28
36
  File.join(Bumbleworks.root, 'tasks', 'taste_that_molasses_task.rb'))
29
37
  described_class.autoload_all
30
38
  end
@@ -43,9 +51,16 @@ describe Bumbleworks::Task do
43
51
  end
44
52
  end
45
53
 
54
+ describe '#dispatched_at' do
55
+ it 'returns dispatched_at timestamp from workitem' do
56
+ task = described_class.new(workflow_item)
57
+ expect(task.dispatched_at).to eq 'some time ago'
58
+ end
59
+ end
60
+
46
61
  describe '#completable?' do
47
62
  it 'defaults to true on base task' do
48
- described_class.new(workflow_item).should be_completable
63
+ expect(described_class.new(workflow_item)).to be_completable
49
64
  end
50
65
  end
51
66
 
@@ -69,7 +84,7 @@ describe Bumbleworks::Task do
69
84
  end
70
85
 
71
86
  it 'extends new object with task module' do
72
- described_class.any_instance.should_receive(:extend_module)
87
+ expect_any_instance_of(described_class).to receive(:extend_module)
73
88
  described_class.new(workflow_item)
74
89
  end
75
90
  end
@@ -77,11 +92,11 @@ describe Bumbleworks::Task do
77
92
  describe '#reload' do
78
93
  it 'reloads the workitem from the storage participant' do
79
94
  task = described_class.new(workflow_item)
80
- task.stub(:sid).and_return(:the_sid)
81
- Bumbleworks.dashboard.storage_participant.should_receive(
95
+ allow(task).to receive(:sid).and_return(:the_sid)
96
+ expect(Bumbleworks.dashboard.storage_participant).to receive(
82
97
  :[]).with(:the_sid).and_return(:amazing_workitem)
83
98
  task.reload
84
- task.instance_variable_get(:@workitem).should == :amazing_workitem
99
+ expect(task.instance_variable_get(:@workitem)).to eq(:amazing_workitem)
85
100
  end
86
101
  end
87
102
 
@@ -91,9 +106,9 @@ describe Bumbleworks::Task do
91
106
  observer1, observer2 = double('observer1'), double('observer2')
92
107
  Bumbleworks.observers = [observer1, observer2]
93
108
  task = described_class.new(workflow_item)
94
- task.should_receive(:"#{phase}_snoogle").with(:chachunga, :faloop)
95
- observer1.should_receive(:"#{phase}_snoogle").with(:chachunga, :faloop)
96
- observer2.should_receive(:"#{phase}_snoogle").with(:chachunga, :faloop)
109
+ expect(task).to receive(:"#{phase}_snoogle").with(:chachunga, :faloop)
110
+ expect(observer1).to receive(:"#{phase}_snoogle").with(:chachunga, :faloop)
111
+ expect(observer2).to receive(:"#{phase}_snoogle").with(:chachunga, :faloop)
97
112
  task.send(:"call_#{phase}_hooks", :snoogle, :chachunga, :faloop)
98
113
  end
99
114
  end
@@ -109,7 +124,7 @@ describe Bumbleworks::Task do
109
124
  end
110
125
 
111
126
  it 'is called when task is dispatched' do
112
- described_class.any_instance.should_receive(:on_dispatch)
127
+ expect_any_instance_of(described_class).to receive(:on_dispatch)
113
128
  Bumbleworks.launch!('planting_a_noodle')
114
129
  Bumbleworks.dashboard.wait_for(:horse_feeder)
115
130
  end
@@ -119,15 +134,15 @@ describe Bumbleworks::Task do
119
134
  Bumbleworks.dashboard.wait_for(:horse_feeder)
120
135
  task = described_class.for_role('horse_feeder').first
121
136
  log_entry = Bumbleworks.logger.entries.last[:entry]
122
- log_entry[:action].should == :dispatch
123
- log_entry[:target_type].should == 'Task'
124
- log_entry[:target_id].should == task.id
137
+ expect(log_entry[:action]).to eq(:dispatch)
138
+ expect(log_entry[:target_type]).to eq('Task')
139
+ expect(log_entry[:target_id]).to eq(task.id)
125
140
  end
126
141
 
127
142
  it 'calls after hooks' do
128
143
  task = described_class.new(workflow_item)
129
- task.stub(:log)
130
- task.should_receive(:call_after_hooks).with(:dispatch)
144
+ allow(task).to receive(:log)
145
+ expect(task).to receive(:call_after_hooks).with(:dispatch)
131
146
  task.on_dispatch
132
147
  end
133
148
  end
@@ -135,22 +150,22 @@ describe Bumbleworks::Task do
135
150
  describe '#extend_module' do
136
151
  it 'extends with base module and task module' do
137
152
  task = described_class.new(workflow_item)
138
- task.should_receive(:task_module).and_return(:task_module_double)
139
- task.should_receive(:extend).with(Bumbleworks::Task::Base).ordered
140
- task.should_receive(:extend).with(:task_module_double).ordered
153
+ expect(task).to receive(:task_module).and_return(:task_module_double)
154
+ expect(task).to receive(:extend).with(Bumbleworks::Task::Base).ordered
155
+ expect(task).to receive(:extend).with(:task_module_double).ordered
141
156
  task.extend_module
142
157
  end
143
158
 
144
159
  it 'extends only with base module if no nickname' do
145
160
  task = described_class.new(workflow_item)
146
- task.stub(:nickname).and_return(nil)
147
- task.should_receive(:extend).with(Bumbleworks::Task::Base)
161
+ allow(task).to receive(:nickname).and_return(nil)
162
+ expect(task).to receive(:extend).with(Bumbleworks::Task::Base)
148
163
  task.extend_module
149
164
  end
150
165
 
151
166
  it 'extends only with base module if task module does not exist' do
152
167
  task = described_class.new(workflow_item)
153
- task.should_receive(:extend).with(Bumbleworks::Task::Base)
168
+ expect(task).to receive(:extend).with(Bumbleworks::Task::Base)
154
169
  task.extend_module
155
170
  end
156
171
  end
@@ -158,21 +173,21 @@ describe Bumbleworks::Task do
158
173
  describe '#task_module' do
159
174
  it 'returns nil if no nickname' do
160
175
  task = described_class.new(workflow_item)
161
- task.stub(:nickname).and_return(nil)
162
- task.task_module.should be_nil
176
+ allow(task).to receive(:nickname).and_return(nil)
177
+ expect(task.task_module).to be_nil
163
178
  end
164
179
 
165
180
  it 'returns constantized task nickname with "Task" appended' do
166
181
  task = described_class.new(workflow_item)
167
- Bumbleworks::Support.stub(:constantize).with("GoToWorkTask").and_return(:the_task_module)
168
- task.task_module.should == :the_task_module
182
+ allow(Bumbleworks::Support).to receive(:constantize).with("GoToWorkTask").and_return(:the_task_module)
183
+ expect(task.task_module).to eq(:the_task_module)
169
184
  end
170
185
  end
171
186
 
172
187
  describe '#id' do
173
188
  it 'returns the sid from the workitem' do
174
- workflow_item.stub(:sid).and_return(:an_exciting_id)
175
- described_class.new(workflow_item).id.should == :an_exciting_id
189
+ allow(workflow_item).to receive(:sid).and_return(:an_exciting_id)
190
+ expect(described_class.new(workflow_item).id).to eq(:an_exciting_id)
176
191
  end
177
192
  end
178
193
 
@@ -191,10 +206,12 @@ describe Bumbleworks::Task do
191
206
 
192
207
  # checking for equality by comparing sid, which is the flow expression id
193
208
  # that identifies not only the expression, but its instance
194
- described_class.find_by_id(plant_noodle_seed_task.id).sid.should ==
209
+ expect(described_class.find_by_id(plant_noodle_seed_task.id).sid).to eq(
195
210
  plant_noodle_seed_task.sid
196
- described_class.find_by_id(give_the_horse_a_bon_bon_task.id).sid.should ==
211
+ )
212
+ expect(described_class.find_by_id(give_the_horse_a_bon_bon_task.id).sid).to eq(
197
213
  give_the_horse_a_bon_bon_task.sid
214
+ )
198
215
  end
199
216
 
200
217
  it 'raises an error if id is nil' do
@@ -238,37 +255,37 @@ describe Bumbleworks::Task do
238
255
  describe '.order_by_param' do
239
256
  it 'orders returned tasks by given param ascending by default' do
240
257
  tasks = described_class.order_by_param(:priority)
241
- tasks.map(&:nickname).should == [
258
+ expect(tasks.map(&:nickname)).to eq([
242
259
  'appear_authoritative',
243
260
  'panic',
244
261
  'evince_concern',
245
262
  'roll_eyes',
246
263
  'sit_quietly'
247
- ]
264
+ ])
248
265
  end
249
266
 
250
267
  it 'can order in reverse' do
251
268
  tasks = described_class.order_by_param(:priority, :desc)
252
- tasks.map(&:nickname).should == [
269
+ expect(tasks.map(&:nickname)).to eq([
253
270
  'sit_quietly',
254
271
  'roll_eyes',
255
272
  'evince_concern',
256
273
  'panic',
257
274
  'appear_authoritative'
258
- ]
275
+ ])
259
276
  end
260
277
  end
261
278
 
262
279
  describe '.order_by_params' do
263
280
  it 'orders by multiple parameters' do
264
281
  tasks = described_class.order_by_params(:importance => :desc, :priority => :asc)
265
- tasks.map(&:nickname).should == [
282
+ expect(tasks.map(&:nickname)).to eq([
266
283
  'appear_authoritative',
267
284
  'evince_concern',
268
285
  'roll_eyes',
269
286
  'sit_quietly',
270
287
  'panic'
271
- ]
288
+ ])
272
289
  end
273
290
  end
274
291
  end
@@ -290,37 +307,37 @@ describe Bumbleworks::Task do
290
307
  describe '.order_by_field' do
291
308
  it 'orders returned tasks by given param ascending by default' do
292
309
  tasks = described_class.for_role('doctor').order_by_field(:strength)
293
- tasks.map { |t| [t.nickname, t.wfid] }.should == [
310
+ expect(tasks.map { |t| [t.nickname, t.wfid] }).to eq([
294
311
  ['evince_concern', @wf1.wfid],
295
312
  ['evince_concern', @wf2.wfid],
296
313
  ['evince_concern', @wf3.wfid],
297
314
  ['evince_concern', @wf4.wfid],
298
315
  ['evince_concern', @wf5.wfid]
299
- ]
316
+ ])
300
317
  end
301
318
 
302
319
  it 'can order in reverse' do
303
320
  tasks = described_class.for_role('doctor').order_by_field(:strength, :desc)
304
- tasks.map { |t| [t.nickname, t.wfid] }.should == [
321
+ expect(tasks.map { |t| [t.nickname, t.wfid] }).to eq([
305
322
  ['evince_concern', @wf5.wfid],
306
323
  ['evince_concern', @wf4.wfid],
307
324
  ['evince_concern', @wf3.wfid],
308
325
  ['evince_concern', @wf2.wfid],
309
326
  ['evince_concern', @wf1.wfid]
310
- ]
327
+ ])
311
328
  end
312
329
  end
313
330
 
314
331
  describe '.order_by_fields' do
315
332
  it 'orders by multiple parameters' do
316
333
  tasks = described_class.for_role('doctor').order_by_fields(:group => :asc, :strength => :desc)
317
- tasks.map { |t| [t.nickname, t.wfid] }.should == [
334
+ expect(tasks.map { |t| [t.nickname, t.wfid] }).to eq([
318
335
  ['evince_concern', @wf5.wfid],
319
336
  ['evince_concern', @wf4.wfid],
320
337
  ['evince_concern', @wf2.wfid],
321
338
  ['evince_concern', @wf3.wfid],
322
339
  ['evince_concern', @wf1.wfid]
323
- ]
340
+ ])
324
341
  end
325
342
  end
326
343
  end
@@ -342,34 +359,34 @@ describe Bumbleworks::Task do
342
359
  it 'returns tasks for all given roles' do
343
360
  Bumbleworks.dashboard.wait_for(:father)
344
361
  tasks = described_class.for_roles(['heckler', 'mother'])
345
- tasks.map(&:nickname).should == [
362
+ expect(tasks.map(&:nickname)).to eq([
346
363
  'comment_on_dancing_ability',
347
364
  'ignore_pleas_for_attention'
348
- ]
365
+ ])
349
366
  end
350
367
 
351
368
  it 'works with symbolized role names' do
352
369
  Bumbleworks.dashboard.wait_for(:father)
353
370
  tasks = described_class.for_roles([:heckler, :mother])
354
- tasks.map(&:nickname).should == [
371
+ expect(tasks.map(&:nickname)).to eq([
355
372
  'comment_on_dancing_ability',
356
373
  'ignore_pleas_for_attention'
357
- ]
374
+ ])
358
375
  end
359
376
 
360
377
  it 'returns empty array if no tasks found for given roles' do
361
378
  Bumbleworks.dashboard.wait_for(:father)
362
- described_class.for_roles(['elephant']).should be_empty
379
+ expect(described_class.for_roles(['elephant'])).to be_empty
363
380
  end
364
381
 
365
382
  it 'returns empty array if given empty array' do
366
383
  Bumbleworks.dashboard.wait_for(:father)
367
- described_class.for_roles([]).should be_empty
384
+ expect(described_class.for_roles([])).to be_empty
368
385
  end
369
386
 
370
387
  it 'returns empty array if given nil' do
371
388
  Bumbleworks.dashboard.wait_for(:father)
372
- described_class.for_roles(nil).should be_empty
389
+ expect(described_class.for_roles(nil)).to be_empty
373
390
  end
374
391
  end
375
392
 
@@ -398,33 +415,33 @@ describe Bumbleworks::Task do
398
415
  rooting_tasks = described_class.for_processes([@rooting_process_1])
399
416
  tasks_for_both = described_class.for_processes([@spunking_process, @rooting_process_1])
400
417
 
401
- spunking_tasks.map(&:nickname).should =~ ['spunk', 'complain']
402
- rooting_tasks.map(&:nickname).should =~ ['get_the_rooting_on', 'scoff']
403
- tasks_for_both.map(&:nickname).should =~ ['spunk', 'complain', 'get_the_rooting_on', 'scoff']
418
+ expect(spunking_tasks.map(&:nickname)).to match_array(['spunk', 'complain'])
419
+ expect(rooting_tasks.map(&:nickname)).to match_array(['get_the_rooting_on', 'scoff'])
420
+ expect(tasks_for_both.map(&:nickname)).to match_array(['spunk', 'complain', 'get_the_rooting_on', 'scoff'])
404
421
  end
405
422
 
406
423
  it 'works with process ids as well' do
407
424
  spunking_tasks = described_class.for_processes([@spunking_process.id])
408
- spunking_tasks.map(&:nickname).should =~ ['spunk', 'complain']
425
+ expect(spunking_tasks.map(&:nickname)).to match_array(['spunk', 'complain'])
409
426
  end
410
427
 
411
428
  it 'returns empty array when no tasks for given process id' do
412
- described_class.for_processes(['boop']).should be_empty
429
+ expect(described_class.for_processes(['boop'])).to be_empty
413
430
  end
414
431
 
415
432
  it 'returns empty array if given empty array' do
416
- described_class.for_processes([]).should be_empty
433
+ expect(described_class.for_processes([])).to be_empty
417
434
  end
418
435
 
419
436
  it 'returns empty array if given nil' do
420
- described_class.for_processes(nil).should be_empty
437
+ expect(described_class.for_processes(nil)).to be_empty
421
438
  end
422
439
  end
423
440
 
424
441
  describe '.for_process' do
425
442
  it 'acts as shortcut to .for_processes with one process' do
426
- described_class::Finder.any_instance.should_receive(:for_processes).with([:one_guy]).and_return(:aha)
427
- described_class.for_process(:one_guy).should == :aha
443
+ allow_any_instance_of(described_class::Finder).to receive(:for_processes).with([:one_guy]).and_return(:aha)
444
+ expect(described_class.for_process(:one_guy)).to eq(:aha)
428
445
  end
429
446
  end
430
447
 
@@ -441,10 +458,10 @@ describe Bumbleworks::Task do
441
458
  Bumbleworks.dashboard.wait_for(:hagrid)
442
459
 
443
460
  tasks = described_class.for_role('chalker')
444
- tasks.map(&:nickname).should == [
461
+ expect(tasks.map(&:nickname)).to eq([
445
462
  'make_chalk_drawings',
446
463
  'chalk_it_good_baby'
447
- ]
464
+ ])
448
465
  end
449
466
  end
450
467
 
@@ -462,12 +479,12 @@ describe Bumbleworks::Task do
462
479
  Bumbleworks.launch!('dog-lifecycle')
463
480
  Bumbleworks.dashboard.wait_for(:cat)
464
481
  @unclaimed = described_class.unclaimed
465
- @unclaimed.map(&:nickname).should =~ ['eat', 'bark', 'pet_dog', 'skip_and_jump']
482
+ expect(@unclaimed.map(&:nickname)).to match_array(['eat', 'bark', 'pet_dog', 'skip_and_jump'])
466
483
  described_class.all.each do |t|
467
484
  t.claim('radish') unless ['pet_dog', 'bark'].include?(t.nickname)
468
485
  end
469
486
  @unclaimed = described_class.unclaimed
470
- @unclaimed.map(&:nickname).should =~ ['pet_dog', 'bark']
487
+ expect(@unclaimed.map(&:nickname)).to match_array(['pet_dog', 'bark'])
471
488
  end
472
489
  end
473
490
 
@@ -484,12 +501,12 @@ describe Bumbleworks::Task do
484
501
  end
485
502
  Bumbleworks.launch!('dog-lifecycle')
486
503
  Bumbleworks.dashboard.wait_for(:cat)
487
- described_class.claimed.should be_empty
504
+ expect(described_class.claimed).to be_empty
488
505
  described_class.all.each_with_index do |t, i|
489
506
  t.claim("radish_#{i}") unless ['pet_dog', 'bark'].include?(t.nickname)
490
507
  end
491
508
  @claimed = described_class.claimed
492
- @claimed.map(&:nickname).should =~ ['eat', 'skip_and_jump']
509
+ expect(@claimed.map(&:nickname)).to match_array(['eat', 'skip_and_jump'])
493
510
  end
494
511
  end
495
512
 
@@ -511,16 +528,14 @@ describe Bumbleworks::Task do
511
528
  Bumbleworks.launch!('hand_waggling')
512
529
  Bumbleworks.dashboard.wait_for(:a_lady)
513
530
  tasks = described_class.completable
514
- tasks.should have(2).items
515
- tasks.map { |t| [t.role, t.nickname] }.should == [
531
+ expect(tasks.map { |t| [t.role, t.nickname] }).to eq([
516
532
  ['a_fella', 'waggle_hands'],
517
533
  ['a_lady', 'wiggle_hands']
518
- ]
534
+ ])
519
535
  tasks = described_class.completable(false)
520
- tasks.should have(1).item
521
- tasks.map { |t| [t.role, t.nickname] }.should == [
536
+ expect(tasks.map { |t| [t.role, t.nickname] }).to eq([
522
537
  ['a_monkey', 'wuggle_hands']
523
- ]
538
+ ])
524
539
  end
525
540
  end
526
541
 
@@ -542,21 +557,21 @@ describe Bumbleworks::Task do
542
557
  it 'executes for each found task' do
543
558
  list = []
544
559
  described_class.each { |t| list << t.nickname }
545
- list.should =~ ['grouch_it_up', 'sing_a_tune', 'steal_booze', 'eat_cabbage']
560
+ expect(list).to match_array(['grouch_it_up', 'sing_a_tune', 'steal_booze', 'eat_cabbage'])
546
561
  end
547
562
  end
548
563
 
549
564
  describe '.map' do
550
565
  it 'maps result of yielding block with each task' do
551
566
  list = described_class.map { |t| t.nickname }
552
- list.should =~ ['grouch_it_up', 'sing_a_tune', 'steal_booze', 'eat_cabbage']
567
+ expect(list).to match_array(['grouch_it_up', 'sing_a_tune', 'steal_booze', 'eat_cabbage'])
553
568
  end
554
569
  end
555
570
 
556
571
  context 'with queries' do
557
572
  it 'checks filters' do
558
573
  list = described_class.for_role('elmo').map { |t| t.nickname }
559
- list.should =~ ['sing_a_tune', 'steal_booze']
574
+ expect(list).to match_array(['sing_a_tune', 'steal_booze'])
560
575
  end
561
576
  end
562
577
  end
@@ -579,20 +594,19 @@ describe Bumbleworks::Task do
579
594
  it 'returns all tasks (with task param) in queue regardless of role' do
580
595
  Bumbleworks.dashboard.wait_for(:dog_legs)
581
596
  tasks = described_class.all
582
- tasks.should have(4).items
583
- tasks.map { |t| [t.role, t.nickname] }.should == [
597
+ expect(tasks.map { |t| [t.role, t.nickname] }).to eq([
584
598
  ['dog_teeth', 'eat'],
585
599
  ['dog_mouth', 'bark'],
586
600
  ['everyone', 'pet_dog'],
587
601
  ['dog_legs', 'skip_and_jump']
588
- ]
602
+ ])
589
603
  end
590
604
 
591
605
  it 'uses subclass for generation of tasks' do
592
606
  class MyOwnTask < Bumbleworks::Task; end
593
607
  Bumbleworks.dashboard.wait_for(:dog_legs)
594
608
  tasks = MyOwnTask.all
595
- tasks.should be_all { |t| t.class == MyOwnTask }
609
+ expect(tasks).to be_all { |t| t.class == MyOwnTask }
596
610
  Object.send(:remove_const, :MyOwnTask)
597
611
  end
598
612
  end
@@ -601,25 +615,25 @@ describe Bumbleworks::Task do
601
615
  subject{described_class.new(workflow_item)}
602
616
  it 'sets values on workitem fields' do
603
617
  subject['hive'] = 'bees at work'
604
- workflow_item.fields['hive'].should == 'bees at work'
618
+ expect(workflow_item.fields['hive']).to eq('bees at work')
605
619
  end
606
620
 
607
621
  it 'retuns value from workitem params' do
608
622
  workflow_item.fields['nest'] = 'queen resting'
609
- subject['nest'].should == 'queen resting'
623
+ expect(subject['nest']).to eq('queen resting')
610
624
  end
611
625
  end
612
626
 
613
627
  describe '#nickname' do
614
628
  it 'returns the "task" param' do
615
- described_class.new(workflow_item).nickname.should == 'go_to_work'
629
+ expect(described_class.new(workflow_item).nickname).to eq('go_to_work')
616
630
  end
617
631
 
618
632
  it 'is immutable; cannot be changed by modifying the param' do
619
633
  task = described_class.new(workflow_item)
620
- task.nickname.should == 'go_to_work'
634
+ expect(task.nickname).to eq('go_to_work')
621
635
  task.params['task'] = 'what_is_wrong_with_you?'
622
- task.nickname.should == 'go_to_work'
636
+ expect(task.nickname).to eq('go_to_work')
623
637
  end
624
638
  end
625
639
 
@@ -630,7 +644,7 @@ describe Bumbleworks::Task do
630
644
  end
631
645
  Bumbleworks.launch!('planting_a_noodle')
632
646
  Bumbleworks.dashboard.wait_for(:noodle_gardener)
633
- described_class.all.first.role.should == 'noodle_gardener'
647
+ expect(described_class.all.first.role).to eq('noodle_gardener')
634
648
  end
635
649
  end
636
650
 
@@ -648,13 +662,12 @@ describe Bumbleworks::Task do
648
662
  end
649
663
  Bumbleworks.launch!('dog-lifecycle')
650
664
  Bumbleworks.dashboard.wait_for(:cat)
651
- described_class.for_claimant('radish').should be_empty
665
+ expect(described_class.for_claimant('radish')).to be_empty
652
666
  described_class.all.each do |t|
653
667
  t.claim('radish') unless t.nickname == 'pet_dog'
654
668
  end
655
669
  @tasks = described_class.for_claimant('radish')
656
- @tasks.should have(3).items
657
- @tasks.map(&:nickname).should =~ ['eat', 'bark', 'skip_and_jump']
670
+ expect(@tasks.map(&:nickname)).to match_array(['eat', 'bark', 'skip_and_jump'])
658
671
  end
659
672
  end
660
673
 
@@ -680,20 +693,20 @@ describe Bumbleworks::Task do
680
693
  end
681
694
 
682
695
  it 'returns all tasks with given field' do
683
- described_class.with_fields(:grumbles => true).count.should == 3
684
- described_class.with_fields(:bumby => 'fancy').count.should == 1
685
- described_class.with_fields(:bumby => 'not_fancy').count.should == 2
686
- described_class.with_fields(:what => 'ever').should be_empty
696
+ expect(described_class.with_fields(:grumbles => true).count).to eq(3)
697
+ expect(described_class.with_fields(:bumby => 'fancy').count).to eq(1)
698
+ expect(described_class.with_fields(:bumby => 'not_fancy').count).to eq(2)
699
+ expect(described_class.with_fields(:what => 'ever')).to be_empty
687
700
  end
688
701
 
689
702
  it 'looks up multiple fields at once' do
690
- described_class.with_fields(:grumbles => true, :bumby => 'not_fancy').count.should == 2
691
- described_class.with_fields(:grumbles => false, :bumby => 'not_fancy').should be_empty
703
+ expect(described_class.with_fields(:grumbles => true, :bumby => 'not_fancy').count).to eq(2)
704
+ expect(described_class.with_fields(:grumbles => false, :bumby => 'not_fancy')).to be_empty
692
705
  end
693
706
 
694
707
  it 'can be chained' do
695
- described_class.with_fields(:grumbles => true).with_fields(:bumby => 'fancy').count.should == 1
696
- described_class.with_fields(:grumbles => false).with_fields(:bumby => 'not_fancy').should be_empty
708
+ expect(described_class.with_fields(:grumbles => true).with_fields(:bumby => 'fancy').count).to eq(1)
709
+ expect(described_class.with_fields(:grumbles => false).with_fields(:bumby => 'not_fancy')).to be_empty
697
710
  end
698
711
  end
699
712
 
@@ -709,7 +722,7 @@ describe Bumbleworks::Task do
709
722
  Bumbleworks.launch!('existential_pb_and_j', :entity => fake_sandwich)
710
723
  Bumbleworks.dashboard.wait_for(:sandwich)
711
724
  tasks = described_class.for_entity(fake_sandwich)
712
- tasks.should have(2).items
725
+ expect(tasks.size).to eq(2)
713
726
  end
714
727
  end
715
728
 
@@ -725,8 +738,7 @@ describe Bumbleworks::Task do
725
738
  Bumbleworks.launch!('animal_disagreements')
726
739
  Bumbleworks.dashboard.wait_for(:rabbit)
727
740
  tasks = described_class.by_nickname('punch_turtle')
728
- tasks.should have(2).items
729
- tasks.map(&:role).should =~ ['goose', 'rabbit']
741
+ expect(tasks.map(&:role)).to match_array(['goose', 'rabbit'])
730
742
  end
731
743
  end
732
744
 
@@ -743,11 +755,11 @@ describe Bumbleworks::Task do
743
755
 
744
756
  describe '#claim' do
745
757
  it 'sets token on "claimant" param' do
746
- @task.params['claimant'].should == 'boss'
758
+ expect(@task.params['claimant']).to eq('boss')
747
759
  end
748
760
 
749
761
  it 'sets claimed_at param' do
750
- @task.params['claimed_at'].should_not be_nil
762
+ expect(@task.params['claimed_at']).not_to be_nil
751
763
  end
752
764
 
753
765
  it 'raises an error if already claimed by someone else' do
@@ -760,67 +772,67 @@ describe Bumbleworks::Task do
760
772
 
761
773
  it 'calls before_claim and after_claim callbacks' do
762
774
  task = described_class.new(workflow_item)
763
- task.stub(:log)
764
- task.should_receive(:before_claim).with(:doctor_claim).ordered
765
- task.should_receive(:set_claimant).ordered
766
- task.should_receive(:after_claim).with(:doctor_claim).ordered
775
+ allow(task).to receive(:log)
776
+ expect(task).to receive(:before_claim).with(:doctor_claim).ordered
777
+ expect(task).to receive(:set_claimant).ordered
778
+ expect(task).to receive(:after_claim).with(:doctor_claim).ordered
767
779
  task.claim(:doctor_claim)
768
780
  end
769
781
 
770
782
  it 'logs event' do
771
783
  log_entry = Bumbleworks.logger.entries.last[:entry]
772
- log_entry[:action].should == :claim
773
- log_entry[:actor].should == 'boss'
784
+ expect(log_entry[:action]).to eq(:claim)
785
+ expect(log_entry[:actor]).to eq('boss')
774
786
  end
775
787
  end
776
788
 
777
789
  describe '#claimant' do
778
790
  it 'returns token of who has claim' do
779
- @task.claimant.should == 'boss'
791
+ expect(@task.claimant).to eq('boss')
780
792
  end
781
793
  end
782
794
 
783
795
  describe '#claimed_at' do
784
796
  it 'returns claimed_at param' do
785
- @task.claimed_at.should == @task.params['claimed_at']
797
+ expect(@task.claimed_at).to eq(@task.params['claimed_at'])
786
798
  end
787
799
  end
788
800
 
789
801
  describe '#claimed?' do
790
802
  it 'returns true if claimed' do
791
- @task.claimed?.should be_true
803
+ expect(@task.claimed?).to be_truthy
792
804
  end
793
805
 
794
806
  it 'false otherwise' do
795
807
  @task.params['claimant'] = nil
796
- @task.claimed?.should be_false
808
+ expect(@task.claimed?).to be_falsy
797
809
  end
798
810
  end
799
811
 
800
812
  describe '#release' do
801
813
  it "release claim on workitem" do
802
- @task.should be_claimed
814
+ expect(@task).to be_claimed
803
815
  @task.release
804
- @task.should_not be_claimed
816
+ expect(@task).not_to be_claimed
805
817
  end
806
818
 
807
819
  it 'clears claimed_at param' do
808
820
  @task.release
809
- @task.params['claimed_at'].should be_nil
821
+ expect(@task.params['claimed_at']).to be_nil
810
822
  end
811
823
 
812
824
  it 'calls with hooks' do
813
- @task.should_receive(:call_before_hooks).with(:release, 'boss').ordered
814
- @task.should_receive(:set_claimant).ordered
815
- @task.should_receive(:call_after_hooks).with(:release, 'boss').ordered
825
+ expect(@task).to receive(:call_before_hooks).with(:release, 'boss').ordered
826
+ expect(@task).to receive(:set_claimant).ordered
827
+ expect(@task).to receive(:call_after_hooks).with(:release, 'boss').ordered
816
828
  @task.release
817
829
  end
818
830
 
819
831
  it 'logs event' do
820
832
  @task.release
821
833
  log_entry = Bumbleworks.logger.entries.last[:entry]
822
- log_entry[:action].should == :release
823
- log_entry[:actor].should == 'boss'
834
+ expect(log_entry[:action]).to eq(:release)
835
+ expect(log_entry[:actor]).to eq('boss')
824
836
  end
825
837
  end
826
838
  end
@@ -842,27 +854,36 @@ describe Bumbleworks::Task do
842
854
  task.fields['meal'] = 'salted_rhubarb'
843
855
  task.update
844
856
  task = described_class.for_role('dog_mouth').first
845
- task.params['state'].should == 'is ready'
846
- task.fields['meal'].should == 'salted_rhubarb'
857
+ expect(task.params['state']).to eq('is ready')
858
+ expect(task.fields['meal']).to eq('salted_rhubarb')
847
859
  end
848
860
 
849
861
  it 'calls with hooks' do
850
862
  task = described_class.new(workflow_item)
851
- task.stub(:log)
852
- task.should_receive(:call_before_hooks).with(:update, :argue_mints).ordered
853
- task.should_receive(:update_workitem).ordered
854
- task.should_receive(:call_after_hooks).with(:update, :argue_mints).ordered
863
+ allow(task).to receive(:log)
864
+ expect(task).to receive(:call_before_hooks).with(:update, :argue_mints).ordered
865
+ expect(task).to receive(:update_workitem).ordered
866
+ expect(task).to receive(:call_after_hooks).with(:update, :argue_mints).ordered
855
867
  task.update(:argue_mints)
856
868
  end
857
869
 
870
+ it 'reloads after updating workitem' do
871
+ event = Bumbleworks.dashboard.wait_for :dog_mouth
872
+ task = described_class.for_role('dog_mouth').first
873
+ allow(task).to receive(:log)
874
+ expect(described_class.storage_participant).to receive(:update).with(task.workitem).ordered
875
+ expect(task).to receive(:reload).ordered
876
+ task.update(:noofles)
877
+ end
878
+
858
879
  it 'logs event' do
859
880
  event = Bumbleworks.dashboard.wait_for :dog_mouth
860
881
  task = described_class.for_role('dog_mouth').first
861
882
  task.params['claimant'] = :some_user
862
883
  task.update(:extra_data => :fancy)
863
- Bumbleworks.logger.entries.last.should == {
884
+ expect(Bumbleworks.logger.entries.last).to eq({
864
885
  :level => :info, :entry => {
865
- :actor => :some_user,
886
+ :actor => "some_user", # claimant is a string after #reload
866
887
  :action => :update,
867
888
  :target_type => 'Task',
868
889
  :target_id => task.id,
@@ -871,7 +892,7 @@ describe Bumbleworks::Task do
871
892
  :current_fields => task.fields
872
893
  }
873
894
  }
874
- }
895
+ })
875
896
  end
876
897
  end
877
898
 
@@ -882,37 +903,37 @@ describe Bumbleworks::Task do
882
903
  task.params['state'] = 'is ready'
883
904
  task.fields['meal'] = 'root beer and a kite'
884
905
  task.complete
885
- described_class.for_role('dog_mouth').should be_empty
906
+ expect(described_class.for_role('dog_mouth')).to be_empty
886
907
  event = Bumbleworks.dashboard.wait_for :dog_brain
887
908
  task = described_class.for_role('dog_brain').first
888
- task.params['state'].should be_nil
889
- task.fields['meal'].should == 'root beer and a kite'
909
+ expect(task.params['state']).to be_nil
910
+ expect(task.fields['meal']).to eq('root beer and a kite')
890
911
  end
891
912
 
892
913
  it 'throws exception if task is not completable' do
893
914
  event = Bumbleworks.dashboard.wait_for :dog_mouth
894
915
  task = described_class.for_role('dog_mouth').first
895
- task.stub(:completable?).and_return(false)
896
- task.stub(:not_completable_error_message).and_return('hogwash!')
897
- task.should_receive(:before_update).never
898
- task.should_receive(:before_complete).never
899
- task.should_receive(:proceed_workitem).never
900
- task.should_receive(:after_complete).never
901
- task.should_receive(:after_update).never
916
+ allow(task).to receive(:completable?).and_return(false)
917
+ allow(task).to receive(:not_completable_error_message).and_return('hogwash!')
918
+ expect(task).to receive(:before_update).never
919
+ expect(task).to receive(:before_complete).never
920
+ expect(task).to receive(:proceed_workitem).never
921
+ expect(task).to receive(:after_complete).never
922
+ expect(task).to receive(:after_update).never
902
923
  expect {
903
924
  task.complete
904
925
  }.to raise_error(Bumbleworks::Task::NotCompletable, "hogwash!")
905
- described_class.for_role('dog_mouth').should_not be_empty
926
+ expect(described_class.for_role('dog_mouth')).not_to be_empty
906
927
  end
907
928
 
908
929
  it 'calls update and complete callbacks' do
909
930
  task = described_class.new(workflow_item)
910
- task.stub(:log)
911
- task.should_receive(:call_before_hooks).with(:update, :argue_mints).ordered
912
- task.should_receive(:call_before_hooks).with(:complete, :argue_mints).ordered
913
- task.should_receive(:proceed_workitem).ordered
914
- task.should_receive(:call_after_hooks).with(:complete, :argue_mints).ordered
915
- task.should_receive(:call_after_hooks).with(:update, :argue_mints).ordered
931
+ allow(task).to receive(:log)
932
+ expect(task).to receive(:call_before_hooks).with(:update, :argue_mints).ordered
933
+ expect(task).to receive(:call_before_hooks).with(:complete, :argue_mints).ordered
934
+ expect(task).to receive(:proceed_workitem).ordered
935
+ expect(task).to receive(:call_after_hooks).with(:complete, :argue_mints).ordered
936
+ expect(task).to receive(:call_after_hooks).with(:update, :argue_mints).ordered
916
937
  task.complete(:argue_mints)
917
938
  end
918
939
 
@@ -921,7 +942,7 @@ describe Bumbleworks::Task do
921
942
  task = described_class.for_role('dog_mouth').first
922
943
  task.params['claimant'] = :some_user
923
944
  task.complete(:extra_data => :fancy)
924
- Bumbleworks.logger.entries.last.should == {
945
+ expect(Bumbleworks.logger.entries.last).to eq({
925
946
  :level => :info, :entry => {
926
947
  :actor => :some_user,
927
948
  :action => :complete,
@@ -932,7 +953,7 @@ describe Bumbleworks::Task do
932
953
  :current_fields => task.fields
933
954
  }
934
955
  }
935
- }
956
+ })
936
957
  end
937
958
  end
938
959
  end
@@ -966,37 +987,37 @@ describe Bumbleworks::Task do
966
987
  tasks = described_class.
967
988
  for_roles(['green', 'pink']).
968
989
  by_nickname('be_proud')
969
- tasks.map(&:nickname).should =~ ['be_proud', 'be_proud']
990
+ expect(tasks.map(&:nickname)).to match_array(['be_proud', 'be_proud'])
970
991
 
971
992
  tasks = described_class.
972
993
  for_roles(['green', 'pink', 'blue']).
973
994
  completable.
974
995
  by_nickname('be_proud')
975
- tasks.map(&:nickname).should =~ ['be_proud']
976
- tasks.first.role.should == 'pink'
996
+ expect(tasks.map(&:nickname)).to match_array(['be_proud'])
997
+ expect(tasks.first.role).to eq('pink')
977
998
 
978
999
  tasks = described_class.
979
1000
  for_claimant('crayon_box').
980
1001
  for_roles(['red', 'yellow', 'green'])
981
- tasks.map(&:nickname).should =~ ['be_really_mad', 'be_scared']
1002
+ expect(tasks.map(&:nickname)).to match_array(['be_really_mad', 'be_scared'])
982
1003
 
983
1004
  tasks = described_class.
984
1005
  for_claimant('crayon_box').
985
1006
  by_nickname('be_a_bit_sad').
986
1007
  for_role('blue')
987
- tasks.map(&:nickname).should == ['be_a_bit_sad']
1008
+ expect(tasks.map(&:nickname)).to eq(['be_a_bit_sad'])
988
1009
  end
989
1010
 
990
1011
  it 'allows for OR-ed chained finders' do
991
1012
  tasks = described_class.where_any.
992
1013
  for_role('blue').
993
1014
  by_nickname('be_proud')
994
- tasks.map(&:nickname).should =~ ['be_a_bit_sad', 'be_proud', 'be_proud']
1015
+ expect(tasks.map(&:nickname)).to match_array(['be_a_bit_sad', 'be_proud', 'be_proud'])
995
1016
 
996
1017
  tasks = described_class.where_any.
997
1018
  completable.
998
1019
  claimed
999
- tasks.map(&:nickname).should =~ ['be_really_mad', 'be_scared', 'be_a_bit_sad', 'be_envious', 'be_proud']
1020
+ expect(tasks.map(&:nickname)).to match_array(['be_really_mad', 'be_scared', 'be_a_bit_sad', 'be_envious', 'be_proud'])
1000
1021
  end
1001
1022
 
1002
1023
  it 'allows for combination of AND-ed and OR-ed finders' do
@@ -1004,14 +1025,14 @@ describe Bumbleworks::Task do
1004
1025
  for_claimant('crayon_box').
1005
1026
  for_roles(['red', 'yellow', 'green']).
1006
1027
  where_any(:nickname => 'spittle', :role => 'red')
1007
- tasks.map(&:nickname).should =~ ['be_really_mad']
1028
+ expect(tasks.map(&:nickname)).to match_array(['be_really_mad'])
1008
1029
  end
1009
1030
  end
1010
1031
 
1011
1032
  describe 'method missing' do
1012
1033
  it 'calls method on new Finder object' do
1013
- described_class::Finder.any_instance.stub(:shabam!).with(:yay).and_return(:its_a_me)
1014
- described_class.shabam!(:yay).should == :its_a_me
1034
+ allow_any_instance_of(described_class::Finder).to receive(:shabam!).with(:yay).and_return(:its_a_me)
1035
+ expect(described_class.shabam!(:yay)).to eq(:its_a_me)
1015
1036
  end
1016
1037
 
1017
1038
  it 'falls back to method missing if no finder method' do
@@ -1036,8 +1057,8 @@ describe Bumbleworks::Task do
1036
1057
  Bumbleworks.launch!('lazy_bum_and_cool_guy')
1037
1058
  task = described_class.for_role('bum').next_available
1038
1059
  end_time = Time.now
1039
- task.nickname.should == 'finally_get_a_round_tuit'
1040
- (end_time - start_time).should >= 2
1060
+ expect(task.nickname).to eq('finally_get_a_round_tuit')
1061
+ expect(end_time - start_time).to be >= 2
1041
1062
  end
1042
1063
 
1043
1064
  it 'times out if task does not appear in time' do
@@ -1060,50 +1081,50 @@ describe Bumbleworks::Task do
1060
1081
  describe '#humanize' do
1061
1082
  it "returns humanized version of task name when no entity" do
1062
1083
  task = described_class.new(workflow_item)
1063
- task.humanize.should == 'Go to work'
1084
+ expect(task.humanize).to eq('Go to work')
1064
1085
  end
1065
1086
 
1066
1087
  it "returns humanized version of task name with entity" do
1067
1088
  task = described_class.new(workflow_item)
1068
1089
  task[:entity_id] = '45'
1069
1090
  task[:entity_type] = 'RhubarbSandwich'
1070
- task.humanize.should == 'Go to work: Rhubarb sandwich 45'
1091
+ expect(task.humanize).to eq('Go to work: Rhubarb sandwich 45')
1071
1092
  end
1072
1093
 
1073
1094
  it "returns humanized version of task name without entity if requested" do
1074
1095
  task = described_class.new(workflow_item)
1075
1096
  task[:entity_id] = '45'
1076
1097
  task[:entity_type] = 'RhubarbSandwich'
1077
- task.humanize(:entity => false).should == 'Go to work'
1098
+ expect(task.humanize(:entity => false)).to eq('Go to work')
1078
1099
  end
1079
1100
  end
1080
1101
 
1081
1102
  describe '#to_s' do
1082
1103
  it "is aliased to #titleize" do
1083
1104
  task = described_class.new(workflow_item)
1084
- task.stub(:titleize).with(:the_args).and_return(:see_i_told_you_so)
1085
- task.to_s(:the_args).should == :see_i_told_you_so
1105
+ allow(task).to receive(:titleize).with(:the_args).and_return(:see_i_told_you_so)
1106
+ expect(task.to_s(:the_args)).to eq(:see_i_told_you_so)
1086
1107
  end
1087
1108
  end
1088
1109
 
1089
1110
  describe '#titleize' do
1090
1111
  it "returns titleized version of task name when no entity" do
1091
1112
  task = described_class.new(workflow_item)
1092
- task.titleize.should == 'Go To Work'
1113
+ expect(task.titleize).to eq('Go To Work')
1093
1114
  end
1094
1115
 
1095
1116
  it "returns titleized version of task name with entity" do
1096
1117
  task = described_class.new(workflow_item)
1097
1118
  task[:entity_id] = '45'
1098
1119
  task[:entity_type] = 'RhubarbSandwich'
1099
- task.titleize.should == 'Go To Work: Rhubarb Sandwich 45'
1120
+ expect(task.titleize).to eq('Go To Work: Rhubarb Sandwich 45')
1100
1121
  end
1101
1122
 
1102
1123
  it "returns titleized version of task name without entity if requested" do
1103
1124
  task = described_class.new(workflow_item)
1104
1125
  task[:entity_id] = '45'
1105
1126
  task[:entity_type] = 'RhubarbSandwich'
1106
- task.titleize(:entity => false).should == 'Go To Work'
1127
+ expect(task.titleize(:entity => false)).to eq('Go To Work')
1107
1128
  end
1108
1129
  end
1109
1130
  end