]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Add spec tests and pulled in PR #427
authorTravis Fields <travis@puppetlabs.com>
Thu, 9 Apr 2015 18:02:29 +0000 (11:02 -0700)
committerBryan Jen <bryan.jen@gmail.com>
Thu, 9 Apr 2015 22:24:39 +0000 (15:24 -0700)
Changed append line to open in 'w' mode and have to rewrite lines in order to append new line

lib/puppet/provider/file_line/ruby.rb
spec/unit/puppet/provider/file_line/ruby_spec.rb

index a1acab8066f92d6ddd51d815559d95c23bbc6801..e7854f00117790138ca60b378e6e9c38e4d640b9 100644 (file)
@@ -87,7 +87,10 @@ Puppet::Type.type(:file_line).provide(:ruby) do
   #
   # @api private
   def append_line
-    File.open(resource[:path], 'a') do |fh|
+    File.open(resource[:path], 'w') do |fh|
+      lines.each do |l|
+        fh.puts(l)
+      end
       fh.puts resource[:line]
     end
   end
index d2a129c327d97f42128b47b7a7e6471c640832da..a84fc78e7f2973b68b6a09d66cbff7efe97555f7 100755 (executable)
@@ -46,12 +46,12 @@ describe provider_class do
       @tmpfile = tmp.path
       tmp.close!
       @resource = Puppet::Type::File_line.new(
-          {
-           :name => 'foo',
-           :path => @tmpfile,
-           :line => 'foo = bar',
-           :match => '^foo\s*=.*$',
-          }
+        {
+          :name  => 'foo',
+          :path  => @tmpfile,
+          :line  => 'foo = bar',
+          :match => '^foo\s*=.*$',
+        }
       )
       @provider = provider_class.new(@resource)
     end
@@ -69,11 +69,11 @@ describe provider_class do
       it 'should replace all lines that matches' do
         @resource = Puppet::Type::File_line.new(
           {
-            :name => 'foo',
-            :path => @tmpfile,
-            :line => 'foo = bar',
-            :match => '^foo\s*=.*$',
-            :multiple => true
+            :name     => 'foo',
+            :path     => @tmpfile,
+            :line     => 'foo = bar',
+            :match    => '^foo\s*=.*$',
+            :multiple => true,
           }
         )
         @provider = provider_class.new(@resource)
@@ -89,11 +89,11 @@ describe provider_class do
         expect {
           @resource = Puppet::Type::File_line.new(
             {
-              :name => 'foo',
-              :path => @tmpfile,
-              :line => 'foo = bar',
-              :match => '^foo\s*=.*$',
-              :multiple => 'asgadga'
+              :name     => 'foo',
+              :path     => @tmpfile,
+              :line     => 'foo = bar',
+              :match    => '^foo\s*=.*$',
+              :multiple => 'asgadga',
             }
           )
         }.to raise_error(Puppet::Error, /Invalid value "asgadga"\. Valid values are true, false\./)
@@ -140,7 +140,54 @@ describe provider_class do
       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|
@@ -194,7 +241,12 @@ describe provider_class do
       @tmpfile = tmp.path
       tmp.close!
       @resource = Puppet::Type::File_line.new(
-        {:name => 'foo', :path => @tmpfile, :line => 'foo', :ensure => 'absent' }
+        {
+          :name   => 'foo',
+          :path   => @tmpfile,
+          :line   => 'foo',
+          :ensure => 'absent',
+        }
       )
       @provider = provider_class.new(@resource)
     end