I'm going to want to reuse this logic later so that I can quickly
determine if a report has any differences.

Reviewed-by: Nick Lewis

Signed-off-by: Matt Robinson <[email protected]>
---
Local-branch: ticket/next/5866
 app/controllers/reports_controller.rb |    9 +--------
 app/models/report.rb                  |   12 ++++++++++++
 spec/models/report_spec.rb            |   23 ++++++++++++++++++++---
 3 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/app/controllers/reports_controller.rb 
b/app/controllers/reports_controller.rb
index 6b3f3c4..bd6f85a 100644
--- a/app/controllers/reports_controller.rb
+++ b/app/controllers/reports_controller.rb
@@ -41,14 +41,7 @@ class ReportsController < InheritedResources::Base
     @my_report = Report.find(params[:id])
     @baseline_report = Report.find(params[:baseline_id])
     @diff = @baseline_report.diff(@my_report)
-    @resource_statuses = {:failure => [], :pass => []}
-    @diff.each do |resource, differences|
-      if ! differences.empty?
-        @resource_statuses[:failure] << resource
-      else
-        @resource_statuses[:pass] << resource
-      end
-    end
+    @resource_statuses = Report.divide_diff_into_pass_and_fail(@diff)
   end
 
   def make_baseline
diff --git a/app/models/report.rb b/app/models/report.rb
index 9d669ec..858c657 100644
--- a/app/models/report.rb
+++ b/app/models/report.rb
@@ -73,6 +73,18 @@ class Report < ActiveRecord::Base
     diff_stuff
   end
 
+  def self.divide_diff_into_pass_and_fail(diff)
+    divided_diff = {:failure => [], :pass => []}
+    diff.each do |resource, differences|
+      if ! differences.empty?
+        divided_diff[:failure] << resource
+      else
+        divided_diff[:pass] << resource
+      end
+    end
+    divided_diff
+  end
+
   def self.attribute_hash_from(report_hash)
     attribute_hash = report_hash.dup
     attribute_hash["logs_attributes"] = attribute_hash.delete("logs")
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index 8bc6a58..776aa8f 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -172,24 +172,37 @@ HEREDOC
     it "should produce a diff with no changes for the same report twice" do
       report1 = generate_report(Time.now, "file", "foo")
       report2 = generate_report(1.week.ago, "file", "foo")
-      report1.diff(report2).should == { "File[/tmp/foo]" => {} }
+      report_diff = report1.diff(report2)
+      report_diff.should == { "File[/tmp/foo]" => {} }
+      Report.divide_diff_into_pass_and_fail(report_diff).should == { 
+        :pass    => ["File[/tmp/foo]"],
+        :failure => []
+      }
     end
 
     it "should show diff for the different reports" do
       report1 = generate_report(Time.now, "file", "foo")
       report2 = generate_report(1.week.ago, "directory", "bar")
-      report1.diff(report2).should == {
+      report_diff = report1.diff(report2)
+      
+      report_diff.should == {
         'File[/tmp/foo]' => {
           :ensure => [:file, :directory],
           :content => ["{md5}foo", "{md5}bar"],
         }
       }
+      Report.divide_diff_into_pass_and_fail(report_diff).should == { 
+        :pass    => [],
+        :failure => ["File[/tmp/foo]"]
+      }
     end
 
     it "should output nils appropriately for resources that are missing from 
either report" do
       report1 = generate_report(Time.now, "file", "foo", "/tmp/foo")
       report2 = generate_report(1.week.ago, "file", "foo", "/tmp/bar")
-      report1.diff(report2).should == {
+      report_diff = report1.diff(report2)
+
+      report_diff.should == {
         'File[/tmp/foo]' => {
           :ensure => [:file, nil],
           :content => ["{md5}foo", nil],
@@ -199,6 +212,10 @@ HEREDOC
           :content => [nil, "{md5}foo"],
         }
       }
+      Report.divide_diff_into_pass_and_fail(report_diff).should == { 
+        :pass    => [],
+        :failure => ["File[/tmp/foo]", "File[/tmp/bar]"]
+      }
     end
 
     it "should output nils appropriately for properties that are missing from 
either report" do
-- 
1.7.3.1

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to