diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index feb5720..65c6128 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,54 +1,71 @@ require 'puppetlabs_spec_helper/module_spec_helper' require 'rspec-puppet-facts' require 'spec_helper_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_local.rb')) include RspecPuppetFacts default_facts = { puppetversion: Puppet.version, facterversion: Facter.version, } default_fact_files = [ File.expand_path(File.join(File.dirname(__FILE__), 'default_facts.yml')), File.expand_path(File.join(File.dirname(__FILE__), 'default_module_facts.yml')), ] default_fact_files.each do |f| next unless File.exist?(f) && File.readable?(f) && File.size?(f) begin default_facts.merge!(YAML.safe_load(File.read(f), [], [], true)) rescue => e RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}" end end # read default_facts and merge them over what is provided by facterdb default_facts.each do |fact, value| add_custom_fact fact, value end RSpec.configure do |c| c.default_facts = default_facts c.before :each do # set to strictest setting for testing # by default Puppet runs at warning level Puppet.settings[:strict] = :warning end c.filter_run_excluding(bolt: true) unless ENV['GEM_BOLT'] c.after(:suite) do end end # Ensures that a module is defined # @param module_name Name of the module def ensure_module_defined(module_name) module_name.split('::').reduce(Object) do |last_module, next_module| last_module.const_set(next_module, Module.new) unless last_module.const_defined?(next_module, false) last_module.const_get(next_module, false) end + + c.mock_with :rspec + c.before :each do + # Ensure that we don't accidentally cache facts and environment between + # test cases. This requires each example group to explicitly load the + # facts being exercised with something like + # Facter.collection.loader.load(:ipaddress) + Facter.clear + Facter.clear_messages + + RSpec::Mocks.setup + end + + c.after :each do + RSpec::Mocks.verify + RSpec::Mocks.teardown + end end # 'spec_overrides' from sync.yml will appear below this line diff --git a/spec/unit/puppet/provider/loginctl_user/ruby_spec.rb b/spec/unit/puppet/provider/loginctl_user/ruby_spec.rb index 03ab8b1..3289254 100644 --- a/spec/unit/puppet/provider/loginctl_user/ruby_spec.rb +++ b/spec/unit/puppet/provider/loginctl_user/ruby_spec.rb @@ -1,18 +1,29 @@ require 'spec_helper' require 'puppet' provider_class = Puppet::Type.type(:loginctl_user).provider(:ruby) describe provider_class do let(:common_params) do { title: 'foo', linger: 'enabled', } end + context 'when listing instances' do + it 'should find all entries' do + allow(provider_class).to receive(:loginctl).with('list-users', '--no-legend').and_return("0 root\n42 foo\n314 bar\n") + allow(provider_class).to receive(:loginctl).with('show-user', '-p', 'Name', '-p', 'Linger', 'root', 'foo', 'bar').and_return("Name=root\nLinger=no\n\nName=foo\nLinger=yes\n\nName=bar\nLinger=no\n") + inst = provider_class.instances.map do |p| + end + + inst.size.is_expected.to eq(3) + end + end + context 'when enabling linger' do it 'should enable linger' do resource = Puppet::Type::LoginctlUser.new(common_params) end end end