rspec-terraform 0.1.0.pre.18 → 0.1.0.pre.21

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: 6bea553c61f70c6bd7bf4bdedca8b618a00539e8bfb1de8234e9771c8462c1ca
4
- data.tar.gz: e3ef056ecdf300bb9c9ce9656090a4ac93703d5346ba36e0f2c3f43885f927da
3
+ metadata.gz: d3a1d7d419c7e13ea95d8cf7b04ffe5183aa1cfce3d48e3027609b061416e640
4
+ data.tar.gz: 1f33098b03b9cba5294b2894f691d55d26f666185d1d6e9a748345a0fc383080
5
5
  SHA512:
6
- metadata.gz: d68c9235ad0a528f15f1e0801681210561cecf4070b69276fe2a28436e28b3f5748728220382b3e87950a1959a46ce912be09d6b300f94732bf50ebe3a78cfc9
7
- data.tar.gz: 61b756e071fba7355d294552d042b0d855ac1ca18021f1b06c594b3b3e2fad05d5d53668580880911db3e6c103d5b46579f1a8e28f6d2fc54c08a46014772696
6
+ metadata.gz: f3dedee60ba29285bc292f263791cd117cff0adff0b092042f6774d321a9eba268431d601ce2cf7d39688c50777c342cde6ab4b20f6ac5603ad7eb3bbe665afa
7
+ data.tar.gz: 52fe2ac848e6e1d0d5e4677731dcd51db1483d2119966157d7d854ab73f1d2acd676f5412c4bb051ab740d77e9927c3d3e5bbf14bd756dc331853e1a93b13e09
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.18)
4
+ rspec-terraform (0.1.0.pre.21)
5
5
  rspec (>= 3.0)
6
6
  ruby-terraform (= 1.7.0.pre.13)
7
7
 
@@ -16,6 +16,7 @@ GEM
16
16
  addressable (2.8.0)
17
17
  public_suffix (>= 2.0.2, < 5.0)
18
18
  ast (2.4.2)
19
+ coderay (1.1.3)
19
20
  colored2 (3.1.2)
20
21
  concurrent-ruby (1.1.10)
21
22
  diff-lcs (1.5.0)
@@ -27,7 +28,26 @@ GEM
27
28
  faraday-net_http (~> 2.0)
28
29
  ruby2_keywords (>= 0.0.4)
29
30
  faraday-net_http (2.0.3)
31
+ ffi (1.15.5)
32
+ formatador (1.1.0)
30
33
  gem-release (2.2.2)
34
+ guard (2.18.0)
35
+ formatador (>= 0.2.4)
36
+ listen (>= 2.7, < 4.0)
37
+ lumberjack (>= 1.0.12, < 2.0)
38
+ nenv (~> 0.1)
39
+ notiffany (~> 0.0)
40
+ pry (>= 0.13.0)
41
+ shellany (~> 0.0)
42
+ thor (>= 0.18.1)
43
+ guard-compat (1.2.1)
44
+ guard-rspec (4.7.3)
45
+ guard (~> 2.1)
46
+ guard-compat (~> 1.1)
47
+ rspec (>= 2.99.0, < 4.0)
48
+ guard-rubocop (1.5.0)
49
+ guard (~> 2.0)
50
+ rubocop (< 2.0)
31
51
  hamster (3.0.0)
32
52
  concurrent-ruby (~> 1.0)
33
53
  i18n (1.12.0)
@@ -37,7 +57,16 @@ GEM
37
57
  lino (3.0.0)
38
58
  hamster (~> 3.0)
39
59
  open4 (~> 1.3)
60
+ listen (3.7.1)
61
+ rb-fsevent (~> 0.10, >= 0.10.3)
62
+ rb-inotify (~> 0.9, >= 0.9.10)
63
+ lumberjack (1.2.8)
64
+ method_source (1.0.0)
40
65
  minitest (5.16.2)
66
+ nenv (0.3.0)
67
+ notiffany (0.1.3)
68
+ nenv (~> 0.1)
69
+ shellany (~> 0.0)
41
70
  octokit (4.25.1)
42
71
  faraday (>= 1, < 3)
43
72
  sawyer (~> 0.9)
@@ -45,6 +74,9 @@ GEM
45
74
  parallel (1.22.1)
46
75
  parser (3.1.2.1)
47
76
  ast (~> 2.4.1)
77
+ pry (0.14.1)
78
+ coderay (~> 1.1)
79
+ method_source (~> 1.0)
48
80
  public_suffix (4.0.7)
49
81
  rainbow (3.1.1)
50
82
  rake (13.0.6)
@@ -68,6 +100,9 @@ GEM
68
100
  colored2 (~> 3.1)
69
101
  rake_factory (~> 0.23)
70
102
  sshkey (~> 2.0)
103
+ rb-fsevent (0.11.1)
104
+ rb-inotify (0.10.1)
105
+ ffi (~> 1.0)
71
106
  regexp_parser (2.5.0)
72
107
  rexml (3.2.5)
73
108
  rspec (3.11.0)
@@ -109,6 +144,7 @@ GEM
109
144
  sawyer (0.9.2)
110
145
  addressable (>= 2.3.5)
111
146
  faraday (>= 0.17.3, < 3)
147
+ shellany (0.0.1)
112
148
  simplecov (0.21.2)
113
149
  docile (~> 1.1)
114
150
  simplecov-html (~> 0.11)
@@ -116,13 +152,14 @@ GEM
116
152
  simplecov-html (0.12.3)
117
153
  simplecov_json_formatter (0.1.4)
118
154
  sshkey (2.0.0)
155
+ terminal-notifier-guard (1.7.0)
156
+ thor (1.2.1)
119
157
  tzinfo (2.0.5)
120
158
  concurrent-ruby (~> 1.0)
121
159
  unicode-display_width (2.2.0)
122
160
 
123
161
  PLATFORMS
124
162
  arm64-darwin-21
125
- ruby
126
163
  x86_64-darwin-19
127
164
  x86_64-linux
128
165
 
@@ -130,6 +167,9 @@ DEPENDENCIES
130
167
  bundler
131
168
  faker
132
169
  gem-release
170
+ guard
171
+ guard-rspec
172
+ guard-rubocop
133
173
  rake
134
174
  rake_circle_ci
135
175
  rake_github
@@ -140,6 +180,7 @@ DEPENDENCIES
140
180
  rubocop-rake
141
181
  rubocop-rspec
142
182
  simplecov
183
+ terminal-notifier-guard
143
184
 
144
185
  BUNDLED WITH
145
186
  2.3.20
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Terraform
5
+ module Configuration
6
+ class Merger
7
+ def merge(left, right)
8
+ merge_top_level(left, right)
9
+ .merge(merge_accumulating_maps(left, right))
10
+ .merge(merge_accumulating_lists(left, right))
11
+ end
12
+
13
+ private
14
+
15
+ def merge_top_level(left, right)
16
+ left.merge(right)
17
+ end
18
+
19
+ def merge_accumulating_maps(left, right)
20
+ left_vars = left[:vars] || {}
21
+ right_vars = right[:vars] || {}
22
+ vars = left_vars.merge(right_vars)
23
+
24
+ merged = {}
25
+ unless left_vars == {} && right_vars == {}
26
+ merged = merged.merge(vars: vars)
27
+ end
28
+
29
+ merged
30
+ end
31
+
32
+ def merge_accumulating_lists(left, right)
33
+ left_var_files = left[:var_files] || []
34
+ right_var_files = right[:var_files] || []
35
+ var_files = left_var_files + right_var_files
36
+
37
+ merged = {}
38
+ unless left_var_files == [] && right_var_files == []
39
+ merged = merged.merge(var_files: var_files)
40
+ end
41
+
42
+ merged
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Configuration
8
+ module Providers
9
+ class Identity
10
+ def resolve(overrides = {})
11
+ overrides
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+ require_relative '../merger'
5
+
6
+ module RSpec
7
+ module Terraform
8
+ module Configuration
9
+ module Providers
10
+ class InMemory
11
+ attr_reader(:configuration)
12
+
13
+ def initialize(configuration = {})
14
+ @configuration = configuration
15
+ @merger = Merger.new
16
+ end
17
+
18
+ def resolve(overrides = {})
19
+ @merger.merge(configuration, overrides)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'providers/identity'
4
+ require_relative 'providers/in_memory'
5
+
6
+ module RSpec
7
+ module Terraform
8
+ module Configuration
9
+ module Providers
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'configuration/providers'
4
+ require_relative 'configuration/merger'
5
+
6
+ module RSpec
7
+ module Terraform
8
+ module Configuration
9
+ class << self
10
+ def identity_provider
11
+ Providers::Identity.new
12
+ end
13
+
14
+ def in_memory_provider(overrides)
15
+ Providers::InMemory.new(overrides)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Helpers
8
+ class Apply
9
+ attr_reader(:overrides, :configuration_provider)
10
+
11
+ def initialize(overrides = {}, configuration_provider = nil)
12
+ @overrides = overrides
13
+ @configuration_provider =
14
+ configuration_provider || Configuration.identity_provider
15
+ end
16
+
17
+ def execute
18
+ parameters = configuration_provider.resolve(overrides)
19
+ parameters = parameters.merge(
20
+ input: false,
21
+ auto_approve: true
22
+ )
23
+
24
+ do_apply(parameters)
25
+ end
26
+
27
+ private
28
+
29
+ def do_apply(parameters)
30
+ RubyTerraform.apply(
31
+ chdir: parameters[:configuration_directory],
32
+ state: parameters[:state_file],
33
+ vars: parameters[:vars],
34
+ input: parameters[:input],
35
+ auto_approve: parameters[:auto_approve]
36
+ )
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './helpers/apply'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Helpers
8
+ end
9
+ end
10
+ end
@@ -3,6 +3,7 @@
3
3
  module RSpec
4
4
  module Terraform
5
5
  module Matchers
6
+ # rubocop:disable Metrics/ClassLength
6
7
  class IncludeOutputChange
7
8
  attr_reader :definition, :value, :plan
8
9
 
@@ -69,8 +70,10 @@ module RSpec
69
70
  end
70
71
 
71
72
  def positive_expected_line
72
- maybe_with_definition(
73
- positive_plan_line
73
+ maybe_with_expected_value(
74
+ maybe_with_definition(
75
+ positive_plan_line
76
+ )
74
77
  )
75
78
  end
76
79
 
@@ -79,13 +82,22 @@ module RSpec
79
82
  end
80
83
 
81
84
  def maybe_with_definition(expected_line)
82
- unless @definition.empty?
85
+ unless definition.empty?
83
86
  expected_line =
84
87
  "#{expected_line} matching definition:\n#{definition_lines}"
85
88
  end
86
89
  expected_line
87
90
  end
88
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
+
89
101
  def definition_lines
90
102
  indent = ' '
91
103
  definition
@@ -93,12 +105,21 @@ module RSpec
93
105
  .join("\n")
94
106
  end
95
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
+
96
115
  def positive_got_line
97
116
  if plan.output_changes.empty?
98
117
  'a plan including no output changes.'
99
118
  else
100
119
  with_available_output_changes(
101
- 'a plan including no matching output changes.'
120
+ maybe_with_relevant_output_changes(
121
+ 'a plan including no matching output changes.'
122
+ )
102
123
  )
103
124
  end
104
125
  end
@@ -108,6 +129,15 @@ module RSpec
108
129
  "\n#{available_output_change_lines}"
109
130
  end
110
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
+
111
141
  def available_output_change_lines
112
142
  available_lines = plan.output_changes.collect do |oc|
113
143
  name = oc.name
@@ -116,7 +146,32 @@ module RSpec
116
146
  end
117
147
  available_lines.join("\n")
118
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
119
173
  end
174
+ # rubocop:enable Metrics/ClassLength
120
175
  end
121
176
  end
122
177
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.18'
5
+ VERSION = '0.1.0.pre.21'
6
6
  end
7
7
  end
@@ -4,7 +4,9 @@ require 'rspec/core'
4
4
  require 'ruby_terraform'
5
5
 
6
6
  require_relative 'terraform/version'
7
+ require_relative 'terraform/configuration'
7
8
  require_relative 'terraform/matchers'
9
+ require_relative 'terraform/helpers'
8
10
 
9
11
  RSpec.configure do |config|
10
12
  config.include(RSpec::Terraform::Matchers)
@@ -43,6 +43,9 @@ Gem::Specification.new do |spec|
43
43
  spec.add_development_dependency 'bundler'
44
44
  spec.add_development_dependency 'faker'
45
45
  spec.add_development_dependency 'gem-release'
46
+ spec.add_development_dependency 'guard'
47
+ spec.add_development_dependency 'guard-rspec'
48
+ spec.add_development_dependency 'guard-rubocop'
46
49
  spec.add_development_dependency 'rake'
47
50
  spec.add_development_dependency 'rake_circle_ci'
48
51
  spec.add_development_dependency 'rake_github'
@@ -52,6 +55,7 @@ Gem::Specification.new do |spec|
52
55
  spec.add_development_dependency 'rubocop-rake'
53
56
  spec.add_development_dependency 'rubocop-rspec'
54
57
  spec.add_development_dependency 'simplecov'
58
+ spec.add_development_dependency 'terminal-notifier-guard'
55
59
 
56
60
  spec.metadata['rubygems_mfa_required'] = 'false'
57
61
  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.18
4
+ version: 0.1.0.pre.21
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-16 00:00:00.000000000 Z
11
+ date: 2022-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -80,6 +80,48 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: rake
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +248,20 @@ dependencies:
206
248
  - - ">="
207
249
  - !ruby/object:Gem::Version
208
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: terminal-notifier-guard
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
209
265
  description: Helpers, contexts and matchers to support using RSpec to test Terraform
210
266
  configurations and modules.
211
267
  email:
@@ -223,6 +279,13 @@ files:
223
279
  - bin/console
224
280
  - bin/setup
225
281
  - lib/rspec/terraform.rb
282
+ - lib/rspec/terraform/configuration.rb
283
+ - lib/rspec/terraform/configuration/merger.rb
284
+ - lib/rspec/terraform/configuration/providers.rb
285
+ - lib/rspec/terraform/configuration/providers/identity.rb
286
+ - lib/rspec/terraform/configuration/providers/in_memory.rb
287
+ - lib/rspec/terraform/helpers.rb
288
+ - lib/rspec/terraform/helpers/apply.rb
226
289
  - lib/rspec/terraform/matchers.rb
227
290
  - lib/rspec/terraform/matchers/include_output_change.rb
228
291
  - lib/rspec/terraform/matchers/include_resource_change.rb