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
|
require "support/shared/integration/integration_helper"
require "chef/mixin/properties"
module ChefMixinPropertiesSpec
describe "Chef::Resource.property" do
include IntegrationSupport
context "with a base class A with properties a, ab, and ac" do
class A
include Chef::Mixin::Properties
property :a, "a", default: "a"
property :ab, ["a", "b"], default: "a"
property :ac, ["a", "c"], default: "a"
end
context "and a module B with properties b, ab and bc" do
module B
include Chef::Mixin::Properties
property :b, "b", default: "b"
property :ab, default: "b"
property :bc, ["b", "c"], default: "c"
end
context "and a derived class C < A with properties c, ac and bc" do
class C < A
include B
property :c, "c", default: "c"
property :ac, default: "c"
property :bc, default: "c"
end
it "A.properties has a, ab, and ac with types 'a', ['a', 'b'], and ['b', 'c']" do
expect(A.properties.keys).to eq [ :a, :ab, :ac ]
expect(A.properties[:a].validation_options[:is]).to eq "a"
expect(A.properties[:ab].validation_options[:is]).to eq [ "a", "b" ]
expect(A.properties[:ac].validation_options[:is]).to eq [ "a", "c" ]
end
it "B.properties has b, ab, and bc with types 'b', nil and ['b', 'c']" do
expect(B.properties.keys).to eq [ :b, :ab, :bc ]
expect(B.properties[:b].validation_options[:is]).to eq "b"
expect(B.properties[:ab].validation_options[:is]).to be_nil
expect(B.properties[:bc].validation_options[:is]).to eq [ "b", "c" ]
end
it "C.properties has a, b, c, ac and bc with merged types" do
expect(C.properties.keys).to eq [ :a, :ab, :ac, :b, :bc, :c ]
expect(C.properties[:a].validation_options[:is]).to eq "a"
expect(C.properties[:b].validation_options[:is]).to eq "b"
expect(C.properties[:c].validation_options[:is]).to eq "c"
expect(C.properties[:ac].validation_options[:is]).to eq [ "a", "c" ]
expect(C.properties[:bc].validation_options[:is]).to eq [ "b", "c" ]
end
it "C.properties has ab with a non-merged type (from B)" do
expect(C.properties[:ab].validation_options[:is]).to be_nil
end
context "and an instance of C" do
let(:c) { C.new }
it "all properties can be retrieved and merged properties default to ab->b, ac->c, bc->c" do
expect(c.a).to eq("a")
expect(c.b).to eq("b")
expect(c.c).to eq("c")
expect(c.ab).to eq("b")
expect(c.ac).to eq("c")
expect(c.bc).to eq("c")
end
end
end
end
end
end
context "with an Inner module" do
module Inner
include Chef::Mixin::Properties
property :inner
end
context "and an Outer module including it" do
module Outer
include Inner
property :outer
end
context "and an Outerest class including that" do
class Outerest
include Outer
property :outerest
end
it "Outerest.properties.validation_options[:is] inner, outer, outerest" do
expect(Outerest.properties.keys).to eq [:inner, :outer, :outerest]
end
end
end
end
end
|