rspec-terraform 0.1.0.pre.17 → 0.1.0.pre.20

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: 1a78765d5eecf1940eb733e53740d9835587ee3f19647222b2b7e3e594b72a23
4
- data.tar.gz: 328c9a749a876711521c9581f0d75a2d9c9ede2821ddbb6012c0acb79869c852
3
+ metadata.gz: c33bac6bc11ec62bb0dd06035958076661a9ba193446ddad9c9299c7fc7c1c87
4
+ data.tar.gz: f03c579d40424f7b3eeb1d11b2f354e5709148ab71b491702e0c5dd5277893fb
5
5
  SHA512:
6
- metadata.gz: 61f34656cba5a4fe108338284345256cc9c91cc2939d9a4451ef8a30c08ca978e1ff0a087d2f1b238f88bed7b3a80ef31fa41fc1e610219ec962b65d6fbb1519
7
- data.tar.gz: 1ae1c88f42592e288f7a4e78681479582b1e42baefd25cdb2bbc25d24e5fb586b0a1186ff418628982bc70bf21cd34e6f48d1f6c18f4d76c38a02d1328fe7ab9
6
+ metadata.gz: f75e6299fa46e44d2ff7c525529495e492346d88c8ae0a9634395d4a623871496487b517710177151e9ae871843506d41be8b57581e67785bdaf9f0efe11cf32
7
+ data.tar.gz: 9f44c320439d80991c33e86f075fa4012e88c31cec8c66caaeba2486cf03785a272363e7141ab5a1949ee26837bb41e97db1a93e914e99335399879e20344d85
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.17)
4
+ rspec-terraform (0.1.0.pre.20)
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,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,33 @@
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 InMemory
10
+ attr_reader(:configuration)
11
+
12
+ def initialize(configuration = {})
13
+ @configuration = configuration
14
+ end
15
+
16
+ def resolve(overrides = {})
17
+ left_vars = configuration[:vars] || {}
18
+ right_vars = overrides[:vars] || {}
19
+ vars = left_vars.merge(right_vars)
20
+
21
+ top_level_merge = configuration.merge(overrides)
22
+
23
+ if left_vars == {} && right_vars == {}
24
+ top_level_merge
25
+ else
26
+ top_level_merge.merge(vars: vars)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ 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,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'configuration/providers'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Configuration
8
+ class << self
9
+ def identity_provider
10
+ Providers::Identity.new
11
+ end
12
+
13
+ def in_memory_provider(overrides)
14
+ Providers::InMemory.new(overrides)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ 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,15 +3,18 @@
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, :value
8
+ attr_reader :definition, :value, :plan
8
9
 
9
- def initialize(definition)
10
+ def initialize(definition = {})
10
11
  @definition = definition
11
12
  @value = nil
12
13
  end
13
14
 
14
15
  def matches?(plan)
16
+ @plan = plan
17
+
15
18
  !value_matches(plan).empty?
16
19
  end
17
20
 
@@ -20,6 +23,11 @@ module RSpec
20
23
  self
21
24
  end
22
25
 
26
+ def failure_message
27
+ "\nexpected: #{positive_expected_line}" \
28
+ "\n got: #{positive_got_line}"
29
+ end
30
+
23
31
  private
24
32
 
25
33
  def definition_matches(plan)
@@ -60,7 +68,110 @@ module RSpec
60
68
 
61
69
  actual
62
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
63
173
  end
174
+ # rubocop:enable Metrics/ClassLength
64
175
  end
65
176
  end
66
177
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.17'
5
+ VERSION = '0.1.0.pre.20'
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.17
4
+ version: 0.1.0.pre.20
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,12 @@ 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/providers.rb
284
+ - lib/rspec/terraform/configuration/providers/identity.rb
285
+ - lib/rspec/terraform/configuration/providers/in_memory.rb
286
+ - lib/rspec/terraform/helpers.rb
287
+ - lib/rspec/terraform/helpers/apply.rb
226
288
  - lib/rspec/terraform/matchers.rb
227
289
  - lib/rspec/terraform/matchers/include_output_change.rb
228
290
  - lib/rspec/terraform/matchers/include_resource_change.rb