Update code from https://github.com/dmi-try/marionette-collective
[packages/precise/mcollective.git] / spec / unit / data / result_spec.rb
1 #!/usr/bin/env rspec
2
3 require 'spec_helper'
4
5 module MCollective
6   module Data
7     describe Result do
8       before(:each) do
9         @result = Result.new({})
10       end
11
12       describe "#initialize" do
13         it "should initialize empty values for all output fields" do
14           result = Result.new({:rspec1 => {}, :rspec2 => {}})
15           result[:rspec1].should == nil
16           result[:rspec2].should == nil
17         end
18
19         it "should set default values for all output fields" do
20           result = Result.new({:rspec1 => {:default => 1}, :rspec2 => {}})
21           result[:rspec1].should == 1
22           result[:rspec2].should == nil
23         end
24       end
25
26       describe "#[]=" do
27         it "should only allow trusted types of data to be saved" do
28           expect { @result["rspec"] = Time.now }.to raise_error
29           @result["rspec"] = 1
30           @result["rspec"] = 1.1
31           @result["rspec"] = "rspec"
32           @result["rspec"] = true
33           @result["rspec"] = false
34         end
35
36         it "should set the correct value" do
37           @result["rspec"] = "rspec value"
38           @result.instance_variable_get("@data").should == {:rspec => "rspec value"}
39         end
40
41         it "should only allow valid data types" do
42           expect { @result["rspec"] = Time.now }.to raise_error(/Can only store .+ data but got Time for key rspec/)
43         end
44       end
45
46       describe "#include" do
47         it "should return the correct list of keys" do
48           @result["x"] = "1"
49           @result[:y] = "2"
50           @result.keys.sort.should == [:x, :y]
51         end
52       end
53
54       describe "#include?" do
55         it "should correctly report that a key is present or absent" do
56           @result.include?("rspec").should == false
57           @result.include?(:rspec).should == false
58           @result["rspec"] = "rspec"
59           @result.include?("rspec").should == true
60           @result.include?(:rspec).should == true
61         end
62       end
63
64       describe "#[]" do
65         it "should retrieve the correct information" do
66           @result["rspec"].should == nil
67           @result[:rspec].should == nil
68           @result["rspec"] = "rspec value"
69           @result["rspec"].should == "rspec value"
70           @result[:rspec].should == "rspec value"
71         end
72       end
73
74       describe "#method_missing" do
75         it "should raise the correct exception for unknown keys" do
76           expect { @result.nosuchdata }.to raise_error(NoMethodError)
77         end
78
79         it "should retrieve the correct data" do
80           @result["rspec"] = "rspec value"
81           @result.rspec.should == "rspec value"
82         end
83       end
84     end
85   end
86 end