- let :provider do
- provider_class.new(resource)
- end
- context 'match and after set' do
- shared_context 'resource_create' do
- let(:match) { '^foo2$' }
- let(:after) { '^foo1$' }
- let(:resource) {
- Puppet::Type::File_line.new(
- {
- :name => 'foo',
- :path => @tmpfile,
- :line => 'inserted = line',
- :after => after,
- :match => match,
- }
- )
- }
- end
- before :each do
- File.open(@tmpfile, 'w') do |fh|
- fh.write("foo1\nfoo2\nfoo = baz")
- end
- end
- describe 'inserts at match' do
- include_context 'resource_create'
- it {
- provider.create
- expect(File.read(@tmpfile).chomp).to eq("foo1\ninserted = line\nfoo = baz")
- }
- end
- describe 'inserts a new line after when no match' do
- include_context 'resource_create' do
- let(:match) { '^nevergoingtomatch$' }
- end
- it {
- provider.create
- expect(File.read(@tmpfile).chomp).to eq("foo1\ninserted = line\nfoo2\nfoo = baz")
- }
- end
- describe 'append to end of file if no match for both after and match' do
- include_context 'resource_create' do
- let(:match) { '^nevergoingtomatch$' }
- let(:after) { '^stillneverafter' }
- end
- it {
- provider.create
- expect(File.read(@tmpfile).chomp).to eq("foo1\nfoo2\nfoo = baz\ninserted = line")
- }
- end
- end
- context 'with one line matching the after expression' do
- before :each do
- File.open(@tmpfile, 'w') do |fh|
- fh.write("foo1\nfoo = blah\nfoo2\nfoo = baz")
- end
- end
-
- it 'inserts the specified line after the line matching the "after" expression' do
- provider.create
- expect(File.read(@tmpfile).chomp).to eql("foo1\ninserted = line\nfoo = blah\nfoo2\nfoo = baz")
- end