# Test a normal puppet run with idempotency. shared_examples_for 'puppet_apply_success' do |manifest| it 'should apply the manifest without error' do apply_manifest(manifest, :catch_failures => true) end it 'should be idempotent' do apply_manifest(manifest, :catch_changes => true) end end # Check that a file exists and its content match the one given as # argument. The argument can be a multiline string or an array of # regexp. # # To use it encapsulate it in a context whose name is the file to # test. shared_examples 'a_valid_configuration' do |config_content| let(:configuration_file) do |example| # see the idiom it leads to later in this file example.metadata[:example_group][:parent_example_group][:description] end subject { file(configuration_file) } it { is_expected.to be_file } it { is_expected.to exist } content = nil if config_content.is_a?(Array) content = config_content else content = config_content.split("\n").map { |l| Regexp.quote(l) } end it 'content should be valid' do expect(subject.content).to include_regexp(content) end end