rspec-terraform 0.1.0.pre.11 → 0.1.0.pre.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e4c8fee87d53c406e5f9194007504e3f9c68a2b77f55a0c7fb18a84d4f6fbdd
4
- data.tar.gz: 52a46c856d5e0a4fe3655b504a916e62570effaa5e0032969d2a09f43da41a45
3
+ metadata.gz: 91f52906b222af912b150dfe8adeccfcf2a96c6397a925b16e010fe95fdedc7f
4
+ data.tar.gz: 5f8339be7af3ef1e8734e4eb20114f9da5a92a7bf01d12ccc8b25c29918b39fa
5
5
  SHA512:
6
- metadata.gz: 7d88f8512b916e5159c0230d52043e671eb2f852e8f090e1a85d4b94883363830e095f103fc805d48cd7bce8c75fa02a11422717e88e7209d3d38deb12a807b7
7
- data.tar.gz: 3830deddb0e6252eebfc807d103c615a2532f74adf671b732c019c56ef397d3467a2eb8fd645a5e7d251623dcd00698ca85a0941cf4803abe1f252ef5ca42c8c
6
+ metadata.gz: 0fc145bf6e79e9a925ede3dee1f01ff0e9d8f645da18edad9ba825d31788cb663cd018b181ea4b2a18c19051690cb4354e6267e0b6775cd06215d400c744303b
7
+ data.tar.gz: 5593bf9db223bce19a841beb644043b6d9395bb37102aa0e56a39bb7e6b7dd64c36aa6ab1e9f3e2e41c16a3027c46486e78bded63954027dddfd9fda09c950ee
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.11)
4
+ rspec-terraform (0.1.0.pre.14)
5
5
  rspec (>= 3.0)
6
- ruby-terraform (= 1.7.0.pre.6)
6
+ ruby-terraform (= 1.7.0.pre.9)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -21,7 +21,7 @@ GEM
21
21
  diff-lcs (1.5.0)
22
22
  docile (1.4.0)
23
23
  excon (0.92.4)
24
- faker (2.21.0)
24
+ faker (2.22.0)
25
25
  i18n (>= 1.8.11, < 2)
26
26
  faraday (2.3.0)
27
27
  faraday-net_http (~> 2.0)
@@ -83,14 +83,14 @@ GEM
83
83
  diff-lcs (>= 1.2.0, < 2.0)
84
84
  rspec-support (~> 3.11.0)
85
85
  rspec-support (3.11.0)
86
- rubocop (1.31.2)
86
+ rubocop (1.32.0)
87
87
  json (~> 2.3)
88
88
  parallel (~> 1.10)
89
89
  parser (>= 3.1.0.0)
90
90
  rainbow (>= 2.2.2, < 4.0)
91
91
  regexp_parser (>= 1.8, < 3.0)
92
92
  rexml (>= 3.2.5, < 4.0)
93
- rubocop-ast (>= 1.18.0, < 2.0)
93
+ rubocop-ast (>= 1.19.1, < 2.0)
94
94
  ruby-progressbar (~> 1.7)
95
95
  unicode-display_width (>= 1.4.0, < 3.0)
96
96
  rubocop-ast (1.19.1)
@@ -100,7 +100,7 @@ GEM
100
100
  rubocop-rspec (2.12.1)
101
101
  rubocop (~> 1.31)
102
102
  ruby-progressbar (1.11.0)
103
- ruby-terraform (1.7.0.pre.6)
103
+ ruby-terraform (1.7.0.pre.9)
104
104
  immutable-struct (~> 2.4)
105
105
  lino (~> 3.0)
106
106
  ruby2_keywords (0.0.5)
@@ -142,4 +142,4 @@ DEPENDENCIES
142
142
  simplecov
143
143
 
144
144
  BUNDLED WITH
145
- 2.3.18
145
+ 2.3.19
@@ -5,6 +5,9 @@ require 'rspec/matchers'
5
5
  require 'rspec/matchers/built_in/eq'
6
6
  require 'rspec/matchers/built_in/count_expectation'
7
7
 
8
+ require 'ruby_terraform/models/path'
9
+ require 'ruby_terraform/models/path_set'
10
+
8
11
  module RSpec
9
12
  module Terraform
10
13
  module Matchers
@@ -34,6 +37,8 @@ module RSpec
34
37
  def with_attribute_value(*args)
35
38
  stage, path, value = args.count == 3 ? args : [:after, *args]
36
39
  path = [path] if path.is_a?(Symbol)
40
+ path = RubyTerraform::Models::Path.new(path)
41
+ value = maybe_box_value(value)
37
42
  @attributes << { stage: stage, path: path, value: value }
38
43
  self
39
44
  end
@@ -66,18 +71,24 @@ module RSpec
66
71
  end
67
72
  end
68
73
 
74
+ def maybe_box_value(value)
75
+ if value.respond_to?(:matches?)
76
+ value
77
+ else
78
+ RubyTerraform::Models::Objects.box(value)
79
+ end
80
+ end
81
+
69
82
  def attribute_matcher(attribute)
70
83
  expected = attribute[:value]
71
84
  return expected if expected.respond_to?(:matches?)
72
85
 
73
- RSpec::Matchers::BuiltIn::Eq.new(
74
- RubyTerraform::Models::Objects.box(expected)
75
- )
86
+ RSpec::Matchers::BuiltIn::Eq.new(expected)
76
87
  end
77
88
 
78
89
  def attribute_value(object, attribute)
79
90
  expected = attribute[:value]
80
- actual = object.dig(*attribute[:path])
91
+ actual = attribute[:path].read(object)
81
92
  return actual&.unbox if expected.respond_to?(:matches?)
82
93
 
83
94
  actual
@@ -127,16 +138,26 @@ module RSpec
127
138
  "a plan including #{amount} matching " \
128
139
  "resource change#{plurality}."
129
140
 
130
- unless attributes.empty?
131
- got_line =
132
- "#{got_line}\n relevant resource changes are:" \
133
- "\n#{relevant_resource_change_lines}"
134
- end
141
+ with_available_resource_changes(
142
+ maybe_with_relevant_resource_changes(got_line)
143
+ )
144
+ end
145
+ end
146
+
147
+ def with_available_resource_changes(got_line)
148
+ "#{got_line}\n available resource changes are:" \
149
+ "\n#{available_resource_change_lines}"
150
+ end
135
151
 
136
- "#{got_line}\n available resource changes are:" \
137
- "\n#{available_resource_change_lines}"
152
+ def maybe_with_relevant_resource_changes(got_line)
153
+ unless attributes.empty?
154
+ got_line =
155
+ "#{got_line}\n relevant resource changes are:" \
156
+ "\n#{relevant_resource_change_lines}"
138
157
  end
158
+ got_line
139
159
  end
160
+
140
161
  # rubocop:enable Metrics/MethodLength
141
162
 
142
163
  def cardinality_fragment
@@ -172,28 +193,26 @@ module RSpec
172
193
  end
173
194
 
174
195
  def expected_attribute_lines
175
- indent = ' '
176
- attribute_fragments = attributes.collect do |a|
177
- "#{indent}#{render(a[:path])} = #{a[:value].inspect}"
196
+ paths = attributes.collect { |attribute| attribute[:path] }
197
+ path_set = RubyTerraform::Models::PathSet.new(paths)
198
+ values = attributes.collect do |attribute|
199
+ with_matcher_renderable(attribute[:value])
178
200
  end
179
- attribute_fragments.join("\n")
201
+ object = RubyTerraform::Models::Objects.object(path_set, values)
202
+ object.render(level: 6, bare: true)
180
203
  end
181
204
 
182
- # rubocop:disable Metrics/MethodLength
183
205
  def relevant_resource_change_lines
184
206
  relevant_lines = definition_matches(plan).collect do |rc|
185
207
  address = rc.address
186
208
  actions = rc.change.actions.join(', ')
187
209
  attributes = rc.change.after_object
188
- attribute_lines = attributes.collect do |key, value|
189
- " #{key} = #{value.inspect}"
190
- end
191
- attribute_lines = attribute_lines.join("\n")
210
+ attribute_lines = attributes.render(level: 8, bare: true)
211
+
192
212
  " - #{address} (#{actions})\n#{attribute_lines}"
193
213
  end
194
214
  relevant_lines.join("\n")
195
215
  end
196
- # rubocop:enable Metrics/MethodLength
197
216
 
198
217
  def available_resource_change_lines
199
218
  available_lines = plan.resource_changes.collect do |rc|
@@ -204,8 +223,14 @@ module RSpec
204
223
  available_lines.join("\n")
205
224
  end
206
225
 
207
- def render(path)
208
- path.collect { |elem| elem.to_s }.join(',')
226
+ def with_matcher_renderable(value)
227
+ return value if value.respond_to?(:render)
228
+
229
+ value.define_singleton_method(:render) do |_|
230
+ "a value satisfying: #{value.description}"
231
+ end
232
+
233
+ value
209
234
  end
210
235
  end
211
236
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.11'
5
+ VERSION = '0.1.0.pre.14'
6
6
  end
7
7
  end
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.required_ruby_version = '>= 2.7'
39
39
 
40
40
  spec.add_dependency 'rspec', '>= 3.0'
41
- spec.add_dependency 'ruby-terraform', '1.7.0.pre.6'
41
+ spec.add_dependency 'ruby-terraform', '1.7.0.pre.9'
42
42
 
43
43
  spec.add_development_dependency 'bundler'
44
44
  spec.add_development_dependency 'faker'
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.11
4
+ version: 0.1.0.pre.14
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-07-20 00:00:00.000000000 Z
11
+ date: 2022-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.7.0.pre.6
33
+ version: 1.7.0.pre.9
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 1.7.0.pre.6
40
+ version: 1.7.0.pre.9
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement