win32-taskscheduler 2.0.1 → 2.0.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.
@@ -1,883 +0,0 @@
1
- require 'spec_helper'
2
- require 'win32ole'
3
- require 'win32/taskscheduler'
4
-
5
- RSpec.describe Win32::TaskScheduler, :windows_only do
6
- before { create_test_folder }
7
- after { clear_them }
8
- before { load_task_variables }
9
-
10
- describe '#constructor' do
11
- let(:ts) { Win32::TaskScheduler }
12
- context 'Task' do
13
- it 'Does not creates task when default(nil)' do
14
- task = nil
15
- expect(ts.new(task)).to be_a(ts)
16
- expect(no_of_tasks).to eq(0)
17
- end
18
-
19
- it 'Does not creates task without trigger' do
20
- expect(ts.new(@task)).to be_a(ts)
21
- expect(no_of_tasks).to eq(0)
22
- end
23
-
24
- it 'Creates a task with trigger' do
25
- expect(ts.new(@task, @trigger)).to be_a(ts)
26
- expect(no_of_tasks).to eq(1)
27
- end
28
- end
29
-
30
- context 'Trigger' do
31
- it 'Does not creates task when default(nil)' do
32
- trigger = nil
33
- expect(ts.new(@task, trigger)).to be_a(ts)
34
- expect(no_of_tasks).to eq(0)
35
- end
36
-
37
- it 'Raises error without trigger type' do
38
- @trigger[:trigger_type] = nil
39
- expect { ts.new(@task, @trigger) }.to raise_error(ArgumentError)
40
- expect(no_of_tasks).to eq(0)
41
- end
42
-
43
- it 'Creates a task with trigger type' do
44
- expect(ts.new(@task, @trigger)).to be_a(ts)
45
- expect(no_of_tasks).to eq(1)
46
- end
47
- end
48
-
49
- context 'Folder' do
50
- let(:folder) { '\\Foo' }
51
- it 'Raises error when nil' do
52
- expect { ts.new(@task, @trigger, nil) }.to raise_error(NoMethodError)
53
- expect(no_of_tasks).to eq(0)
54
- end
55
-
56
- it "Raises error when path separators(\\\) are absent" do
57
- invalid_path = 'Foo'
58
- expect { ts.new(@task, @trigger, invalid_path) }.to raise_error(ArgumentError)
59
- expect(no_of_tasks).to eq(0)
60
- end
61
-
62
- it 'Creates a task when default(root)' do
63
- expect(ts.new(@task, @trigger, @folder)).to be_a(ts)
64
- expect(no_of_tasks).to eq(1)
65
- end
66
-
67
- context 'When force is true' do
68
- let(:force) { true }
69
- it 'Creates a task at specified folder' do
70
- expect(ts.new(@task, @trigger, folder, force)).to be_a(ts)
71
- expect(no_of_tasks(folder)).to eq(1)
72
- end
73
- end
74
-
75
- context 'When force is false' do
76
- let(:force) { false }
77
- it 'Raises an error when folder does not exists' do
78
- expect { ts.new(@task, @trigger, folder, force) }.to raise_error(ArgumentError)
79
- end
80
-
81
- it 'Creates a task at specified folder if it exists' do
82
- new_folder = @test_folder.CreateFolder(folder)
83
- expect(ts.new(@task, @trigger, new_folder.Path, force)).to be_a(ts)
84
- expect(no_of_tasks(folder)).to eq(1)
85
- end
86
- end
87
- end
88
- end
89
-
90
- describe '#tasks' do
91
- before { create_task }
92
- it 'Returns Task Names' do
93
- expect(@ts.tasks).to include(@task)
94
- end
95
-
96
- it 'is an alias with enum' do
97
- expect(@ts.enum).to include(@task)
98
- end
99
- end
100
-
101
- describe '#exists?' do
102
- let(:folder) { '\\Foo' }
103
- let(:force) { true }
104
- before { create_task }
105
-
106
- context 'valid task path returns true' do
107
- it 'at root' do
108
- expect(@ts.exists?(@task)).to be_truthy
109
- end
110
-
111
- it 'at nested folder' do
112
- @ts = Win32::TaskScheduler.new(@task, @trigger, folder, force)
113
- task = @test_path + folder + '\\' + @task
114
- expect(@ts.exists?(task)).to be_truthy
115
- end
116
- end
117
-
118
- context 'invalid task path returns false' do
119
- it 'at root' do
120
- expect(@ts.exists?('invalid')).to be_falsy
121
- end
122
-
123
- it 'at nested folder' do
124
- @ts = Win32::TaskScheduler.new(@task, @trigger, folder, force)
125
- task = folder + '\\' + 'invalid'
126
- expect(@ts.exists?(task)).to be_falsy
127
- end
128
- end
129
- end
130
-
131
- describe '#get_task' do
132
- let(:folder) { '\\Foo' }
133
- let(:force) { true }
134
- before { create_task }
135
-
136
- context 'from root' do
137
- it 'Returns the Task if exists' do
138
- expect(@ts.get_task(@task)).to be_a(@current_task.class)
139
- end
140
-
141
- it 'Raises an error if task does not exists' do
142
- expect { @ts.get_task('invalid') }.to raise_error(tasksch_err)
143
- end
144
- end
145
-
146
- context 'from nested folder' do
147
- it 'Returns the Task if exists' do
148
- skip 'Implementation Pending'
149
- end
150
-
151
- it 'Raises an error if task does not exists' do
152
- skip 'Implementation Pending'
153
- end
154
- end
155
- end
156
-
157
- describe '#activate' do
158
- let(:folder) { '\\Foo' }
159
- let(:force) { true }
160
- before { create_task }
161
-
162
- context 'from root' do
163
- it 'Activates the Task if exists' do
164
- expect(@ts.activate(@task)).to be_a(@current_task.class)
165
- expect(@current_task.Enabled).to be_truthy
166
- end
167
-
168
- it 'Raises an error if task does not exists' do
169
- expect { @ts.activate('invalid') }.to raise_error(tasksch_err)
170
- end
171
- end
172
-
173
- context 'from nested folder' do
174
- it 'Activates the Task if exists' do
175
- skip 'Implementation Pending'
176
- end
177
-
178
- it 'Raises an error if task does not exists' do
179
- skip 'Implementation Pending'
180
- end
181
- end
182
- end
183
-
184
- describe '#delete' do
185
- let(:folder) { '\\Foo' }
186
- let(:force) { true }
187
- before { create_task }
188
-
189
- context 'from root' do
190
- it 'Deletes the Task if exists' do
191
- expect(no_of_tasks).to eq(1)
192
- @ts.delete(@task)
193
- expect(no_of_tasks).to eq(0)
194
- end
195
-
196
- it 'Raises an error if task does not exists' do
197
- expect { @ts.delete('invalid') }.to raise_error(tasksch_err)
198
- end
199
- end
200
-
201
- context 'from nested folder' do
202
- it 'Activates the Task if exists' do
203
- skip 'Implementation Pending'
204
- end
205
-
206
- it 'Raises an error if task does not exists' do
207
- skip 'Implementation Pending'
208
- end
209
- end
210
- end
211
-
212
- describe '#run' do
213
- before { create_task }
214
- after { stop_the_app }
215
-
216
- it 'Execute(Start) the Task' do
217
- @ts.run
218
- expect(@ts.status).to eq('running')
219
- .or eq('queued')
220
- .or eq('ready') # It takes time to load sometimes
221
- end
222
-
223
- it 'Raises an error if task does not exists' do
224
- @ts.instance_variable_set(:@task, nil)
225
- expect { @ts.run }.to raise_error(tasksch_err)
226
- end
227
- end
228
-
229
- describe '#terminate' do
230
- before { create_task }
231
- after { stop_the_app }
232
-
233
- it 'terminates the Task if exists' do
234
- @ts.terminate
235
- expect(@ts.status).to eq('ready')
236
- end
237
-
238
- it 'has an alias stop' do
239
- @ts.stop
240
- expect(@ts.status).to eq('ready')
241
- end
242
-
243
- it 'Raises an error if task does not exists' do
244
- @ts.instance_variable_set(:@task, nil)
245
- expect { @ts.terminate }.to raise_error(tasksch_err)
246
- end
247
- end
248
-
249
- describe '#application_name' do
250
- before { create_task }
251
- it 'Returns the application name of task' do
252
- check = @app
253
- expect(@ts.application_name).to eq(check)
254
- end
255
-
256
- it 'Sets the application name of task' do
257
- stub_user
258
- check = 'cmd.exe'
259
- expect(@ts.application_name = check).to eq(check)
260
- expect(@ts.application_name).to eq(check)
261
- end
262
-
263
- it 'Raises an error if task does not exists' do
264
- @ts.instance_variable_set(:@task, nil)
265
- expect { @ts.application_name }.to raise_error(tasksch_err)
266
- end
267
- end
268
-
269
- describe '#parameters' do
270
- before { create_task }
271
- it 'Returns the parameters of task' do
272
- check = ''
273
- expect(@ts.parameters).to eq(check)
274
- end
275
-
276
- it 'Sets the parameters of task' do
277
- stub_user
278
- check = 'cmd.exe'
279
- expect(@ts.parameters = check).to eq(check)
280
- expect(@ts.parameters).to eq(check)
281
- end
282
-
283
- it 'Raises an error if task does not exists' do
284
- @ts.instance_variable_set(:@task, nil)
285
- expect { @ts.parameters }.to raise_error(tasksch_err)
286
- end
287
- end
288
-
289
- describe '#working_directory' do
290
- before { create_task }
291
- it 'Returns the working directory of task' do
292
- check = ''
293
- expect(@ts.working_directory).to eq(check)
294
- end
295
-
296
- it 'Sets the working directory of task' do
297
- stub_user
298
- check = Dir.pwd
299
- expect(@ts.working_directory = check).to eq(check)
300
- expect(@ts.working_directory).to eq(check)
301
- end
302
-
303
- it 'Raises an error if task does not exists' do
304
- @ts.instance_variable_set(:@task, nil)
305
- expect { @ts.working_directory }.to raise_error(tasksch_err)
306
- end
307
- end
308
-
309
- describe '#priority' do
310
- before { create_task }
311
- it 'Returns default priority of task' do
312
- check = 'below_normal_7'
313
- expect(@ts.priority).to eq(check)
314
- end
315
-
316
- it '0 Sets the priority of task to critical' do
317
- stub_user
318
- check = 0
319
- expect(@ts.priority = check).to eq(check)
320
- expect(@ts.priority).to eq('critical')
321
- end
322
-
323
- it '1 Sets the priority of task to highest' do
324
- stub_user
325
- check = 1
326
- expect(@ts.priority = check).to eq(check)
327
- expect(@ts.priority).to eq('highest')
328
- end
329
-
330
- it '2 Sets the priority of task to above_normal_2' do
331
- stub_user
332
- check = 2
333
- expect(@ts.priority = check).to eq(check)
334
- expect(@ts.priority).to eq('above_normal_2')
335
- end
336
-
337
- it '3 Sets the priority of task to above_normal_3' do
338
- stub_user
339
- check = 3
340
- expect(@ts.priority = check).to eq(check)
341
- expect(@ts.priority).to eq('above_normal_3')
342
- end
343
-
344
- it '4 Sets the priority of task to normal_4' do
345
- stub_user
346
- check = 4
347
- expect(@ts.priority = check).to eq(check)
348
- expect(@ts.priority).to eq('normal_4')
349
- end
350
-
351
- it '5 Sets the priority of task to normal_5' do
352
- stub_user
353
- check = 5
354
- expect(@ts.priority = check).to eq(check)
355
- expect(@ts.priority).to eq('normal_5')
356
- end
357
-
358
- it '6 Sets the priority of task to normal_6' do
359
- stub_user
360
- check = 6
361
- expect(@ts.priority = check).to eq(check)
362
- expect(@ts.priority).to eq('normal_6')
363
- end
364
-
365
- it '7 Sets the priority of task to below_normal_7' do
366
- stub_user
367
- check = 7
368
- expect(@ts.priority = check).to eq(check)
369
- expect(@ts.priority).to eq('below_normal_7')
370
- end
371
-
372
- it '8 Sets the priority of task to below_normal_8' do
373
- stub_user
374
- check = 8
375
- expect(@ts.priority = check).to eq(check)
376
- expect(@ts.priority).to eq('below_normal_8')
377
- end
378
-
379
- it '9 Sets the priority of task to lowest' do
380
- stub_user
381
- check = 9
382
- expect(@ts.priority = check).to eq(check)
383
- expect(@ts.priority).to eq('lowest')
384
- end
385
-
386
- it '10 Sets the priority of task to idle' do
387
- stub_user
388
- check = 10
389
- expect(@ts.priority = check).to eq(check)
390
- expect(@ts.priority).to eq('idle')
391
- end
392
-
393
- it 'Raises an error if task does not exists' do
394
- @ts.instance_variable_set(:@task, nil)
395
- expect { @ts.priority }.to raise_error(tasksch_err)
396
- end
397
- end
398
-
399
- describe '#comment' do
400
- before { create_task }
401
- it 'Returns the comment of task' do
402
- check = 'Sample task for testing purpose'
403
- expect(@ts.comment).to eq(check)
404
- end
405
-
406
- it 'Sets the Comment(Description) of task' do
407
- stub_user
408
- check = 'Description To Test'
409
- expect(@ts.comment = check).to eq(check)
410
- expect(@ts.comment).to eq(check)
411
- end
412
-
413
- it 'alias with Description' do
414
- stub_user
415
- check = 'Description To Test'
416
- expect(@ts.description = check).to eq(check)
417
- expect(@ts.comment).to eq(check)
418
- end
419
-
420
- it 'Raises an error if task does not exists' do
421
- @ts.instance_variable_set(:@task, nil)
422
- expect { @ts.comment }.to raise_error(tasksch_err)
423
- end
424
- end
425
-
426
- describe '#author' do
427
- before { create_task }
428
- it 'Returns the author of task' do
429
- check = 'Rspec'
430
- expect(@ts.author).to eq(check)
431
- end
432
-
433
- it 'Sets the Author of task' do
434
- stub_user
435
- check = 'Author'
436
- expect(@ts.author = check).to eq(check)
437
- expect(@ts.author).to eq(check)
438
- end
439
-
440
- it 'alias with Creator' do
441
- stub_user
442
- check = 'Description To Test'
443
- expect(@ts.creator = check).to eq(check)
444
- expect(@ts.author).to eq(check)
445
- end
446
-
447
- it 'Raises an error if task does not exists' do
448
- @ts.instance_variable_set(:@task, nil)
449
- expect { @ts.author }.to raise_error(tasksch_err)
450
- end
451
- end
452
-
453
- describe '#max_run_time' do
454
- before { create_task }
455
- it 'Returns the Execution Time Limit of task' do
456
- skip 'Due to logical error in implementation'
457
- check = (72 * 60 * 60) # Task: PT72H
458
- expect(@ts.max_run_time).to eq(check)
459
- end
460
-
461
- it 'Sets the max_run_time of task' do
462
- skip 'Due to logical error in implementation'
463
- check = 1_244_145_000_000
464
- expect(@ts.max_run_time = check).to eq(check)
465
- expect(@ts.max_run_time).to eq(check)
466
- end
467
-
468
- it 'Raises an error if task does not exists' do
469
- @ts.instance_variable_set(:@task, nil)
470
- expect { @ts.max_run_time }.to raise_error(tasksch_err)
471
- end
472
- end
473
-
474
- describe '#enabled?' do
475
- before { create_task }
476
- it 'Returns true when Task is enabled' do
477
- expect(@ts.enabled?).to be_truthy
478
- end
479
-
480
- it 'Raises an error if task does not exists' do
481
- @ts.instance_variable_set(:@task, nil)
482
- expect { @ts.enabled? }.to raise_error(tasksch_err)
483
- end
484
- end
485
-
486
- describe '#next_run_time' do
487
- before { create_task }
488
- it 'Returns a Time object that indicates the next time the task will run' do
489
- expect(@ts.next_run_time).to be_a(Time)
490
- end
491
-
492
- it 'Raises an error if task does not exists' do
493
- @ts.instance_variable_set(:@task, nil)
494
- expect { @ts.next_run_time }.to raise_error(tasksch_err)
495
- end
496
- end
497
-
498
- describe '#most_recent_run_time' do
499
- before { create_task }
500
-
501
- it 'Returns nil if the task has never run' do
502
- skip 'Error in implementation; Time.parse requires String'
503
- expect(@ts.most_recent_run_time).to be_nil
504
- end
505
-
506
- it 'Returns Time object indicating the most recent time the task ran' do
507
- skip 'Error in implementation; Time.parse requires String'
508
- @ts.run
509
- expect(@ts.most_recent_run_time).to be_a(Time)
510
- @ts.stop
511
- end
512
-
513
- it 'Raises an error if task does not exists' do
514
- @ts.instance_variable_set(:@task, nil)
515
- expect { @ts.most_recent_run_time }.to raise_error(tasksch_err)
516
- end
517
- end
518
-
519
- describe '#account_information' do
520
- before { create_task }
521
- context 'Service Account Users' do
522
- let(:service_user) { 'LOCAL SERVICE' }
523
- let(:password) { nil }
524
- it 'Does not require any password' do
525
- expect(@ts.set_account_information(service_user, password)). to be_truthy
526
- expect(@ts.account_information.upcase).to eq(service_user)
527
- end
528
- it 'passing account_name will display account_simple_name' do
529
- user = 'NT AUTHORITY\LOCAL SERVICE'
530
- expect(@ts.set_account_information(user, password)). to be_truthy
531
- expect(@ts.account_information.upcase).to eq(service_user)
532
- end
533
- it 'Raises an error if password is given' do
534
- password = 'XYZ'
535
- expect { @ts.set_account_information(service_user, password) }. to raise_error(tasksch_err)
536
- end
537
- end
538
- context 'Built in Groups' do
539
- let(:group_user) { 'USERS' }
540
- let(:password) { nil }
541
- it 'Does not require any password' do
542
- expect(@ts.set_account_information(group_user, password)). to be_truthy
543
- expect(@ts.account_information.upcase).to eq(group_user)
544
- end
545
- it 'passing account_name will display account_simple_name' do
546
- user = 'BUILTIN\USERS'
547
- expect(@ts.set_account_information(user, password)). to be_truthy
548
- expect(@ts.account_information.upcase).to eq(group_user)
549
- end
550
- it 'Raises an error if password is given' do
551
- password = 'XYZ'
552
- expect { @ts.set_account_information(group_user, password) }. to raise_error(tasksch_err)
553
- end
554
- end
555
- context 'Non-system users' do
556
- it 'Require a password' do
557
- user = ENV['user']
558
- password = nil
559
- expect { @ts.set_account_information(user, password) }. to raise_error(tasksch_err)
560
- expect(@ts.account_information).to include(user)
561
- end
562
- end
563
- it 'Raises an error if task does not exists' do
564
- @ts.instance_variable_set(:@task, nil)
565
- user = 'User'
566
- password = 'XXXX'
567
- expect { @ts.set_account_information(user, password) }. to raise_error(tasksch_err)
568
- expect(@ts.account_information).to be_nil
569
- end
570
- end
571
-
572
- describe '#status' do
573
- before { create_task }
574
- it 'Returns tasks status' do
575
- expect(@ts.status).to be_a(String)
576
- end
577
-
578
- it 'Raises an error if task does not exists' do
579
- @ts.instance_variable_set(:@task, nil)
580
- expect { @ts.status }.to raise_error(tasksch_err)
581
- end
582
- end
583
-
584
- describe '#exit_code' do
585
- before { create_task }
586
- it 'Returns the exit code from the last scheduled run' do
587
- expect(@ts.exit_code).to be_a(Integer)
588
- end
589
-
590
- it 'Raises an error if task does not exists' do
591
- @ts.instance_variable_set(:@task, nil)
592
- expect { @ts.exit_code }.to raise_error(tasksch_err)
593
- end
594
- end
595
-
596
- describe '#trigger_count' do
597
- before { create_task }
598
- it 'Returns No of triggers associated with the task' do
599
- expect(@ts.trigger_count).to eq(1)
600
- end
601
-
602
- it 'Raises an error if task does not exists' do
603
- @ts.instance_variable_set(:@task, nil)
604
- expect { @ts.trigger_count }.to raise_error(tasksch_err)
605
- end
606
- end
607
-
608
- describe '#trigger_string' do
609
- before { create_task }
610
- it 'Returns a string that describes the current trigger at '\
611
- 'the specified index for the active task' do
612
- expect(@ts.trigger_string(0)).to be_a(String)
613
- end
614
-
615
- it 'Raises an error if trigger is not found at the given index' do
616
- expect { @ts.trigger_string(1) }.to raise_error(tasksch_err)
617
- end
618
-
619
- it 'Raises an error if task does not exists' do
620
- @ts.instance_variable_set(:@task, nil)
621
- expect { @ts.trigger_string(0) }.to raise_error(tasksch_err)
622
- end
623
- end
624
-
625
- describe '#idle_settings' do
626
- before { create_task }
627
- it 'Returns a hash containing idle settings of the current task' do
628
- settings = @ts.idle_settings
629
- expect(settings).to be_a(Hash)
630
- expect(settings).to include(stop_on_idle_end: true)
631
- end
632
-
633
- it 'Raises an error if task does not exists' do
634
- @ts.instance_variable_set(:@task, nil)
635
- expect { @ts.idle_settings }. to raise_error(tasksch_err)
636
- end
637
- end
638
-
639
- describe '#network_settings' do
640
- before { create_task }
641
- it 'Returns a hash containing network settings of the current task' do
642
- settings = @ts.network_settings
643
- expect(settings).to be_a(Hash)
644
- expect(settings).to include(name: '')
645
- end
646
-
647
- it 'Raises an error if task does not exists' do
648
- @ts.instance_variable_set(:@task, nil)
649
- expect { @ts.network_settings }. to raise_error(tasksch_err)
650
- end
651
- end
652
-
653
- describe '#settings' do
654
- before { create_task }
655
- it 'Returns a hash containing all the settings of the current task' do
656
- settings = @ts.settings
657
- expect(settings).to be_a(Hash)
658
- expect(settings).to include(enabled: true)
659
- end
660
-
661
- it 'Raises an error if task does not exists' do
662
- @ts.instance_variable_set(:@task, nil)
663
- expect { @ts.settings }. to raise_error(tasksch_err)
664
- end
665
- end
666
-
667
- describe '#configure_settings' do
668
- before { create_task }
669
- before { stub_user }
670
-
671
- it 'Require a hash' do
672
- expect { @ts.configure_settings('XYZ') }. to raise_error(TypeError)
673
- expect(@ts.configure_settings({})).to eq({})
674
- end
675
-
676
- it 'Raises an error if invalid setting is passed' do
677
- expect { @ts.configure_settings(invalid: true) }. to raise_error(TypeError)
678
- end
679
-
680
- it 'Sets settings of the task and returns a hash' do
681
- settings = { allow_demand_start: false,
682
- disallow_start_if_on_batteries: false,
683
- enabled: false,
684
- stop_if_going_on_batteries: false }
685
-
686
- expect(@ts.configure_settings(settings)).to eq(settings)
687
- expect(@ts.settings).to include(settings)
688
- end
689
-
690
- it 'Sets idle settings of the task' do
691
- # It accepts time in minutes
692
- # and returns the result in ISO8601 format
693
- settings = { idle_duration: 11,
694
- wait_timeout: 10,
695
- stop_on_idle_end: true,
696
- restart_on_idle: false }
697
-
698
- result_settings = { idle_duration: 'PT11M',
699
- wait_timeout: 'PT10M',
700
- stop_on_idle_end: true,
701
- restart_on_idle: false }
702
-
703
- @ts.configure_settings(settings)
704
- expect(@ts.idle_settings).to eq(result_settings)
705
- end
706
-
707
- it 'Set settings and idle settings of the task' do
708
- settings = {
709
- allow_demand_start: false,
710
- disallow_start_if_on_batteries: false,
711
- stop_if_going_on_batteries: false
712
- }
713
-
714
- idle_settings = {
715
- stop_on_idle_end: true,
716
- restart_on_idle: false
717
- }
718
-
719
- @ts.configure_settings(settings.merge(idle_settings))
720
- expect(@ts.settings).to include(settings)
721
- expect(@ts.idle_settings).to include(idle_settings)
722
- end
723
-
724
- it 'Raises an error if task does not exists' do
725
- @ts.instance_variable_set(:@task, nil)
726
- expect { @ts.settings }. to raise_error(tasksch_err)
727
- end
728
- end
729
-
730
- describe '#principals' do
731
- before { create_task }
732
- it 'Returns a hash containing all the principal information of the current task' do
733
- principals = @ts.principals
734
- expect(principals).to be_a(Hash)
735
- expect(principals).to include(id: 'Author')
736
- end
737
-
738
- it 'Raises an error if task does not exists' do
739
- @ts.instance_variable_set(:@task, nil)
740
- expect { @ts.principals }. to raise_error(tasksch_err)
741
- end
742
- end
743
-
744
- describe '#principals' do
745
- before { create_task }
746
- it 'Returns a hash containing all the principal information of the current task' do
747
- principals = @ts.principals
748
- expect(principals).to be_a(Hash)
749
- expect(principals).to include(id: 'Author')
750
- end
751
-
752
- it 'Raises an error if task does not exists' do
753
- @ts.instance_variable_set(:@task, nil)
754
- expect { @ts.principals }. to raise_error(tasksch_err)
755
- end
756
- end
757
-
758
- describe '#configure_principals' do
759
- before { create_task }
760
- before { stub_user }
761
-
762
- it 'Sets the principals for current active task' do
763
- principals = @ts.principals
764
- principals[:user_id] = 'SYSTEM'
765
- principals[:display_name] = 'Rspec'
766
- principals[:run_level] = Win32::TaskScheduler::TASK_RUNLEVEL_HIGHEST
767
- principals[:logon_type] = Win32::TaskScheduler::TASK_LOGON_SERVICE_ACCOUNT
768
-
769
- @ts.configure_principals(principals)
770
- expect(@ts.principals).to eq(principals)
771
- end
772
-
773
- it 'Raises an error if task does not exists' do
774
- @ts.instance_variable_set(:@task, nil)
775
- expect { @ts.principals }. to raise_error(tasksch_err)
776
- end
777
- end
778
-
779
- describe '#trigger' do
780
- before { create_task }
781
-
782
- it 'Returns a hash that describes the trigger '\
783
- 'at the given index for the current task' do
784
- trigger = @ts.trigger(0)
785
- expect(trigger).to be_a(Hash)
786
- expect(trigger).not_to be_empty
787
- end
788
-
789
- it 'Raises an error if trigger is not found at the given index' do
790
- expect { @ts.trigger(1) }.to raise_error(tasksch_err)
791
- end
792
-
793
- it 'Raises an error if task does not exists' do
794
- @ts.instance_variable_set(:@task, nil)
795
- expect { @ts.trigger(0) }.to raise_error(tasksch_err)
796
- end
797
- end
798
-
799
- describe '#trigger=' do
800
- before { create_task }
801
- before { stub_user }
802
- all_triggers.each do |type, trigger_hash|
803
- it "Updates the first trigger for type: #{type}" do
804
- @ts.trigger = trigger_hash
805
- returned_trigger = @ts.trigger(0)
806
- expect(returned_trigger).to eq(trigger_hash)
807
- expect(@ts.trigger_count).to eq(1)
808
- end
809
-
810
- it "Updates the trigger at given index for type: #{type}" do
811
- skip 'Implementation Pending'
812
- @ts.trigger = trigger_hash
813
- returned_trigger = @ts.trigger(0)
814
- expect(returned_trigger).to eq(trigger_hash)
815
- expect(@ts.trigger_count).to eq(1)
816
- end
817
-
818
- it 'Raises an error if task does not exists' do
819
- @ts.instance_variable_set(:@task, nil)
820
- expect { @ts.trigger = trigger_hash }.to raise_error(tasksch_err)
821
- end
822
- end
823
- end
824
-
825
- describe '#new_work_item' do
826
- before { create_task }
827
- context 'Creates a new task' do
828
- all_triggers.each do |type, trigger_hash|
829
- it "for the triger: #{type}" do
830
- task_count = 1 # One task already exists
831
- expect(@ts.new_work_item("Task_#{type}", trigger_hash)).to be_a(@current_task.class)
832
- task_count += 1
833
- expect(no_of_tasks).to eq(task_count)
834
- end
835
- end
836
- end
837
-
838
- context 'Updates the existing task' do
839
- all_triggers.each do |type, trigger_hash|
840
- it "for the triger: #{type}" do
841
- expect(@ts.new_work_item(@task, trigger_hash)).to be_a(@current_task.class)
842
- expect(no_of_tasks).to eq(1)
843
- end
844
-
845
- it 'Raises an error if task does not exists' do
846
- @ts.instance_variable_set(:@task, nil)
847
- expect { @ts.trigger = trigger_hash }.to raise_error(tasksch_err)
848
- end
849
- end
850
- end
851
- end
852
-
853
- private
854
-
855
- def load_task_variables
856
- time = Time.now
857
- # Ensuring root path will be test path
858
- allow_any_instance_of(Win32::TaskScheduler).to receive(:root_path).and_return(@test_path)
859
- @app = 'iexplore.exe'
860
- @task = 'test_task'
861
- @folder = @test_path
862
- @force = false
863
- @trigger = { start_year: time.year, start_month: time.month,
864
- start_day: time.day, start_hour: time.hour,
865
- start_minute: time.min,
866
- # Will update this in test cases when required
867
- trigger_type: Win32::TaskScheduler::ONCE }
868
- @ts = Win32::TaskScheduler.new
869
- end
870
-
871
- # Sets the user Id as nil, hence SYSTEM will be considered
872
- # Alternatively, we may to provide the login users password
873
- def stub_user
874
- # @ts.instance_variable_set(:@password, 'user_login_password')
875
- allow(@ts).to receive(:task_user_id).and_return(nil)
876
- end
877
-
878
- # Will stop the appliaction only if it is running
879
- def stop_the_app
880
- `tasklist /FI "IMAGENAME eq #{@app}" 2>NUL | find /I /N "#{@app}">NUL
881
- if "%ERRORLEVEL%"=="0" taskkill /f /im #{@app}`
882
- end
883
- end