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

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: e9616ce6b70683138de564ce5a8e7ff68a892ec5ad3c6db8e8ac5904d07ba889
4
- data.tar.gz: cdf25b73c0af2057c9c00130dca4ac9b1a69e282c9134d1389e0ae3862f995d3
3
+ metadata.gz: 7e4c8fee87d53c406e5f9194007504e3f9c68a2b77f55a0c7fb18a84d4f6fbdd
4
+ data.tar.gz: 52a46c856d5e0a4fe3655b504a916e62570effaa5e0032969d2a09f43da41a45
5
5
  SHA512:
6
- metadata.gz: f27156422ee5fb0742682fec4113fad7429ce5f434c06bd599b5d3fb644988642da7ac582f48950d80060c12ef6215f4859a0f08298da0d7b3d7adbd0eca9b59
7
- data.tar.gz: 779b8685fa9858f25bf70ed1455baedebd96f19ec4134f47f8ee3d14fe67dd438e708675c3c6d8f52289798742ca54149f27b3c83476e936fa9e90e0497da02b
6
+ metadata.gz: 7d88f8512b916e5159c0230d52043e671eb2f852e8f090e1a85d4b94883363830e095f103fc805d48cd7bce8c75fa02a11422717e88e7209d3d38deb12a807b7
7
+ data.tar.gz: 3830deddb0e6252eebfc807d103c615a2532f74adf671b732c019c56ef397d3467a2eb8fd645a5e7d251623dcd00698ca85a0941cf4803abe1f252ef5ca42c8c
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.8)
4
+ rspec-terraform (0.1.0.pre.11)
5
5
  rspec (>= 3.0)
6
- ruby-terraform (= 1.7.0.pre.5)
6
+ ruby-terraform (= 1.7.0.pre.6)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -20,7 +20,7 @@ GEM
20
20
  concurrent-ruby (1.1.10)
21
21
  diff-lcs (1.5.0)
22
22
  docile (1.4.0)
23
- excon (0.92.3)
23
+ excon (0.92.4)
24
24
  faker (2.21.0)
25
25
  i18n (>= 1.8.11, < 2)
26
26
  faraday (2.3.0)
@@ -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.5)
103
+ ruby-terraform (1.7.0.pre.6)
104
104
  immutable-struct (~> 2.4)
105
105
  lino (~> 3.0)
106
106
  ruby2_keywords (0.0.5)
@@ -116,7 +116,7 @@ GEM
116
116
  simplecov-html (0.12.3)
117
117
  simplecov_json_formatter (0.1.4)
118
118
  sshkey (2.0.0)
119
- tzinfo (2.0.4)
119
+ tzinfo (2.0.5)
120
120
  concurrent-ruby (~> 1.0)
121
121
  unicode-display_width (2.2.0)
122
122
 
data/Rakefile CHANGED
@@ -66,7 +66,7 @@ namespace :library do
66
66
  task check: [:rubocop]
67
67
 
68
68
  desc 'Attempt to automatically fix issues with the library'
69
- task fix: [:'rubocop:autocorrect']
69
+ task fix: [:'rubocop:autocorrect_all']
70
70
  end
71
71
 
72
72
  namespace :test do
@@ -8,10 +8,11 @@ require 'rspec/matchers/built_in/count_expectation'
8
8
  module RSpec
9
9
  module Terraform
10
10
  module Matchers
11
+ # rubocop:disable Metrics/ClassLength
11
12
  class IncludeResourceChange
12
13
  include RSpec::Matchers::BuiltIn::CountExpectation
13
14
 
14
- attr_reader :definition, :plan
15
+ attr_reader :definition, :attributes, :plan
15
16
 
16
17
  def initialize(definition = {})
17
18
  @definition = definition
@@ -83,41 +84,132 @@ module RSpec
83
84
  end
84
85
 
85
86
  def positive_expected_line
86
- cardinality = 'at least one'
87
- expected_line = "a plan including #{cardinality} resource change"
87
+ maybe_with_expected_attributes(
88
+ maybe_with_definition(
89
+ positive_plan_line
90
+ )
91
+ )
92
+ end
93
+
94
+ def positive_plan_line
95
+ cardinality = cardinality_fragment
96
+ plurality = expected_count.nil? || expected_count == 1 ? '' : 's'
97
+
98
+ "a plan including #{cardinality} resource change#{plurality}"
99
+ end
88
100
 
101
+ def maybe_with_definition(expected_line)
89
102
  unless @definition.empty?
90
103
  expected_line =
91
104
  "#{expected_line} matching definition:\n#{definition_lines}"
92
105
  end
106
+ expected_line
107
+ end
93
108
 
109
+ def maybe_with_expected_attributes(expected_line)
110
+ unless @attributes.empty?
111
+ expected_line =
112
+ "#{expected_line}\n with attribute values after " \
113
+ "the resource change is applied of:\n#{expected_attribute_lines}"
114
+ end
94
115
  expected_line
95
116
  end
96
117
 
118
+ # rubocop:disable Metrics/MethodLength
97
119
  def positive_got_line
98
120
  if plan.resource_changes.empty?
99
- return 'a plan including no resource changes'
121
+ 'a plan including no resource changes.'
122
+ else
123
+ count = attribute_matches(plan).count
124
+ amount = count.zero? ? 'no' : cardinality_amount(count)
125
+ plurality = count == 1 ? '' : 's'
126
+ got_line =
127
+ "a plan including #{amount} matching " \
128
+ "resource change#{plurality}."
129
+
130
+ unless attributes.empty?
131
+ got_line =
132
+ "#{got_line}\n relevant resource changes are:" \
133
+ "\n#{relevant_resource_change_lines}"
134
+ end
135
+
136
+ "#{got_line}\n available resource changes are:" \
137
+ "\n#{available_resource_change_lines}"
138
+ end
139
+ end
140
+ # rubocop:enable Metrics/MethodLength
141
+
142
+ def cardinality_fragment
143
+ qualifier = cardinality_qualifier
144
+ amount = cardinality_amount(expected_count)
145
+ "#{qualifier} #{amount}"
146
+ end
147
+
148
+ def cardinality_qualifier
149
+ case count_expectation_type
150
+ when :<= then 'at most'
151
+ when nil, :>= then 'at least'
152
+ when :== then 'exactly'
153
+ when :<=> then 'between'
100
154
  end
155
+ end
101
156
 
102
- "a plan with resource changes:\n#{resource_change_lines}"
157
+ def cardinality_amount(count)
158
+ case count
159
+ when Range then "#{count.first} and #{count.last}"
160
+ when nil, 1 then 'one'
161
+ when 2 then 'two'
162
+ when 3 then 'three'
163
+ else count.to_s
164
+ end
103
165
  end
104
166
 
105
167
  def definition_lines
168
+ indent = ' '
106
169
  definition
107
- .collect { |k, v| " #{k}: #{v}" }
170
+ .collect { |k, v| "#{indent}#{k} = #{v.inspect}" }
108
171
  .join("\n")
109
172
  end
110
173
 
111
- def resource_change_lines
112
- plan.resource_changes
113
- .collect do |rc|
114
- address = rc.address
115
- actions = rc.change.actions.join(', ')
116
- " - #{address} (#{actions})"
174
+ def expected_attribute_lines
175
+ indent = ' '
176
+ attribute_fragments = attributes.collect do |a|
177
+ "#{indent}#{render(a[:path])} = #{a[:value].inspect}"
178
+ end
179
+ attribute_fragments.join("\n")
180
+ end
181
+
182
+ # rubocop:disable Metrics/MethodLength
183
+ def relevant_resource_change_lines
184
+ relevant_lines = definition_matches(plan).collect do |rc|
185
+ address = rc.address
186
+ actions = rc.change.actions.join(', ')
187
+ attributes = rc.change.after_object
188
+ attribute_lines = attributes.collect do |key, value|
189
+ " #{key} = #{value.inspect}"
117
190
  end
118
- .join("\n")
191
+ attribute_lines = attribute_lines.join("\n")
192
+ " - #{address} (#{actions})\n#{attribute_lines}"
193
+ end
194
+ relevant_lines.join("\n")
195
+ end
196
+ # rubocop:enable Metrics/MethodLength
197
+
198
+ def available_resource_change_lines
199
+ available_lines = plan.resource_changes.collect do |rc|
200
+ address = rc.address
201
+ actions = rc.change.actions.join(', ')
202
+ " - #{address} (#{actions})"
203
+ end
204
+ available_lines.join("\n")
205
+ end
206
+
207
+ def render(path)
208
+ path.collect { |elem| elem.to_s }.join(',')
119
209
  end
120
210
  end
211
+
212
+ # rubocop:enable Metrics/ClassLength
121
213
  end
122
214
  end
123
215
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.8'
5
+ VERSION = '0.1.0.pre.11'
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.5'
41
+ spec.add_dependency 'ruby-terraform', '1.7.0.pre.6'
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.8
4
+ version: 0.1.0.pre.11
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-18 00:00:00.000000000 Z
11
+ date: 2022-07-20 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.5
33
+ version: 1.7.0.pre.6
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.5
40
+ version: 1.7.0.pre.6
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement