Skip to content

Commit f6d7bfa

Browse files
author
jordanbreen28
committed
(maint) - Ensure all spec files are run during tests
1 parent b53094e commit f6d7bfa

File tree

3 files changed

+47
-41
lines changed

3 files changed

+47
-41
lines changed

Rakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require 'rspec/core/rake_task'
99
require 'yard'
1010

1111
RSpec::Core::RakeTask.new(:spec) do |t|
12-
t.pattern = 'spec/unit/*_spec.rb'
12+
t.pattern = 'spec/unit/**/*_spec.rb'
1313
end
1414
task default: :spec
1515

lib/puppet/provider/dsc_base_provider/dsc_base_provider.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ def interpolate_variables(string)
666666
# @param resource [Hash] a hash with the information needed to run `Invoke-DscResource`
667667
# @return [String] A multi-line string which sets the PSModulePath at the system level
668668
def munge_psmodulepath(resource)
669-
vendor_path = resource[:vendored_modules_path].tr('/', '\\')
669+
vendor_path = resource[:vendored_modules_path]&.tr('/', '\\')
670670
<<~MUNGE_PSMODULEPATH.strip
671671
$UnmungedPSModulePath = [System.Environment]::GetEnvironmentVariable('PSModulePath','machine')
672672
$MungedPSModulePath = $env:PSModulePath + ';#{vendor_path}'

spec/unit/puppet/provider/dsc_base_provider/dsc_base_provider_spec.rb

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@
22

33
require 'spec_helper'
44
require 'puppet/type'
5+
require 'puppet/resource_api'
56
require 'puppet/provider/dsc_base_provider/dsc_base_provider'
67
require 'json'
78

89
RSpec.describe Puppet::Provider::DscBaseProvider do
910
subject(:provider) { described_class.new }
1011

11-
let(:context) { instance_double(Puppet::ResourceApi::PuppetContext) }
12-
let(:type) { instance_double(Puppet::ResourceApi::TypeDefinition) }
12+
let(:context) { instance_double(Puppet::ResourceApi::BaseContext, 'context') }
13+
let(:type) { instance_double(Puppet::ResourceApi::TypeDefinition, 'typedef') }
1314
let(:ps_manager) { instance_double(Pwsh::Manager) }
1415
let(:execute_response) { { stdout: nil, stderr: nil, exitcode: 0 } }
1516

1617
# Reset the caches after each run
1718
after do
18-
described_class.instance_variable_set(:@cached_canonicalized_resource, [])
19-
described_class.instance_variable_set(:@cached_query_results, [])
20-
described_class.instance_variable_set(:@cached_test_results, [])
21-
described_class.instance_variable_set(:@logon_failures, [])
19+
provider.instance_variable_set(:@cached_canonicalized_resource, [])
20+
provider.instance_variable_set(:@cached_query_results, [])
21+
provider.instance_variable_set(:@cached_test_results, [])
22+
provider.instance_variable_set(:@logon_failures, [])
2223
end
2324

2425
describe '.initialize' do
@@ -28,27 +29,30 @@
2829
end
2930

3031
it 'initializes the cached_canonicalized_resource instance variable' do
31-
expect(described_class.instance_variable_get(:@cached_canonicalized_resource)).to eq([])
32+
expect(provider.instance_variable_get(:@cached_canonicalized_resource)).to eq([])
3233
end
3334

3435
it 'initializes the cached_query_results instance variable' do
35-
expect(described_class.instance_variable_get(:@cached_query_results)).to eq([])
36+
expect(provider.instance_variable_get(:@cached_query_results)).to eq([])
3637
end
3738

3839
it 'initializes the cached_test_results instance variable' do
39-
expect(described_class.instance_variable_get(:@cached_test_results)).to eq([])
40+
expect(provider.instance_variable_get(:@cached_test_results)).to eq([])
4041
end
4142

4243
it 'initializes the logon_failures instance variable' do
43-
expect(described_class.instance_variable_get(:@logon_failures)).to eq([])
44+
expect(provider.instance_variable_get(:@logon_failures)).to eq([])
4445
end
4546
end
4647

4748
describe '.cached_test_results' do
4849
let(:cache_value) { %w[foo bar] }
4950

51+
before do
52+
provider.instance_variable_set(:@cached_test_results, cache_value)
53+
end
54+
5055
it 'returns the value of the @cached_test_results instance variable' do
51-
described_class.instance_variable_set(:@cached_test_results, cache_value)
5256
expect(provider.cached_test_results).to eq(cache_value)
5357
end
5458
end
@@ -237,19 +241,19 @@
237241

238242
describe '.get' do
239243
after do
240-
described_class.instance_variable_set(:@cached_canonicalized_resource, [])
244+
provider.instance_variable_set(:@cached_canonicalized_resource, [])
241245
end
242246

243247
it 'checks the cached results, returning if one exists for the specified names' do
244-
described_class.instance_variable_set(:@cached_canonicalized_resource, [])
248+
provider.instance_variable_set(:@cached_canonicalized_resource, [])
245249
allow(context).to receive(:debug)
246250
expect(provider).to receive(:fetch_cached_hashes).with([], [{ name: 'foo' }]).and_return([{ name: 'foo', property: 'bar' }])
247251
expect(provider).not_to receive(:invoke_get_method)
248252
expect(provider.get(context, [{ name: 'foo' }])).to eq([{ name: 'foo', property: 'bar' }])
249253
end
250254

251255
it 'adds mandatory properties to the name hash when calling invoke_get_method' do
252-
described_class.instance_variable_set(:@cached_canonicalized_resource, [{ name: 'foo', property: 'bar', dsc_some_parameter: 'baz' }])
256+
provider.instance_variable_set(:@cached_canonicalized_resource, [{ name: 'foo', property: 'bar', dsc_some_parameter: 'baz' }])
253257
allow(context).to receive(:debug)
254258
expect(provider).to receive(:fetch_cached_hashes).with([], [{ name: 'foo' }]).and_return([])
255259
expect(provider).to receive(:namevar_attributes).and_return([:name]).exactly(3).times
@@ -530,7 +534,7 @@
530534
end
531535

532536
after do
533-
described_class.instance_variable_set(:@cached_query_results, nil)
537+
provider.instance_variable_set(:@cached_query_results, [])
534538
end
535539

536540
context 'when the invocation script returns data without errors' do
@@ -557,7 +561,7 @@
557561

558562
it 'caches the result' do
559563
expect { result }.not_to raise_error
560-
expect(described_class.instance_variable_get(:@cached_query_results)).to eq([result])
564+
expect(provider.instance_variable_get(:@cached_query_results)).to eq([result])
561565
end
562566

563567
it 'removes unrelated properties from the result' do
@@ -719,7 +723,7 @@
719723
end
720724

721725
after do
722-
described_class.instance_variable_set(:@logon_failures, [])
726+
provider.instance_variable_set(:@logon_failures, [])
723727
end
724728

725729
it 'errors specifically for a logon failure and returns nil' do
@@ -728,12 +732,12 @@
728732

729733
it 'caches the logon failure' do
730734
expect { result }.not_to raise_error
731-
expect(described_class.instance_variable_get(:@logon_failures)).to eq([credential_hash])
735+
expect(provider.instance_variable_get(:@logon_failures)).to eq([credential_hash])
732736
end
733737

734738
it 'caches the query results' do
735739
expect { result }.not_to raise_error
736-
expect(described_class.instance_variable_get(:@cached_query_results)).to eq([name_hash])
740+
expect(provider.instance_variable_get(:@cached_query_results)).to eq([name_hash])
737741
end
738742
end
739743

@@ -981,11 +985,11 @@
981985
end
982986

983987
describe '.invoke_test_method' do
984-
subject(:result) { provider.invoke_test_method(context, name, expect(subject).to) }
988+
subject(:result) { provider.invoke_test_method(context, name, should_hash) }
985989

986990
let(:name) { { name: 'foo', dsc_name: 'bar' } }
987-
let(:should) { name.merge(dsc_ensure: 'present') }
988-
let(:test_properties) { expect(subject).to.reject { |k, _v| k == :name } }
991+
let(:should_hash) { name.merge(dsc_ensure: 'present') }
992+
let(:test_properties) { should_hash.reject { |k, _v| k == :name } }
989993
let(:invoke_dsc_resource_data) { nil }
990994

991995
before do
@@ -995,7 +999,7 @@
995999
end
9961000

9971001
after do
998-
described_class.instance_variable_set(:@cached_test_results, [])
1002+
provider.instance_variable_set(:@cached_test_results, [])
9991003
end
10001004

10011005
context 'when something went wrong calling Invoke-DscResource' do
@@ -1043,28 +1047,28 @@
10431047

10441048
describe '.instantiated_variables' do
10451049
after do
1046-
described_class.instance_variable_set(:@instantiated_variables, [])
1050+
provider.instance_variable_set(:@instantiated_variables, [])
10471051
end
10481052

10491053
it 'sets the instantiated_variables instance variable to {} if not initialized' do
10501054
expect(provider.instantiated_variables).to eq({})
10511055
end
10521056

10531057
it 'returns the instantiated_variables instance variable if already initialized' do
1054-
described_class.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
1058+
provider.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
10551059
expect(provider.instantiated_variables).to eq({ foo: 'bar' })
10561060
end
10571061
end
10581062

10591063
describe '.clear_instantiated_variables!' do
10601064
after do
1061-
described_class.instance_variable_set(:@instantiated_variables, [])
1065+
provider.instance_variable_set(:@instantiated_variables, [])
10621066
end
10631067

10641068
it 'sets the instantiated_variables instance variable to {}' do
1065-
described_class.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
1069+
provider.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
10661070
expect { provider.clear_instantiated_variables! }.not_to raise_error
1067-
expect(described_class.instance_variable_get(:@instantiated_variables)).to eq({})
1071+
expect(provider.instance_variable_get(:@instantiated_variables)).to eq({})
10681072
end
10691073
end
10701074

@@ -1087,16 +1091,16 @@
10871091
end
10881092

10891093
after do
1090-
described_class.instance_variable_set(:@logon_failures, [])
1094+
provider.instance_variable_set(:@logon_failures, [])
10911095
end
10921096

10931097
it 'returns false if there have been no failed logons with the username/password combination' do
1094-
described_class.instance_variable_set(:@logon_failures, [bad_credential_hash])
1098+
provider.instance_variable_set(:@logon_failures, [bad_credential_hash])
10951099
expect(provider.logon_failed_already?(good_credential_hash)).to be(false)
10961100
end
10971101

10981102
it 'returns true if the username/password specified are found in the logon_failures instance variable' do
1099-
described_class.instance_variable_set(:@logon_failures, [good_credential_hash, bad_credential_hash])
1103+
provider.instance_variable_set(:@logon_failures, [good_credential_hash, bad_credential_hash])
11001104
expect(provider.logon_failed_already?(bad_credential_hash)).to be(true)
11011105
end
11021106
end
@@ -1437,16 +1441,18 @@
14371441
context 'when the resource does not have the dscmeta_resource_implementation key' do
14381442
let(:test_resource) { {} }
14391443

1440-
it 'returns nil' do
1441-
expect(result).to be_nil
1444+
it 'sets $UnmungedPSModulePath to the current PSModulePath' do
1445+
# since https://github.com/puppetlabs/ruby-pwsh/pull/261 we load vendored path for MOF resources as well
1446+
expect(result).to match(/\$UnmungedPSModulePath = .+GetEnvironmentVariable.+PSModulePath.+machine/)
14421447
end
14431448
end
14441449

14451450
context "when the resource's dscmeta_resource_implementation is not 'Class'" do
14461451
let(:test_resource) { { dscmeta_resource_implementation: 'MOF' } }
14471452

1448-
it 'returns nil' do
1449-
expect(result).to be_nil
1453+
# since https://github.com/puppetlabs/ruby-pwsh/pull/261 we load vendored path for MOF resources as well
1454+
it 'sets $UnmungedPSModulePath to the current PSModulePath' do
1455+
expect(result).to match(/\$UnmungedPSModulePath = .+GetEnvironmentVariable.+PSModulePath.+machine/)
14501456
end
14511457
end
14521458

@@ -1510,7 +1516,7 @@
15101516
end
15111517

15121518
after do
1513-
described_class.instance_variable_set(:@instantiated_variables, [])
1519+
provider.instance_variable_set(:@instantiated_variables, [])
15141520
end
15151521

15161522
it 'writes the ruby representation of the credentials as the value of a key named for the new variable into the instantiated_variables cache' do
@@ -1543,7 +1549,7 @@
15431549
subject(:result) { provider.prepare_cim_instances(test_resource) }
15441550

15451551
after do
1546-
described_class.instance_variable_set(:@instantiated_variables, [])
1552+
provider.instance_variable_set(:@instantiated_variables, [])
15471553
end
15481554

15491555
context 'when a cim instance is passed without nested cim instances' do
@@ -1652,7 +1658,7 @@
16521658

16531659
describe '.format_ciminstance' do
16541660
after do
1655-
described_class.instance_variable_set(:@instantiated_variables, [])
1661+
provider.instance_variable_set(:@instantiated_variables, [])
16561662
end
16571663

16581664
it 'defines and returns a new cim instance as a PowerShell variable, passing the class name and property hash' do
@@ -1668,7 +1674,7 @@
16681674
end
16691675

16701676
it 'interpolates variables in the case of a cim instance containing a nested instance' do
1671-
described_class.instance_variable_set(:@instantiated_variables, { 'SomeVariable' => { 'bar' => 'ope' } })
1677+
provider.instance_variable_set(:@instantiated_variables, { 'SomeVariable' => { 'bar' => 'ope' } })
16721678
property_hash = { 'foo' => { 'bar' => 'ope' } }
16731679
expect(provider.format_ciminstance('foo', 'SomeClass', property_hash)).to match(/@\{'foo' = \$SomeVariable\}/)
16741680
end

0 commit comments

Comments
 (0)