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

Sign up to get free protection for your applications and to get access to all the features.
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