puppetlabs-stdlib/spec/unit/puppet/provider/file_line/ruby_spec.rb
Peter Meier fc5cfc8cca implement #11017 - make file_line type ensurable
* Implement a simple destroy method.
* Add tests for it
* Refactor code, so file is actually read only once. However, due
  to the nature how provider tests are run, we need to ensure that
  the file is read before we open it to write it.
2012-02-09 15:56:09 +01:00

67 lines
1.9 KiB
Ruby

require 'puppet'
require 'tempfile'
provider_class = Puppet::Type.type(:file_line).provider(:ruby)
describe provider_class do
context "add" do
before :each do
tmp = Tempfile.new('tmp')
@tmpfile = tmp.path
tmp.close!
@resource = Puppet::Type::File_line.new(
{:name => 'foo', :path => @tmpfile, :line => 'foo'}
)
@provider = provider_class.new(@resource)
end
it 'should detect if the line exists in the file' do
File.open(@tmpfile, 'w') do |fh|
fh.write('foo')
end
@provider.exists?.should be_true
end
it 'should detect if the line does not exist in the file' do
File.open(@tmpfile, 'w') do |fh|
fh.write('foo1')
end
@provider.exists?.should be_nil
end
it 'should append to an existing file when creating' do
@provider.create
File.read(@tmpfile).chomp.should == 'foo'
end
end
context "remove" do
before :each do
tmp = Tempfile.new('tmp')
@tmpfile = tmp.path
tmp.close!
@resource = Puppet::Type::File_line.new(
{:name => 'foo', :path => @tmpfile, :line => 'foo', :ensure => 'absent' }
)
@provider = provider_class.new(@resource)
end
it 'should remove the line if it exists' do
File.open(@tmpfile, 'w') do |fh|
fh.write("foo1\nfoo\nfoo2")
end
@provider.destroy
File.read(@tmpfile).should eql("foo1\nfoo2")
end
it 'should remove the line without touching the last new line' do
File.open(@tmpfile, 'w') do |fh|
fh.write("foo1\nfoo\nfoo2\n")
end
@provider.destroy
File.read(@tmpfile).should eql("foo1\nfoo2\n")
end
it 'should remove any occurence of the line' do
File.open(@tmpfile, 'w') do |fh|
fh.write("foo1\nfoo\nfoo2\nfoo\nfoo")
end
@provider.destroy
File.read(@tmpfile).should eql("foo1\nfoo2\n")
end
end
end