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

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: 1319e9c27e12c7bfb075b5c1bd92c7539c8d3172d38008714f7cb26b35262d72
4
- data.tar.gz: 7b8e71762fb1a8d46dc995d95a04d83daff44af41965912a063ad367f200518b
3
+ metadata.gz: 6bea553c61f70c6bd7bf4bdedca8b618a00539e8bfb1de8234e9771c8462c1ca
4
+ data.tar.gz: e3ef056ecdf300bb9c9ce9656090a4ac93703d5346ba36e0f2c3f43885f927da
5
5
  SHA512:
6
- metadata.gz: 338d803e9bbf4852c4857688595f05bf8ffd31311ce0cab32739a3a95eefcabad078792a4082ac83db8a3b473cc8e723d99c68a934c8217fc08a27d348f9960b
7
- data.tar.gz: a9768e748a1c15de055c62d0e05238986e66335dda69448c080114c5bf0c8da03232cd43b7d8c7cad07fecfd1296561675608522bb327843e88ce522fe571ac3
6
+ metadata.gz: d68c9235ad0a528f15f1e0801681210561cecf4070b69276fe2a28436e28b3f5748728220382b3e87950a1959a46ce912be09d6b300f94732bf50ebe3a78cfc9
7
+ data.tar.gz: 61b756e071fba7355d294552d042b0d855ac1ca18021f1b06c594b3b3e2fad05d5d53668580880911db3e6c103d5b46579f1a8e28f6d2fc54c08a46014772696
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.15)
4
+ rspec-terraform (0.1.0.pre.18)
5
5
  rspec (>= 3.0)
6
- ruby-terraform (= 1.7.0.pre.9)
6
+ ruby-terraform (= 1.7.0.pre.13)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -43,7 +43,7 @@ GEM
43
43
  sawyer (~> 0.9)
44
44
  open4 (1.3.4)
45
45
  parallel (1.22.1)
46
- parser (3.1.2.0)
46
+ parser (3.1.2.1)
47
47
  ast (~> 2.4.1)
48
48
  public_suffix (4.0.7)
49
49
  rainbow (3.1.1)
@@ -83,24 +83,24 @@ 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.32.0)
86
+ rubocop (1.35.0)
87
87
  json (~> 2.3)
88
88
  parallel (~> 1.10)
89
- parser (>= 3.1.0.0)
89
+ parser (>= 3.1.2.1)
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.19.1, < 2.0)
93
+ rubocop-ast (>= 1.20.1, < 2.0)
94
94
  ruby-progressbar (~> 1.7)
95
95
  unicode-display_width (>= 1.4.0, < 3.0)
96
- rubocop-ast (1.19.1)
96
+ rubocop-ast (1.21.0)
97
97
  parser (>= 3.1.1.0)
98
98
  rubocop-rake (0.6.0)
99
99
  rubocop (~> 1.0)
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.9)
103
+ ruby-terraform (1.7.0.pre.13)
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.19
145
+ 2.3.20
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Terraform
5
+ module Matchers
6
+ class IncludeOutputChange
7
+ attr_reader :definition, :value, :plan
8
+
9
+ def initialize(definition = {})
10
+ @definition = definition
11
+ @value = nil
12
+ end
13
+
14
+ def matches?(plan)
15
+ @plan = plan
16
+
17
+ !value_matches(plan).empty?
18
+ end
19
+
20
+ def with_value(value)
21
+ @value = maybe_box_value(value)
22
+ self
23
+ end
24
+
25
+ def failure_message
26
+ "\nexpected: #{positive_expected_line}" \
27
+ "\n got: #{positive_got_line}"
28
+ end
29
+
30
+ private
31
+
32
+ def definition_matches(plan)
33
+ plan.output_changes_matching(definition)
34
+ end
35
+
36
+ def value_matches(plan)
37
+ matches = definition_matches(plan)
38
+ return matches unless value
39
+
40
+ expected = value_matcher(value)
41
+
42
+ matches.filter do |output_change|
43
+ change = output_change.change
44
+ after = change.after_object
45
+ actual = resolved_value(value, after)
46
+
47
+ expected&.matches?(actual)
48
+ end
49
+ end
50
+
51
+ def maybe_box_value(value)
52
+ if value.respond_to?(:matches?)
53
+ value
54
+ else
55
+ RubyTerraform::Models::Objects.box(value)
56
+ end
57
+ end
58
+
59
+ def value_matcher(expected)
60
+ return expected if expected.respond_to?(:matches?)
61
+
62
+ RSpec::Matchers::BuiltIn::Eq.new(expected)
63
+ end
64
+
65
+ def resolved_value(expected, actual)
66
+ return actual&.unbox if expected.respond_to?(:matches?)
67
+
68
+ actual
69
+ end
70
+
71
+ def positive_expected_line
72
+ maybe_with_definition(
73
+ positive_plan_line
74
+ )
75
+ end
76
+
77
+ def positive_plan_line
78
+ 'a plan including at least one output change'
79
+ end
80
+
81
+ def maybe_with_definition(expected_line)
82
+ unless @definition.empty?
83
+ expected_line =
84
+ "#{expected_line} matching definition:\n#{definition_lines}"
85
+ end
86
+ expected_line
87
+ end
88
+
89
+ def definition_lines
90
+ indent = ' '
91
+ definition
92
+ .collect { |k, v| "#{indent}#{k} = #{v.inspect}" }
93
+ .join("\n")
94
+ end
95
+
96
+ def positive_got_line
97
+ if plan.output_changes.empty?
98
+ 'a plan including no output changes.'
99
+ else
100
+ with_available_output_changes(
101
+ 'a plan including no matching output changes.'
102
+ )
103
+ end
104
+ end
105
+
106
+ def with_available_output_changes(got_line)
107
+ "#{got_line}\n available output changes are:" \
108
+ "\n#{available_output_change_lines}"
109
+ end
110
+
111
+ def available_output_change_lines
112
+ available_lines = plan.output_changes.collect do |oc|
113
+ name = oc.name
114
+ actions = oc.change.actions.join(', ')
115
+ " - #{name} (#{actions})"
116
+ end
117
+ available_lines.join("\n")
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './matchers/include_resource_change'
4
+ require_relative './matchers/include_output_change'
4
5
 
5
6
  module RSpec
6
7
  module Terraform
@@ -28,6 +29,30 @@ module RSpec
28
29
  def include_resource_deletion(definition = {})
29
30
  include_resource_change(definition.merge(delete?: true))
30
31
  end
32
+
33
+ def include_resource(definition = {})
34
+ include_resource_change(definition.merge(present_after?: true))
35
+ end
36
+
37
+ def include_output_change(definition = {})
38
+ IncludeOutputChange.new(definition)
39
+ end
40
+
41
+ def include_output_creation(definition = {})
42
+ include_output_change(definition.merge(create?: true))
43
+ end
44
+
45
+ def include_output_update(definition = {})
46
+ include_output_change(definition.merge(update?: true))
47
+ end
48
+
49
+ def include_output_deletion(definition = {})
50
+ include_output_change(definition.merge(delete?: true))
51
+ end
52
+
53
+ def include_output(definition = {})
54
+ include_output_change(definition.merge(present_after?: true))
55
+ end
31
56
  end
32
57
  end
33
58
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.15'
5
+ VERSION = '0.1.0.pre.18'
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.9'
41
+ spec.add_dependency 'ruby-terraform', '1.7.0.pre.13'
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.15
4
+ version: 0.1.0.pre.18
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-31 00:00:00.000000000 Z
11
+ date: 2022-08-16 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.9
33
+ version: 1.7.0.pre.13
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.9
40
+ version: 1.7.0.pre.13
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -224,6 +224,7 @@ files:
224
224
  - bin/setup
225
225
  - lib/rspec/terraform.rb
226
226
  - lib/rspec/terraform/matchers.rb
227
+ - lib/rspec/terraform/matchers/include_output_change.rb
227
228
  - lib/rspec/terraform/matchers/include_resource_change.rb
228
229
  - lib/rspec/terraform/version.rb
229
230
  - rspec-terraform.gemspec