poise-languages 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +20 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +32 -0
- data/LICENSE +202 -0
- data/README.md +27 -0
- data/Rakefile +17 -0
- data/lib/poise_languages.rb +25 -0
- data/lib/poise_languages/command.rb +25 -0
- data/lib/poise_languages/command/mixin.rb +231 -0
- data/lib/poise_languages/error.rb +21 -0
- data/lib/poise_languages/scl.rb +24 -0
- data/lib/poise_languages/scl/mixin.rb +110 -0
- data/lib/poise_languages/scl/resource.rb +124 -0
- data/lib/poise_languages/system.rb +24 -0
- data/lib/poise_languages/system/mixin.rb +165 -0
- data/lib/poise_languages/system/resource.rb +202 -0
- data/lib/poise_languages/utils.rb +49 -0
- data/lib/poise_languages/utils/which.rb +49 -0
- data/lib/poise_languages/version.rb +20 -0
- data/poise-languages.gemspec +40 -0
- data/test/gemfiles/chef-12.gemfile +19 -0
- data/test/gemfiles/master.gemfile +22 -0
- data/test/spec/command/mixin_spec.rb +328 -0
- data/test/spec/scl/mixin_spec.rb +209 -0
- data/test/spec/scl/resource_spec.rb +51 -0
- data/test/spec/spec_helper.rb +18 -0
- data/test/spec/system/mixin_spec.rb +172 -0
- data/test/spec/system/resource_spec.rb +123 -0
- data/test/spec/utils/which_spec.rb +69 -0
- data/test/spec/utils_spec.rb +55 -0
- metadata +132 -0
@@ -0,0 +1,209 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe PoiseLanguages::Scl::Mixin do
|
20
|
+
resource(:poise_test)
|
21
|
+
provider(:poise_test) do
|
22
|
+
include described_class
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#install_scl_package' do
|
26
|
+
provider(:poise_test) do
|
27
|
+
include Poise
|
28
|
+
include described_class
|
29
|
+
def scl_package
|
30
|
+
{name: 'python34', url: 'http://something.rpm'}
|
31
|
+
end
|
32
|
+
def action_run
|
33
|
+
install_scl_package
|
34
|
+
end
|
35
|
+
end
|
36
|
+
recipe do
|
37
|
+
poise_test 'test'
|
38
|
+
end
|
39
|
+
|
40
|
+
it { is_expected.to install_poise_languages_scl('python34').with(parent: chef_run.poise_test('test'), url: 'http://something.rpm') }
|
41
|
+
end # /describe #install_scl_package
|
42
|
+
|
43
|
+
describe '#uninstall_scl_package' do
|
44
|
+
provider(:poise_test) do
|
45
|
+
include Poise
|
46
|
+
include described_class
|
47
|
+
def scl_package
|
48
|
+
{name: 'python34', url: 'http://something.rpm'}
|
49
|
+
end
|
50
|
+
def action_run
|
51
|
+
uninstall_scl_package
|
52
|
+
end
|
53
|
+
end
|
54
|
+
recipe do
|
55
|
+
poise_test 'test'
|
56
|
+
end
|
57
|
+
|
58
|
+
it { is_expected.to uninstall_poise_languages_scl('python34').with(parent: chef_run.poise_test('test'), url: 'http://something.rpm') }
|
59
|
+
end # /describe #uninstall_scl_package
|
60
|
+
|
61
|
+
describe '#scl_package' do
|
62
|
+
let(:package) { nil }
|
63
|
+
recipe(subject: false) do
|
64
|
+
poise_test 'test'
|
65
|
+
end
|
66
|
+
subject { chef_run.poise_test('test').provider_for_action(:run).send(:scl_package) }
|
67
|
+
before do
|
68
|
+
allow_any_instance_of(provider(:poise_test)).to receive(:options).and_return({})
|
69
|
+
allow(provider(:poise_test)).to receive(:find_scl_package).and_return(package)
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'with a valid package' do
|
73
|
+
let(:package) { {name: 'python34'} }
|
74
|
+
it { is_expected.to eq(package) }
|
75
|
+
end # /context with a valid package
|
76
|
+
|
77
|
+
context 'without a valid package' do
|
78
|
+
it { expect { subject }.to raise_error PoiseLanguages::Error }
|
79
|
+
end # /context without a valid package
|
80
|
+
end # /describe #scl_package
|
81
|
+
|
82
|
+
describe '#scl_folder' do
|
83
|
+
let(:test_provider) { provider(:poise_test).new(nil, nil) }
|
84
|
+
subject { test_provider.send(:scl_folder) }
|
85
|
+
before do
|
86
|
+
allow(test_provider).to receive(:scl_package).and_return({name: 'python34'})
|
87
|
+
end
|
88
|
+
|
89
|
+
it { is_expected.to eq '/opt/rh/python34' }
|
90
|
+
end # /describe #scl_folder
|
91
|
+
|
92
|
+
describe '#scl_environment' do
|
93
|
+
let(:test_provider) { provider(:poise_test).new(nil, nil) }
|
94
|
+
subject { test_provider.send(:scl_environment) }
|
95
|
+
before do
|
96
|
+
allow(test_provider).to receive(:scl_package).and_return({name: 'python34'})
|
97
|
+
end
|
98
|
+
|
99
|
+
it do
|
100
|
+
expect(test_provider).to receive(:parse_enable_file).with('/opt/rh/python34/enable')
|
101
|
+
subject
|
102
|
+
end
|
103
|
+
end # /describe #scl_environment
|
104
|
+
|
105
|
+
describe '#parse_enable_file' do
|
106
|
+
let(:content) { '' }
|
107
|
+
before do
|
108
|
+
allow(File).to receive(:exist?).with('/test/enable').and_return(true)
|
109
|
+
allow(IO).to receive(:readlines).with('/test/enable').and_return(content.split(/\n/))
|
110
|
+
end
|
111
|
+
subject { provider(:poise_test).new(nil, nil).send(:parse_enable_file, '/test/enable') }
|
112
|
+
|
113
|
+
context 'with an empty file' do
|
114
|
+
it { is_expected.to eq({}) }
|
115
|
+
end # /context with an empty file
|
116
|
+
|
117
|
+
context 'with valid data' do
|
118
|
+
# $ cat /opt/rh/python33/enable
|
119
|
+
let(:content) { <<-EOH }
|
120
|
+
export PATH=/opt/rh/python33/root/usr/bin${PATH:+:${PATH}}
|
121
|
+
export LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
|
122
|
+
export MANPATH=/opt/rh/python33/root/usr/share/man:${MANPATH}
|
123
|
+
# For systemtap
|
124
|
+
export XDG_DATA_DIRS=/opt/rh/python33/root/usr/share${XDG_DATA_DIRS:+:${XDG_DATA_DIRS}}
|
125
|
+
# For pkg-config
|
126
|
+
export PKG_CONFIG_PATH=/opt/rh/python33/root/usr/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
|
127
|
+
EOH
|
128
|
+
it do
|
129
|
+
is_expected.to eq({
|
130
|
+
'PATH' => "/opt/rh/python33/root/usr/bin#{ENV['PATH'] ? ':' + ENV['PATH'] : ''}",
|
131
|
+
'LD_LIBRARY_PATH' => "/opt/rh/python33/root/usr/lib64#{ENV['LD_LIBRARY_PATH'] ? ':' + ENV['LD_LIBRARY_PATH'] : ''}",
|
132
|
+
'MANPATH' => "/opt/rh/python33/root/usr/share/man:#{ENV['MANPATH']}",
|
133
|
+
'XDG_DATA_DIRS' => "/opt/rh/python33/root/usr/share#{ENV['XDG_DATA_DIRS'] ? ':' + ENV['XDG_DATA_DIRS'] : ''}",
|
134
|
+
'PKG_CONFIG_PATH' => "/opt/rh/python33/root/usr/lib64/pkgconfig#{ENV['PKG_CONFIG_PATH'] ? ':' + ENV['PKG_CONFIG_PATH'] : ''}",
|
135
|
+
})
|
136
|
+
end
|
137
|
+
end # /context with valid data
|
138
|
+
|
139
|
+
context 'with a non-existent file' do
|
140
|
+
before do
|
141
|
+
allow(File).to receive(:exist?).with('/test/enable').and_return(false)
|
142
|
+
end
|
143
|
+
it { is_expected.to eq({}) }
|
144
|
+
end # /context with a non-existent file
|
145
|
+
end # /describe #parse_enable_file
|
146
|
+
|
147
|
+
describe '.provides_auto?' do
|
148
|
+
let(:node) { double('node') }
|
149
|
+
let(:new_resource) { double('resource') }
|
150
|
+
subject { provider(:poise_test).provides_auto?(node, new_resource) }
|
151
|
+
before do
|
152
|
+
allow(provider(:poise_test)).to receive(:inversion_options).with(node, new_resource).and_return({})
|
153
|
+
allow(provider(:poise_test)).to receive(:find_scl_package).with(node, nil).and_return({})
|
154
|
+
end
|
155
|
+
it { is_expected.to be true }
|
156
|
+
end # /describe .provides_auto?
|
157
|
+
|
158
|
+
describe '.find_scl_package' do
|
159
|
+
let(:version) { '' }
|
160
|
+
provider(:poise_test) do
|
161
|
+
include described_class
|
162
|
+
scl_package('3.4.2', 'rh-python34', {
|
163
|
+
['redhat', 'centos'] => {
|
164
|
+
'~> 7.0' => 'https://www.softwarecollections.org/en/scls/rhscl/rh-python34/epel-7-x86_64/download/rhscl-rh-python34-epel-7-x86_64.noarch.rpm',
|
165
|
+
'~> 6.0' => 'https://www.softwarecollections.org/en/scls/rhscl/rh-python34/epel-6-x86_64/download/rhscl-rh-python34-epel-6-x86_64.noarch.rpm',
|
166
|
+
},
|
167
|
+
})
|
168
|
+
scl_package('3.3.2', 'python33', {
|
169
|
+
['redhat', 'centos'] => {
|
170
|
+
'~> 7.0' => 'https://www.softwarecollections.org/en/scls/rhscl/python33/epel-7-x86_64/download/rhscl-python33-epel-7-x86_64.noarch.rpm',
|
171
|
+
'~> 6.0' => 'https://www.softwarecollections.org/en/scls/rhscl/python33/epel-6-x86_64/download/rhscl-python33-epel-6-x86_64.noarch.rpm',
|
172
|
+
},
|
173
|
+
'fedora' => {
|
174
|
+
'~> 21.0' => 'https://www.softwarecollections.org/en/scls/rhscl/python33/fedora-21-x86_64/download/rhscl-python33-fedora-21-x86_64.noarch.rpm',
|
175
|
+
'~> 20.0' => 'https://www.softwarecollections.org/en/scls/rhscl/python33/fedora-20-x86_64/download/rhscl-python33-fedora-20-x86_64.noarch.rpm',
|
176
|
+
},
|
177
|
+
})
|
178
|
+
end
|
179
|
+
subject { provider(:poise_test).send(:find_scl_package, chef_run.node, version) }
|
180
|
+
|
181
|
+
context 'on CentOS 7 with no version' do
|
182
|
+
let(:chefspec_options) { {platform: 'centos', version: '7.0'} }
|
183
|
+
it do
|
184
|
+
is_expected.to include({
|
185
|
+
version: '3.4.2',
|
186
|
+
name: 'rh-python34',
|
187
|
+
url: 'https://www.softwarecollections.org/en/scls/rhscl/rh-python34/epel-7-x86_64/download/rhscl-rh-python34-epel-7-x86_64.noarch.rpm',
|
188
|
+
})
|
189
|
+
end
|
190
|
+
end # /context on CentOS 7 with no version
|
191
|
+
|
192
|
+
context 'on CentOS 6 with a version' do
|
193
|
+
let(:version) { '3.3' }
|
194
|
+
let(:chefspec_options) { {platform: 'centos', version: '6.0'} }
|
195
|
+
it do
|
196
|
+
is_expected.to include({
|
197
|
+
version: '3.3.2',
|
198
|
+
name: 'python33',
|
199
|
+
url: 'https://www.softwarecollections.org/en/scls/rhscl/python33/epel-6-x86_64/download/rhscl-python33-epel-6-x86_64.noarch.rpm',
|
200
|
+
})
|
201
|
+
end
|
202
|
+
end # /context on CentOS 6 with a version
|
203
|
+
|
204
|
+
context 'on Ubuntu' do
|
205
|
+
let(:chefspec_options) { {platform: 'ubuntu', version: '12.04'} }
|
206
|
+
it { is_expected.to be_nil }
|
207
|
+
end # /context on Ubuntu
|
208
|
+
end # /describe .find_scl_package
|
209
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe PoiseLanguages::Scl::Resource do
|
20
|
+
step_into(:poise_languages_scl)
|
21
|
+
let(:chefspec_options) { {platform: 'centos', version: '7.0'} }
|
22
|
+
|
23
|
+
context 'action :install' do
|
24
|
+
recipe do
|
25
|
+
r = ruby_block 'parent'
|
26
|
+
poise_languages_scl 'mylang' do
|
27
|
+
parent r
|
28
|
+
url 'http://mylang.rpm'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it { is_expected.to upgrade_package('scl-utils') }
|
33
|
+
it { is_expected.to install_rpm_package('rhscl-mylang').with(source: 'http://mylang.rpm') }
|
34
|
+
it { is_expected.to install_yum_package('mylang').with(flush_cache: {before: true}) }
|
35
|
+
end # /context action :install
|
36
|
+
|
37
|
+
context 'action :uninstall' do
|
38
|
+
recipe do
|
39
|
+
r = ruby_block 'parent'
|
40
|
+
poise_languages_scl 'mylang' do
|
41
|
+
action :uninstall
|
42
|
+
parent r
|
43
|
+
url 'http://mylang.rpm'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it { is_expected.to remove_package('scl-utils') }
|
48
|
+
it { is_expected.to remove_rpm_package('rhscl-mylang') }
|
49
|
+
it { is_expected.to remove_yum_package('mylang') }
|
50
|
+
end # /context action :uninstall
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise_boiler/spec_helper'
|
18
|
+
require 'poise_languages'
|
@@ -0,0 +1,172 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe PoiseLanguages::System::Mixin do
|
20
|
+
resource(:poise_test)
|
21
|
+
provider(:poise_test) do
|
22
|
+
include described_class
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#install_system_packages' do
|
26
|
+
provider(:poise_test) do
|
27
|
+
include Poise
|
28
|
+
include described_class
|
29
|
+
def system_package_name
|
30
|
+
'mylang'
|
31
|
+
end
|
32
|
+
def options
|
33
|
+
{}
|
34
|
+
end
|
35
|
+
def action_run
|
36
|
+
install_system_packages
|
37
|
+
end
|
38
|
+
end
|
39
|
+
recipe do
|
40
|
+
poise_test 'test'
|
41
|
+
end
|
42
|
+
|
43
|
+
it { is_expected.to install_poise_languages_system('mylang').with(parent: chef_run.poise_test('test'),
|
44
|
+
dev_package: nil,
|
45
|
+
dev_package_overrides: {},
|
46
|
+
package_version: nil,
|
47
|
+
version: '') }
|
48
|
+
end # /describe #install_system_packages
|
49
|
+
|
50
|
+
describe '#uninstall_system_packages' do
|
51
|
+
provider(:poise_test) do
|
52
|
+
include Poise
|
53
|
+
include described_class
|
54
|
+
def system_package_name
|
55
|
+
'mylang'
|
56
|
+
end
|
57
|
+
def options
|
58
|
+
{}
|
59
|
+
end
|
60
|
+
def action_run
|
61
|
+
uninstall_system_packages
|
62
|
+
end
|
63
|
+
end
|
64
|
+
recipe do
|
65
|
+
poise_test 'test'
|
66
|
+
end
|
67
|
+
|
68
|
+
it { is_expected.to uninstall_poise_languages_system('mylang') }
|
69
|
+
end # /describe #uninstall_system_packages
|
70
|
+
|
71
|
+
describe '#system_package_candidates' do
|
72
|
+
subject { provider(:poise_test).new(nil, nil).send(:system_package_candidates, '') }
|
73
|
+
it { expect { subject }.to raise_error NotImplementedError }
|
74
|
+
end # /describe #system_package_candidates
|
75
|
+
|
76
|
+
describe '#system_package_name' do
|
77
|
+
let(:chefspec_options) { {platform: 'debian', version: '7.0'} }
|
78
|
+
let(:version) { '' }
|
79
|
+
let(:test_provider) { provider(:poise_test).new(nil, chef_run.run_context) }
|
80
|
+
provider(:poise_test) do
|
81
|
+
include described_class
|
82
|
+
packages('python', {
|
83
|
+
debian: {
|
84
|
+
'~> 8.0' => %w{python3.4 python2.7},
|
85
|
+
'~> 7.0' => %w{python3.2 python2.7 python2.6},
|
86
|
+
'~> 6.0' => %w{python3.1 python2.6 python2.5},
|
87
|
+
},
|
88
|
+
ubuntu: {
|
89
|
+
'14.04' => %w{python3.4 python2.7},
|
90
|
+
'12.04' => %w{python3.2 python2.7},
|
91
|
+
'10.04' => %w{python3.1 python2.6},
|
92
|
+
},
|
93
|
+
})
|
94
|
+
|
95
|
+
def system_package_candidates(version)
|
96
|
+
%w{python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6}.select {|pkg| pkg.start_with?("python#{version}") } + %w{python}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
subject { test_provider.send(:system_package_name) }
|
100
|
+
before do
|
101
|
+
allow(test_provider).to receive(:options).and_return({'version' => version})
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'with a blank version' do
|
105
|
+
it { is_expected.to eq 'python3.2' }
|
106
|
+
end # /context with a blank version
|
107
|
+
|
108
|
+
context 'with version 3' do
|
109
|
+
let(:version) { '3' }
|
110
|
+
it { is_expected.to eq 'python3.2' }
|
111
|
+
end # /context with version 3
|
112
|
+
|
113
|
+
context 'with version 2' do
|
114
|
+
let(:version) { '2' }
|
115
|
+
it { is_expected.to eq 'python2.7' }
|
116
|
+
end # /context with version 2
|
117
|
+
|
118
|
+
context 'with version 2.6' do
|
119
|
+
let(:version) { '2.6' }
|
120
|
+
it { is_expected.to eq 'python2.6' }
|
121
|
+
end # /context with version 2.6
|
122
|
+
|
123
|
+
context 'on an unknown platform' do
|
124
|
+
let(:chefspec_options) { {platform: 'centos', version: '7.0'} }
|
125
|
+
it { is_expected.to eq 'python' }
|
126
|
+
end # /context on an unknown platform
|
127
|
+
|
128
|
+
context 'with no valid package' do
|
129
|
+
provider(:poise_test) do
|
130
|
+
include described_class
|
131
|
+
packages(nil, {})
|
132
|
+
|
133
|
+
def system_package_candidates(version)
|
134
|
+
[]
|
135
|
+
end
|
136
|
+
end
|
137
|
+
it { expect { subject }.to raise_error PoiseLanguages::Error }
|
138
|
+
end # /context with no valid package
|
139
|
+
end # /describe #system_package_name
|
140
|
+
|
141
|
+
describe '#system_dev_package_overrides' do
|
142
|
+
subject { provider(:poise_test).new(nil, nil).send(:system_dev_package_overrides) }
|
143
|
+
it { is_expected.to eq({}) }
|
144
|
+
end # /describe #system_dev_package_overrides
|
145
|
+
|
146
|
+
describe '.provides_auto?' do
|
147
|
+
provider(:poise_test) do
|
148
|
+
include Poise(inversion: :poise_test)
|
149
|
+
include described_class
|
150
|
+
end
|
151
|
+
subject { provider(:poise_test).provides_auto?(chef_run.node, nil) }
|
152
|
+
|
153
|
+
context 'on CentOS' do
|
154
|
+
let(:chefspec_options) { {platform: 'centos', version: '7.0'} }
|
155
|
+
it { is_expected.to be true}
|
156
|
+
end # /context on CentOS
|
157
|
+
|
158
|
+
context 'on an unknown platform' do
|
159
|
+
it { is_expected.to be false}
|
160
|
+
end # /context on an unknown platform
|
161
|
+
end # /describe .provides_auto?
|
162
|
+
|
163
|
+
describe '.default_inversion_options' do
|
164
|
+
provider(:poise_test) do
|
165
|
+
include Poise(inversion: :poise_test)
|
166
|
+
include described_class
|
167
|
+
end
|
168
|
+
subject { provider(:poise_test).default_inversion_options(nil, nil) }
|
169
|
+
|
170
|
+
it { is_expected.to be_a(Hash) }
|
171
|
+
end # /describe .default_inversion_options
|
172
|
+
end
|