rspec-terraform 0.1.0.pre.16 → 0.1.0.pre.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rspec/terraform/matchers/include_output_change.rb +152 -4
- data/lib/rspec/terraform/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d18507e1fb2c9cb75f1d78660709319e3addcc1eeee92538c2b3134d6c3c6783
|
4
|
+
data.tar.gz: 794b11b381d232bbbfa5e61ca2a759e8240366768ce7462ad2ea5e6489dddada
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7bcc363f2779b425e544abd7065263e974d36351ed4526b7e768f3d93cc66bd2241c8afc81a65c7ede3418df35eb70bb3fd0cdfca77b3dcca629f20ab9091a1
|
7
|
+
data.tar.gz: 9fd86d2510ffcd78213d9ebf8770a1fa70ed4a3a18fca758a2824388e61afcad802d4f1c3bfa85c9612f4abfefb10307a0c5f282e432ea7d490ff9d1c991d8a6
|
data/Gemfile.lock
CHANGED
@@ -3,27 +3,175 @@
|
|
3
3
|
module RSpec
|
4
4
|
module Terraform
|
5
5
|
module Matchers
|
6
|
+
# rubocop:disable Metrics/ClassLength
|
6
7
|
class IncludeOutputChange
|
7
|
-
attr_reader :definition
|
8
|
+
attr_reader :definition, :value, :plan
|
8
9
|
|
9
|
-
def initialize(definition)
|
10
|
+
def initialize(definition = {})
|
10
11
|
@definition = definition
|
12
|
+
@value = nil
|
11
13
|
end
|
12
14
|
|
13
15
|
def matches?(plan)
|
14
|
-
|
16
|
+
@plan = plan
|
17
|
+
|
18
|
+
!value_matches(plan).empty?
|
15
19
|
end
|
16
20
|
|
17
|
-
def with_value(
|
21
|
+
def with_value(value)
|
22
|
+
@value = maybe_box_value(value)
|
18
23
|
self
|
19
24
|
end
|
20
25
|
|
26
|
+
def failure_message
|
27
|
+
"\nexpected: #{positive_expected_line}" \
|
28
|
+
"\n got: #{positive_got_line}"
|
29
|
+
end
|
30
|
+
|
21
31
|
private
|
22
32
|
|
23
33
|
def definition_matches(plan)
|
24
34
|
plan.output_changes_matching(definition)
|
25
35
|
end
|
36
|
+
|
37
|
+
def value_matches(plan)
|
38
|
+
matches = definition_matches(plan)
|
39
|
+
return matches unless value
|
40
|
+
|
41
|
+
expected = value_matcher(value)
|
42
|
+
|
43
|
+
matches.filter do |output_change|
|
44
|
+
change = output_change.change
|
45
|
+
after = change.after_object
|
46
|
+
actual = resolved_value(value, after)
|
47
|
+
|
48
|
+
expected&.matches?(actual)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def maybe_box_value(value)
|
53
|
+
if value.respond_to?(:matches?)
|
54
|
+
value
|
55
|
+
else
|
56
|
+
RubyTerraform::Models::Objects.box(value)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def value_matcher(expected)
|
61
|
+
return expected if expected.respond_to?(:matches?)
|
62
|
+
|
63
|
+
RSpec::Matchers::BuiltIn::Eq.new(expected)
|
64
|
+
end
|
65
|
+
|
66
|
+
def resolved_value(expected, actual)
|
67
|
+
return actual&.unbox if expected.respond_to?(:matches?)
|
68
|
+
|
69
|
+
actual
|
70
|
+
end
|
71
|
+
|
72
|
+
def positive_expected_line
|
73
|
+
maybe_with_expected_value(
|
74
|
+
maybe_with_definition(
|
75
|
+
positive_plan_line
|
76
|
+
)
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
def positive_plan_line
|
81
|
+
'a plan including at least one output change'
|
82
|
+
end
|
83
|
+
|
84
|
+
def maybe_with_definition(expected_line)
|
85
|
+
unless definition.empty?
|
86
|
+
expected_line =
|
87
|
+
"#{expected_line} matching definition:\n#{definition_lines}"
|
88
|
+
end
|
89
|
+
expected_line
|
90
|
+
end
|
91
|
+
|
92
|
+
def maybe_with_expected_value(expected_line)
|
93
|
+
unless value.nil?
|
94
|
+
expected_line =
|
95
|
+
"#{expected_line}\n with value after " \
|
96
|
+
"the output change is applied of:\n#{expected_value_lines}"
|
97
|
+
end
|
98
|
+
expected_line
|
99
|
+
end
|
100
|
+
|
101
|
+
def definition_lines
|
102
|
+
indent = ' '
|
103
|
+
definition
|
104
|
+
.collect { |k, v| "#{indent}#{k} = #{v.inspect}" }
|
105
|
+
.join("\n")
|
106
|
+
end
|
107
|
+
|
108
|
+
def expected_value_lines
|
109
|
+
renderable_value = with_matcher_renderable(value)
|
110
|
+
value_object =
|
111
|
+
RubyTerraform::Models::Values.map(value: renderable_value)
|
112
|
+
value_object.render(level: 6, bare: true)
|
113
|
+
end
|
114
|
+
|
115
|
+
def positive_got_line
|
116
|
+
if plan.output_changes.empty?
|
117
|
+
'a plan including no output changes.'
|
118
|
+
else
|
119
|
+
with_available_output_changes(
|
120
|
+
maybe_with_relevant_output_changes(
|
121
|
+
'a plan including no matching output changes.'
|
122
|
+
)
|
123
|
+
)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def with_available_output_changes(got_line)
|
128
|
+
"#{got_line}\n available output changes are:" \
|
129
|
+
"\n#{available_output_change_lines}"
|
130
|
+
end
|
131
|
+
|
132
|
+
def maybe_with_relevant_output_changes(got_line)
|
133
|
+
unless value.nil?
|
134
|
+
got_line =
|
135
|
+
"#{got_line}\n relevant output changes are:" \
|
136
|
+
"\n#{relevant_output_change_lines}"
|
137
|
+
end
|
138
|
+
got_line
|
139
|
+
end
|
140
|
+
|
141
|
+
def available_output_change_lines
|
142
|
+
available_lines = plan.output_changes.collect do |oc|
|
143
|
+
name = oc.name
|
144
|
+
actions = oc.change.actions.join(', ')
|
145
|
+
" - #{name} (#{actions})"
|
146
|
+
end
|
147
|
+
available_lines.join("\n")
|
148
|
+
end
|
149
|
+
|
150
|
+
def relevant_output_change_lines
|
151
|
+
relevant_lines = definition_matches(plan).collect do |oc|
|
152
|
+
name = oc.name
|
153
|
+
actions = oc.change.actions.join(', ')
|
154
|
+
value = oc.change.after_object
|
155
|
+
value_object =
|
156
|
+
RubyTerraform::Models::Values.map(value: value)
|
157
|
+
value_lines = value_object.render(level: 8, bare: true)
|
158
|
+
|
159
|
+
" - #{name} (#{actions})\n#{value_lines}"
|
160
|
+
end
|
161
|
+
relevant_lines.join("\n")
|
162
|
+
end
|
163
|
+
|
164
|
+
def with_matcher_renderable(value)
|
165
|
+
return value if value.respond_to?(:render)
|
166
|
+
|
167
|
+
value.define_singleton_method(:render) do |_|
|
168
|
+
"a value satisfying: #{value.description}"
|
169
|
+
end
|
170
|
+
|
171
|
+
value
|
172
|
+
end
|
26
173
|
end
|
174
|
+
# rubocop:enable Metrics/ClassLength
|
27
175
|
end
|
28
176
|
end
|
29
177
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.pre.
|
4
|
+
version: 0.1.0.pre.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- InfraBlocks Maintainers
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|