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
|