singularity_dsl 1.2.5
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.
- checksums.yaml +15 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.rubocop.yml +10 -0
- data/.singularityrc +12 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +52 -0
- data/LICENSE.txt +22 -0
- data/README.md +38 -0
- data/Rakefile +24 -0
- data/bin/singularity_runner +5 -0
- data/lib/singularity_dsl/application.rb +76 -0
- data/lib/singularity_dsl/cli/cli.rb +125 -0
- data/lib/singularity_dsl/cli/table.rb +32 -0
- data/lib/singularity_dsl/dsl/batch.rb +23 -0
- data/lib/singularity_dsl/dsl/changeset.rb +39 -0
- data/lib/singularity_dsl/dsl/components.rb +7 -0
- data/lib/singularity_dsl/dsl/dsl.rb +71 -0
- data/lib/singularity_dsl/dsl/event_store.rb +34 -0
- data/lib/singularity_dsl/dsl/registry.rb +60 -0
- data/lib/singularity_dsl/dsl/runner.rb +67 -0
- data/lib/singularity_dsl/dsl/utils.rb +28 -0
- data/lib/singularity_dsl/errors.rb +35 -0
- data/lib/singularity_dsl/files.rb +20 -0
- data/lib/singularity_dsl/git_helper.rb +94 -0
- data/lib/singularity_dsl/runstate.rb +30 -0
- data/lib/singularity_dsl/stdout.rb +16 -0
- data/lib/singularity_dsl/task.rb +30 -0
- data/lib/singularity_dsl/tasks/rake.rb +31 -0
- data/lib/singularity_dsl/tasks/rspec.rb +32 -0
- data/lib/singularity_dsl/tasks/rubocop.rb +54 -0
- data/lib/singularity_dsl/tasks/shell_task.rb +90 -0
- data/lib/singularity_dsl/version.rb +6 -0
- data/lib/singularity_dsl.rb +9 -0
- data/singularity_dsl.gemspec +31 -0
- data/spec/singularity_dsl/application_spec.rb +92 -0
- data/spec/singularity_dsl/dsl/batch_spec.rb +30 -0
- data/spec/singularity_dsl/dsl/changeset_spec.rb +54 -0
- data/spec/singularity_dsl/dsl/dsl_spec.rb +45 -0
- data/spec/singularity_dsl/dsl/event_store_spec.rb +44 -0
- data/spec/singularity_dsl/dsl/registry_spec.rb +39 -0
- data/spec/singularity_dsl/dsl/runner_spec.rb +39 -0
- data/spec/singularity_dsl/dsl/stubs/tasks/dummy_task.rb +4 -0
- data/spec/singularity_dsl/dsl/utils_spec.rb +33 -0
- data/spec/singularity_dsl/git_helper_spec.rb +72 -0
- data/spec/singularity_dsl/runstate_spec.rb +73 -0
- data/spec/singularity_dsl/task_spec.rb +54 -0
- data/spec/singularity_dsl/tasks/shell_task_spec.rb +119 -0
- metadata +231 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/batch'
|
4
|
+
|
5
|
+
# dummy class to use for block contexts
|
6
|
+
class TestObject
|
7
|
+
def meth
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'Batch' do
|
12
|
+
context '#initialize' do
|
13
|
+
it 'converts name to symbol' do
|
14
|
+
batch = SingularityDsl::Dsl::Batch.new('test', self)
|
15
|
+
expect(batch.name).to eql(:test)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#execute' do
|
20
|
+
it 'executes block in passed context' do
|
21
|
+
dummy = TestObject.new
|
22
|
+
dummy.stub(:meth)
|
23
|
+
batch = SingularityDsl::Dsl::Batch.new('test', dummy) do |thing|
|
24
|
+
thing.meth
|
25
|
+
end
|
26
|
+
expect(dummy).to receive(:meth)
|
27
|
+
batch.execute
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/changeset'
|
4
|
+
|
5
|
+
# container to include DslChangeset
|
6
|
+
class ChangesetTest
|
7
|
+
include SingularityDsl::Dsl::Changeset
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'DslChangeset' do
|
11
|
+
let(:instance) { ChangesetTest.new }
|
12
|
+
before :each do
|
13
|
+
instance.changeset = %w(something.php something.js something.css)
|
14
|
+
end
|
15
|
+
|
16
|
+
context '#files_changed?' do
|
17
|
+
it 'correct eval for single file type' do
|
18
|
+
expect(instance.files_changed? 'php').to eql true
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'correct eval for multiple file types' do
|
22
|
+
expect(instance.files_changed? %w(js css)).to eql true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context '#changed_files' do
|
27
|
+
before :each do
|
28
|
+
::File.stub(:exist?)
|
29
|
+
.with('something.css')
|
30
|
+
.and_return(true)
|
31
|
+
::File.stub(:exist?)
|
32
|
+
.with('something.js')
|
33
|
+
.and_return(true)
|
34
|
+
::File.stub(:exist?)
|
35
|
+
.with('something.php')
|
36
|
+
.and_return(false)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'correct eval for single file type' do
|
40
|
+
expect(instance.changed_files 'css').to eql %w(something.css)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'correct eval for multiple file types' do
|
44
|
+
expect(instance.changed_files %w(js css))
|
45
|
+
.to eql %w(something.css something.js)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'filters for existing files' do
|
49
|
+
expect(instance.changed_files %w(php js css))
|
50
|
+
.to eql %w(something.css something.js)
|
51
|
+
expect(instance.changed_files 'php').to eql []
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/dsl'
|
4
|
+
require 'singularity_dsl/dsl/registry'
|
5
|
+
require 'singularity_dsl/task'
|
6
|
+
|
7
|
+
class TestTask < SingularityDsl::Task
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'Dsl' do
|
11
|
+
let(:dsl) { SingularityDsl::Dsl::Dsl.new }
|
12
|
+
|
13
|
+
context '#initialize' do
|
14
|
+
it 'creates registry' do
|
15
|
+
expect(dsl.registry).to be_a_kind_of SingularityDsl::Dsl::Registry
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#define_task' do
|
20
|
+
it 'creates task function for given task' do
|
21
|
+
dsl.define_task TestTask
|
22
|
+
expect(dsl.singleton_methods).to include :testtask
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'throws when tasks have the same name' do
|
26
|
+
dsl.define_task TestTask
|
27
|
+
expect { dsl.define_task TestTask }
|
28
|
+
.to raise_error RuntimeError, /task name clash/
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context '#load_tasks_in_path' do
|
33
|
+
it 'does not load tasks that have already been required' do
|
34
|
+
path = ::File.dirname(__FILE__) + '/../../lib/singularity_dsl/tasks'
|
35
|
+
expect(dsl).to receive(:load_tasks).with []
|
36
|
+
dsl.load_tasks_in_path path
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'actually loads new tasks from dir' do
|
40
|
+
path = ::File.dirname(__FILE__) + '/stubs/tasks'
|
41
|
+
dsl.load_tasks_in_path path
|
42
|
+
expect(dsl.singleton_methods).to include :dummytask
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/event_store'
|
4
|
+
|
5
|
+
# container to include DslEventStore
|
6
|
+
class EventStoreTest
|
7
|
+
include SingularityDsl::Dsl::EventStore
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'DslEventStore' do
|
11
|
+
let(:instance) { EventStoreTest.new }
|
12
|
+
|
13
|
+
context '#on_error' do
|
14
|
+
it 'creates an error_proc' do
|
15
|
+
expect(instance.error_proc).to be_a_kind_of Proc
|
16
|
+
instance.on_error {}
|
17
|
+
expect(instance.error_proc).to be_a_kind_of Proc
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#on_fail' do
|
22
|
+
it 'creates an fail_proc' do
|
23
|
+
expect(instance.fail_proc).to be_a_kind_of Proc
|
24
|
+
instance.on_fail {}
|
25
|
+
expect(instance.fail_proc).to be_a_kind_of Proc
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context '#on_success' do
|
30
|
+
it 'creates an error_proc' do
|
31
|
+
expect(instance.success_proc).to be_a_kind_of Proc
|
32
|
+
instance.on_success {}
|
33
|
+
expect(instance.success_proc).to be_a_kind_of Proc
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context '#always' do
|
38
|
+
it 'creates an error_proc' do
|
39
|
+
expect(instance.always_proc).to be_a_kind_of Proc
|
40
|
+
instance.always {}
|
41
|
+
expect(instance.always_proc).to be_a_kind_of Proc
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/registry'
|
4
|
+
require 'singularity_dsl/task'
|
5
|
+
|
6
|
+
class TestTask < SingularityDsl::Task
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'DslRegistry' do
|
10
|
+
before :each do
|
11
|
+
@instance = SingularityDsl::Dsl::Registry.new
|
12
|
+
end
|
13
|
+
|
14
|
+
context '#initialize' do
|
15
|
+
it 'creates empty task_list array' do
|
16
|
+
expect(@instance.run_list).to be_kind_of Array
|
17
|
+
expect(@instance.run_list).to be_empty
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#add_task' do
|
22
|
+
it 'adds tasks' do
|
23
|
+
task = TestTask.new
|
24
|
+
@instance.add_task task
|
25
|
+
expect(@instance.run_list).to_not be_empty
|
26
|
+
expect(@instance.run_list).to eql [task]
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'fails when non-task is given' do
|
30
|
+
expect { @instance.add_task 'fail' }
|
31
|
+
.to raise_error ::RuntimeError, /Non-Task given - /
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'fails when raw task is given' do
|
35
|
+
expect { @instance.add_task SingularityDsl::Task.new }
|
36
|
+
.to raise_error ::RuntimeError, /Cannot use raw Task objects - /
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/dsl'
|
4
|
+
require 'singularity_dsl/dsl/runner'
|
5
|
+
require 'singularity_dsl/runstate'
|
6
|
+
require 'singularity_dsl/task'
|
7
|
+
|
8
|
+
describe 'DslRunner' do
|
9
|
+
let(:runner) { SingularityDsl::Dsl::Runner.new }
|
10
|
+
|
11
|
+
context '#initialize' do
|
12
|
+
it 'creates base state' do
|
13
|
+
expect(runner.state).to be_kind_of SingularityDsl::Runstate
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'creates base DSL' do
|
17
|
+
expect(runner.dsl).to be_kind_of SingularityDsl::Dsl::Dsl
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#execute' do
|
22
|
+
it 'taps & evaluates failed task.execute statuses correctly' do
|
23
|
+
task = SingularityDsl::Task.new
|
24
|
+
task.stub(:execute).and_return true
|
25
|
+
runner.dsl.registry.stub(:run_list).and_return [task]
|
26
|
+
expect(runner).to receive(:record_failure).with task
|
27
|
+
expect(runner).to receive(:resource_fail).with task
|
28
|
+
runner.execute
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context '#load_ex_script' do
|
33
|
+
it 'instance_evals contents of a file' do
|
34
|
+
::File.stub(:read).and_return('0')
|
35
|
+
expect(runner.dsl).to receive(:instance_eval).with('0')
|
36
|
+
runner.load_ex_script 'foo'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/dsl/utils'
|
4
|
+
|
5
|
+
class TestTask < SingularityDsl::Task
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'Utils' do
|
9
|
+
include SingularityDsl::Dsl::Utils
|
10
|
+
|
11
|
+
context '#task_name' do
|
12
|
+
it 'simplifies class names correctly' do
|
13
|
+
expect(task_name 'Foo::Bar::Blah').to eql 'Blah'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context '#task' do
|
18
|
+
it 'returns lowercase sym representing DSL fx' do
|
19
|
+
expect(task TestTask).to eql :testtask
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context '#task_list' do
|
24
|
+
it 'returns array of tasks' do
|
25
|
+
tasks = task_list
|
26
|
+
expect(tasks).to be_a_kind_of Array
|
27
|
+
expect(tasks).to_not be_empty
|
28
|
+
tasks.each do |task|
|
29
|
+
expect(task <= SingularityDsl::Task).to eql true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/git_helper'
|
4
|
+
|
5
|
+
describe 'GitHelper' do
|
6
|
+
before :each do
|
7
|
+
SingularityDsl::GitHelper
|
8
|
+
.any_instance
|
9
|
+
.stub(:git_installed)
|
10
|
+
.and_return true
|
11
|
+
end
|
12
|
+
let(:git) { SingularityDsl::GitHelper.new }
|
13
|
+
|
14
|
+
context '#initialize' do
|
15
|
+
it 'throws if git is not installed' do
|
16
|
+
SingularityDsl::GitHelper
|
17
|
+
.any_instance
|
18
|
+
.stub(:git_installed)
|
19
|
+
.and_return false
|
20
|
+
expect { SingularityDsl::GitHelper.new }
|
21
|
+
.to(raise_error ArgumentError, /git not installed/)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context '#clean_reset' do
|
26
|
+
it 'fails when reset fails' do
|
27
|
+
git.stub(:reset).and_return 1
|
28
|
+
git.stub(:clean).and_return 0
|
29
|
+
expect { git.clean_reset }
|
30
|
+
.to(raise_error RuntimeError, /failed to clean/)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'fails when clean fails' do
|
34
|
+
git.stub(:reset).and_return 0
|
35
|
+
git.stub(:clean).and_return 1
|
36
|
+
expect { git.clean_reset }
|
37
|
+
.to(raise_error RuntimeError, /failed to clean/)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'fails when both reset & clean fail' do
|
41
|
+
git.stub(:reset).and_return 1
|
42
|
+
git.stub(:clean).and_return 1
|
43
|
+
expect { git.clean_reset }
|
44
|
+
.to(raise_error RuntimeError, /failed to clean/)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context '#merge_remote' do
|
49
|
+
it 'generates & calls correct cmd' do
|
50
|
+
git.stub(:remotes).and_return []
|
51
|
+
git.stub(:exec).with('git fetch --all')
|
52
|
+
git.stub(:exec).with('git merge bar/foo').and_return 0
|
53
|
+
git.merge_remote 'foo', 'bar'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context '#diff_remote' do
|
58
|
+
it 'generates & calls correct cmd w/ single flag' do
|
59
|
+
git.stub(:remotes).and_return []
|
60
|
+
git.stub(:exec).with('git fetch --all')
|
61
|
+
git.stub(:exec).with('git diff bar/foo --flag').and_return 0
|
62
|
+
git.diff_remote 'foo', 'bar', '--flag'
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'generates & calls correct cmd w/ multiple flags' do
|
66
|
+
git.stub(:remotes).and_return []
|
67
|
+
git.stub(:exec).with('git fetch --all')
|
68
|
+
git.stub(:exec).with('git diff bar/foo --flag --other').and_return 0
|
69
|
+
git.diff_remote 'foo', 'bar', %w(--flag, --other)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/runstate'
|
4
|
+
|
5
|
+
describe 'Runstate' do
|
6
|
+
before :each do
|
7
|
+
@instance = SingularityDsl::Runstate.new
|
8
|
+
end
|
9
|
+
|
10
|
+
context '#initialize' do
|
11
|
+
it 'sets error & failed to false' do
|
12
|
+
expect(@instance.error).to eql false
|
13
|
+
expect(@instance.failed).to eql false
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'starts of with empty failure & error arrays' do
|
17
|
+
expect(@instance.errors).to be_kind_of Array
|
18
|
+
expect(@instance.errors).to be_empty
|
19
|
+
expect(@instance.failures).to be_kind_of Array
|
20
|
+
expect(@instance.failures).to be_empty
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context '#add_failure' do
|
25
|
+
it 'sets failed to true' do
|
26
|
+
@instance.add_failure 'failed'
|
27
|
+
expect(@instance.failed).to eql true
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'adds failure' do
|
31
|
+
@instance.add_failure 'failed'
|
32
|
+
expect(@instance.failures).to eql ['failed']
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'does NOT affect error state' do
|
36
|
+
@instance.add_failure 'failed'
|
37
|
+
expect(@instance.error).to eql false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context '#add_error' do
|
42
|
+
it 'sets error to true' do
|
43
|
+
@instance.add_error 'error'
|
44
|
+
expect(@instance.error).to eql true
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'adds error' do
|
48
|
+
@instance.add_error 'error'
|
49
|
+
expect(@instance.errors).to eql ['error']
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'does NOT affect failed state' do
|
53
|
+
@instance.add_error 'error'
|
54
|
+
expect(@instance.failed).to eql false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context '#exit_code' do
|
59
|
+
it 'returns 1 on error' do
|
60
|
+
@instance.add_error 'error'
|
61
|
+
expect(@instance.exit_code).to eql 1
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'returns 1 on failure' do
|
65
|
+
@instance.add_failure 'failure'
|
66
|
+
expect(@instance.exit_code).to eql 1
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'returns 0 otherwise' do
|
70
|
+
expect(@instance.exit_code).to eql 0
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/task'
|
4
|
+
|
5
|
+
describe 'Task' do
|
6
|
+
context '#initialize' do
|
7
|
+
it 'does nothing if no block given' do
|
8
|
+
expect(SingularityDsl::Task).to_not receive :instance_eval
|
9
|
+
SingularityDsl::Task.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'evals given block if given' do
|
13
|
+
expect(Kernel).to receive(:puts).with('woooooo')
|
14
|
+
SingularityDsl::Task.new { Kernel.puts 'woooooo' }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context '#validate_file' do
|
19
|
+
it 'throws if file DNE' do
|
20
|
+
expect { SingularityDsl::Task.new.validate_file('asdbfadf') }
|
21
|
+
.to raise_error(ArgumentError, /Cannot find/)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context '#task_name' do
|
26
|
+
it 'returns false' do
|
27
|
+
expect(SingularityDsl::Task.new.task_name).to eql false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context '#execute' do
|
32
|
+
it 'throws' do
|
33
|
+
expect { SingularityDsl::Task.new.execute }
|
34
|
+
.to raise_error(RuntimeError,
|
35
|
+
'SingularityDsl::Task::execute not implemented')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context '#failed_status' do
|
40
|
+
it 'returns false for specific values' do
|
41
|
+
task = SingularityDsl::Task.new
|
42
|
+
expect(task.failed_status nil).to eql false
|
43
|
+
expect(task.failed_status 0).to eql false
|
44
|
+
expect(task.failed_status false).to eql false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context '#self.description' do
|
49
|
+
it 'auto-generates task description' do
|
50
|
+
expect(SingularityDsl::Task.new.description)
|
51
|
+
.to eql 'Runs SingularityDsl::Task task'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'singularity_dsl/tasks/shell_task'
|
4
|
+
|
5
|
+
describe 'ShellTask' do
|
6
|
+
let(:sh_task) { ShellTask.new }
|
7
|
+
|
8
|
+
context '#initialize' do
|
9
|
+
it 'starts with no conditionals' do
|
10
|
+
expect(sh_task.conditionals).to eql []
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'has an echo notification as a default alt cmd' do
|
14
|
+
expect(sh_task.alternative)
|
15
|
+
.to eql 'echo "no alternative shell cmd defined"'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#condition' do
|
20
|
+
it 'throws when non string given' do
|
21
|
+
expect { sh_task.condition([]) }.to raise_error
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'appends the cmd to conditionals array' do
|
25
|
+
sh_task.condition 'woo'
|
26
|
+
expect(sh_task.conditionals).to eql ['woo']
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context '#no_fail' do
|
31
|
+
it 'fails when non-bool given' do
|
32
|
+
expect { sh_task.no_fail [] }.to raise_error
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context '#alt' do
|
37
|
+
it 'throws when non string given' do
|
38
|
+
expect { sh_task.alt([]) }.to raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'sets alternative cmd' do
|
42
|
+
sh_task.alt 'woo'
|
43
|
+
expect(sh_task.alternative).to eql 'woo'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context '#command' do
|
48
|
+
it 'sets commands!' do
|
49
|
+
cmd = 'echo "hi :)"'
|
50
|
+
sh_task.command cmd
|
51
|
+
expect(sh_task.shell.command).to eql cmd
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'sets live_stream to STDOUT' do
|
55
|
+
cmd = 'echo "hi :)"'
|
56
|
+
sh_task.command cmd
|
57
|
+
expect(sh_task.shell.live_stream).to eql STDOUT
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context '#task_name' do
|
62
|
+
it 'returns command' do
|
63
|
+
expect(sh_task.task_name).to eql false
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns command' do
|
67
|
+
cmd = 'echo "hi :)"'
|
68
|
+
sh_task.command cmd
|
69
|
+
expect(sh_task.task_name).to eql 'echo "hi :)"'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context '#execute' do
|
74
|
+
it 'errors when command() was never called' do
|
75
|
+
expect { sh_task.execute }.to raise_error
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'runs command returns correct status, with conditionals' do
|
79
|
+
cmd = 'echo "hi :)"'
|
80
|
+
alt = 'echo "no"'
|
81
|
+
sh_task.live_stream = false
|
82
|
+
sh_task.command cmd
|
83
|
+
sh_task.alt alt
|
84
|
+
sh_task.condition 'ls'
|
85
|
+
expect(sh_task).to_not receive(:command).with(alt)
|
86
|
+
expect(sh_task.shell).to receive(:run_command)
|
87
|
+
expect(sh_task.shell).to receive(:exitstatus).and_return 0
|
88
|
+
expect(sh_task.execute).to eql 0
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'runs alternative command' do
|
92
|
+
cmd = 'echo "hi :)"'
|
93
|
+
alt = 'echo "no"'
|
94
|
+
sh_task.command cmd
|
95
|
+
sh_task.alt alt
|
96
|
+
sh_task.condition 'ls -z'
|
97
|
+
expect(sh_task).to_not receive(:command).with(cmd)
|
98
|
+
expect(sh_task).to receive(:command).with(alt)
|
99
|
+
expect(sh_task.shell).to receive(:run_command)
|
100
|
+
expect(sh_task.shell).to receive(:exitstatus).and_return 0
|
101
|
+
expect(sh_task.execute).to eql 0
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'runs command returns correct status, no conditionals' do
|
105
|
+
sh_task.command 'echo "hi :)"'
|
106
|
+
expect(sh_task.shell).to receive(:run_command)
|
107
|
+
expect(sh_task.shell).to receive(:exitstatus).and_return 0
|
108
|
+
expect(sh_task.execute).to eql 0
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns 0 if no_fail set' do
|
112
|
+
sh_task.command 'ls -z'
|
113
|
+
sh_task.no_fail true
|
114
|
+
expect(sh_task.shell).to receive(:run_command)
|
115
|
+
expect(sh_task.shell).to_not receive(:exitstatus)
|
116
|
+
expect(sh_task.execute).to eql 0
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|