Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / spec / unit / data / result_spec.rb
diff --git a/spec/unit/data/result_spec.rb b/spec/unit/data/result_spec.rb
new file mode 100644 (file)
index 0000000..9ea22cd
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/env rspec
+
+require 'spec_helper'
+
+module MCollective
+  module Data
+    describe Result do
+      before(:each) do
+        @result = Result.new
+      end
+
+      describe "#[]=" do
+        it "should only allow trusted types of data to be saved" do
+          expect { @result["rspec"] = Time.now }.to raise_error
+          @result["rspec"] = 1
+          @result["rspec"] = 1.1
+          @result["rspec"] = "rspec"
+          @result["rspec"] = true
+          @result["rspec"] = false
+        end
+
+        it "should set the correct value" do
+          @result["rspec"] = "rspec value"
+          @result.instance_variable_get("@data").should == {:rspec => "rspec value"}
+        end
+
+        it "should only allow valid data types" do
+          expect { @result["rspec"] = Time.now }.to raise_error(/Can only store .+ data but got Time for key rspec/)
+        end
+      end
+
+      describe "#include" do
+        it "should return the correct list of keys" do
+          @result["x"] = "1"
+          @result[:y] = "2"
+          @result.keys.sort.should == [:x, :y]
+        end
+      end
+
+      describe "#include?" do
+        it "should correctly report that a key is present or absent" do
+          @result.include?("rspec").should == false
+          @result.include?(:rspec).should == false
+          @result["rspec"] = "rspec"
+          @result.include?("rspec").should == true
+          @result.include?(:rspec).should == true
+        end
+      end
+
+      describe "#[]" do
+        it "should retrieve the correct information" do
+          @result["rspec"].should == nil
+          @result[:rspec].should == nil
+          @result["rspec"] = "rspec value"
+          @result["rspec"].should == "rspec value"
+          @result[:rspec].should == "rspec value"
+        end
+      end
+
+      describe "#method_missing" do
+        it "should raise the correct exception for unknown keys" do
+          expect { @result.nosuchdata }.to raise_error(NoMethodError)
+        end
+
+        it "should retrieve the correct data" do
+          @result["rspec"] = "rspec value"
+          @result.rspec.should == "rspec value"
+        end
+      end
+    end
+  end
+end