rspec-terraform 0.1.0.pre.3 → 0.1.0.pre.6

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: 0d1ae3bbe696449adf08d4e720aa1489623646ad6967e7db9c7ba3d8a16d5966
4
- data.tar.gz: 79911852a97c2e56f9333db51cb9ecb018ed8279a44e5e0b15719c970da77e66
3
+ metadata.gz: 2cbb4df56947d1db97fd3a8dc56702f1a54549775d48a01c24aa2ca6d3466b44
4
+ data.tar.gz: 9aae54a4a4e1f9d0586a3da995b1cd522bd1b49fdbd6ace31be7c3e145eba567
5
5
  SHA512:
6
- metadata.gz: 3a5e269614e7e46c619537d1caf3a11d27d41abf82f39ad7263c40753e0ba0f2482ccccb3ea87e08b5d4812c4305ea3fed9fb9509864c7554f2ac195ae882ff2
7
- data.tar.gz: 1be570f2eab2149b815e747e9174d6dd86e4e73c37e1578d0364f6a34a3d78dbd125031d3ca466191234ba9cee401947213f7ef4923a7b7ad84fe44fd5f6f0e2
6
+ metadata.gz: 1a383a45a80f7058b11c565e91bc783337d2b6f6a2e1d741492d9c159676f039a3e42cd25cb229939b93a82d174132da05810caa7be8310b2418675c79a0d445
7
+ data.tar.gz: a30d834d32b46b724e4222dbb657a9151378ad775b6089cd40422d8844c328aad0c591078327ff8d5aef0c333988663bf2ec9e4b22e2e03773ab2bb850d70bb9
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.3)
4
+ rspec-terraform (0.1.0.pre.6)
5
5
  rspec (>= 3.0)
6
- ruby-terraform (= 1.7.0.pre.1)
6
+ ruby-terraform (= 1.7.0.pre.3)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -37,7 +37,7 @@ GEM
37
37
  lino (3.0.0)
38
38
  hamster (~> 3.0)
39
39
  open4 (~> 1.3)
40
- minitest (5.16.1)
40
+ minitest (5.16.2)
41
41
  octokit (4.25.1)
42
42
  faraday (>= 1, < 3)
43
43
  sawyer (~> 0.9)
@@ -83,7 +83,7 @@ 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.31.1)
86
+ rubocop (1.31.2)
87
87
  json (~> 2.3)
88
88
  parallel (~> 1.10)
89
89
  parser (>= 3.1.0.0)
@@ -97,10 +97,10 @@ GEM
97
97
  parser (>= 3.1.1.0)
98
98
  rubocop-rake (0.6.0)
99
99
  rubocop (~> 1.0)
100
- rubocop-rspec (2.12.0)
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.1)
103
+ ruby-terraform (1.7.0.pre.3)
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.17
145
+ 2.3.18
data/Rakefile CHANGED
@@ -84,7 +84,7 @@ RakeCircleCI.define_project_tasks(
84
84
  t.environment_variables = {
85
85
  ENCRYPTION_PASSPHRASE:
86
86
  File.read('config/secrets/ci/encryption.passphrase')
87
- .chomp
87
+ .chomp
88
88
  }
89
89
  t.checkout_keys = []
90
90
  t.ssh_keys = [
@@ -1,17 +1,74 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rspec/core'
4
+ require 'rspec/matchers'
5
+ require 'rspec/matchers/built_in/eq'
6
+ require 'rspec/matchers/built_in/count_expectation'
7
+
3
8
  module RSpec
4
9
  module Terraform
5
10
  module Matchers
6
11
  class IncludeResourceChange
12
+ include RSpec::Matchers::BuiltIn::CountExpectation
13
+
7
14
  attr_reader :definition
8
15
 
9
16
  def initialize(definition = {})
10
17
  @definition = definition
18
+ @attributes = []
11
19
  end
12
20
 
13
21
  def matches?(plan)
14
- !plan.resource_changes_matching(definition).empty?
22
+ matches = attribute_matches(plan)
23
+
24
+ match_count = matches.count
25
+ if has_expected_count?
26
+ expected_count_matches?(match_count)
27
+ else
28
+ match_count.positive?
29
+ end
30
+ end
31
+
32
+ def with_attribute_value(*args)
33
+ stage, path, value = args.count == 3 ? args : [:after, *args]
34
+ path = [path] if path.is_a?(Symbol)
35
+ @attributes << { stage: stage, path: path, value: value }
36
+ self
37
+ end
38
+
39
+ private
40
+
41
+ def definition_matches(plan)
42
+ plan.resource_changes_matching(definition)
43
+ end
44
+
45
+ def attribute_matches(plan)
46
+ definition_matches(plan).filter do |resource_change|
47
+ change = resource_change.change
48
+ after = change.after_object
49
+ @attributes.all? do |attribute|
50
+ matcher = attribute_matcher(attribute)
51
+ value = attribute_value(after, attribute)
52
+ matcher.matches?(value)
53
+ end
54
+ end
55
+ end
56
+
57
+ def attribute_matcher(attribute)
58
+ expected = attribute[:value]
59
+ return expected if expected.respond_to?(:matches?)
60
+
61
+ RSpec::Matchers::BuiltIn::Eq.new(
62
+ RubyTerraform::Models::Objects.box(expected)
63
+ )
64
+ end
65
+
66
+ def attribute_value(object, attribute)
67
+ expected = attribute[:value]
68
+ actual = object.dig(*attribute[:path])
69
+ return actual&.value if expected.respond_to?(:matches?)
70
+
71
+ actual
15
72
  end
16
73
  end
17
74
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.3'
5
+ VERSION = '0.1.0.pre.6'
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.1'
41
+ spec.add_dependency 'ruby-terraform', '1.7.0.pre.3'
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.3
4
+ version: 0.1.0.pre.6
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-03 00:00:00.000000000 Z
11
+ date: 2022-07-17 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.1
33
+ version: 1.7.0.pre.3
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.1
40
+ version: 1.7.0.pre.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement