puppetlabs / rspec-puppet

RSpec tests for your Puppet manifests
https://puppetlabs.github.io/rspec-puppet/
MIT License
13 stars 18 forks source link

Any way to test contiain_file( ).with_content() with a full multi line string? #100

Open Cinderhaze opened 8 months ago

Cinderhaze commented 8 months ago

Describe the Bug

When using a multi-line string, if I use it { is.expected_to contain_file('/mock/file.sh').with_content(multiline_content) } to do some initial simple 'golden master' style testing of a templated file, I get back a failed test with output that indicates a failed test, but shows no Diff. Is there a good way to check the full content of a file? I was wondering if it was related to the output problems listed in https://github.com/rodjek/rspec-puppet/issues/327, about suppressing trailing newlines.

Failure/Error: it { is expected.to contain_file('/mock/file.sh').with_content(multiline_content) }
  expected that the catalogue would contain File[/mock/file.sh] with content set to supplied string
  Diff: 
    <The diff is empty, are your objects producing identical '#inspect' output?>

Expected Behavior

I would expect either a match, or a Diff that shows what is different. Ideally, I would love an example on the tutorial page of how to do a full file comparison.

Environment

ekohl commented 8 months ago

The diff can eat line endings. Very annoying, but it should work if they match

nabertrand commented 8 months ago

You might try https://github.com/enterprisemodules/puppet-catalog_rspec to generate the content string. You might need pdk test unit -v to see the output or pdk bundle exec rake spec_standalone if that still hides the output.

ekohl commented 8 months ago

If you want to resolve this, you should provide a reproducer.

Cinderhaze commented 7 months ago

Sorry, I didn't see your update! notifications get lost, and I am working on an air-gapped system, so a reproducer isn't so direct to pull over. I'll see if I can whip one up at home.