1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
require 'spec_helper'
require 'puppet/relationship'
describe Puppet::Relationship do
before do
@edge = Puppet::Relationship.new(:a, :b)
end
it "should have a :source attribute" do
expect(@edge).to respond_to(:source)
end
it "should have a :target attribute" do
expect(@edge).to respond_to(:target)
end
it "should have a :callback attribute" do
@edge.callback = :foo
expect(@edge.callback).to eq(:foo)
end
it "should have an :event attribute" do
@edge.event = :NONE
expect(@edge.event).to eq(:NONE)
end
it "should require a callback if a non-NONE event is specified" do
expect { @edge.event = :something }.to raise_error(ArgumentError)
end
it "should have a :label attribute" do
expect(@edge).to respond_to(:label)
end
it "should provide a :ref method that describes the edge" do
@edge = Puppet::Relationship.new("a", "b")
expect(@edge.ref).to eq("a => b")
end
it "should be able to produce a label as a hash with its event and callback" do
@edge.callback = :foo
@edge.event = :bar
expect(@edge.label).to eq({:callback => :foo, :event => :bar})
end
it "should work if nil options are provided" do
expect { Puppet::Relationship.new("a", "b", nil) }.not_to raise_error
end
end
describe Puppet::Relationship, " when initializing" do
before do
@edge = Puppet::Relationship.new(:a, :b)
end
it "should use the first argument as the source" do
expect(@edge.source).to eq(:a)
end
it "should use the second argument as the target" do
expect(@edge.target).to eq(:b)
end
it "should set the rest of the arguments as the event and callback" do
@edge = Puppet::Relationship.new(:a, :b, :callback => :foo, :event => :bar)
expect(@edge.callback).to eq(:foo)
expect(@edge.event).to eq(:bar)
end
it "should accept events specified as strings" do
@edge = Puppet::Relationship.new(:a, :b, "event" => :NONE)
expect(@edge.event).to eq(:NONE)
end
it "should accept callbacks specified as strings" do
@edge = Puppet::Relationship.new(:a, :b, "callback" => :foo)
expect(@edge.callback).to eq(:foo)
end
end
describe Puppet::Relationship, " when matching edges with no specified event" do
before do
@edge = Puppet::Relationship.new(:a, :b)
end
it "should not match :NONE" do
expect(@edge).not_to be_match(:NONE)
end
it "should not match :ALL_EVENTS" do
expect(@edge).not_to be_match(:ALL_EVENTS)
end
it "should not match any other events" do
expect(@edge).not_to be_match(:whatever)
end
end
describe Puppet::Relationship, " when matching edges with :NONE as the event" do
before do
@edge = Puppet::Relationship.new(:a, :b, :event => :NONE)
end
it "should not match :NONE" do
expect(@edge).not_to be_match(:NONE)
end
it "should not match :ALL_EVENTS" do
expect(@edge).not_to be_match(:ALL_EVENTS)
end
it "should not match other events" do
expect(@edge).not_to be_match(:yayness)
end
end
describe Puppet::Relationship, " when matching edges with :ALL as the event" do
before do
@edge = Puppet::Relationship.new(:a, :b, :event => :ALL_EVENTS, :callback => :whatever)
end
it "should not match :NONE" do
expect(@edge).not_to be_match(:NONE)
end
it "should match :ALL_EVENTS" do
expect(@edge).to be_match(:ALL_EVENTS)
end
it "should match all other events" do
expect(@edge).to be_match(:foo)
end
end
describe Puppet::Relationship, " when matching edges with a non-standard event" do
before do
@edge = Puppet::Relationship.new(:a, :b, :event => :random, :callback => :whatever)
end
it "should not match :NONE" do
expect(@edge).not_to be_match(:NONE)
end
it "should not match :ALL_EVENTS" do
expect(@edge).not_to be_match(:ALL_EVENTS)
end
it "should match events with the same name" do
expect(@edge).to be_match(:random)
end
end
describe Puppet::Relationship, "when converting to json" do
before do
@edge = Puppet::Relationship.new('a', 'b', :event => :random, :callback => :whatever)
end
it "should store the stringified source as the source in the data" do
expect(JSON.parse(@edge.to_json)["source"]).to eq("a")
end
it "should store the stringified target as the target in the data" do
expect(JSON.parse(@edge.to_json)['target']).to eq("b")
end
it "should store the jsonified event as the event in the data" do
expect(JSON.parse(@edge.to_json)["event"]).to eq("random")
end
it "should not store an event when none is set" do
@edge.event = nil
expect(JSON.parse(@edge.to_json)).not_to include('event')
end
it "should store the jsonified callback as the callback in the data" do
@edge.callback = "whatever"
expect(JSON.parse(@edge.to_json)["callback"]).to eq("whatever")
end
it "should not store a callback when none is set in the edge" do
@edge.callback = nil
expect(JSON.parse(@edge.to_json)).not_to include('callback')
end
end
describe Puppet::Relationship, "when converting from json" do
it "should pass the source in as the first argument" do
expect(Puppet::Relationship.from_data_hash("source" => "mysource", "target" => "mytarget").source).to eq('mysource')
end
it "should pass the target in as the second argument" do
expect(Puppet::Relationship.from_data_hash("source" => "mysource", "target" => "mytarget").target).to eq('mytarget')
end
it "should pass the event as an argument if it's provided" do
expect(Puppet::Relationship.from_data_hash("source" => "mysource", "target" => "mytarget", "event" => "myevent", "callback" => "eh").event).to eq(:myevent)
end
it "should pass the callback as an argument if it's provided" do
expect(Puppet::Relationship.from_data_hash("source" => "mysource", "target" => "mytarget", "callback" => "mycallback").callback).to eq(:mycallback)
end
end
|