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

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: 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