rspec-puppet-utils 2.0.6 → 2.1.0

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
- SHA512:
3
- metadata.gz: 106fa2607e4f29ce28dee277ad33e57af9172a0950ff6d7e1603aced6853511a71dc826e56e9224865d8671437a1e531b6d64fc89f5551b5e7224a062988d88c
4
- data.tar.gz: faa7027e9499454bf5ae605921f64356485385025b5da3b290bf2bb37cd48435237d42cbf8d185f99d56d5a17e2c9ad6d754c7e242b829e31dc52a2b9e9a9b61
5
2
  SHA1:
6
- metadata.gz: f268650abcc12899be821391c1c8442983cbecb8
7
- data.tar.gz: 962eb0d4da79073e942b5e8000a34abf2b5eb491
3
+ metadata.gz: e9e1b2ce2d09e5a50fff68ae9cc3f1e7e639ec18
4
+ data.tar.gz: c8184a93084596ce109c344c438107a4914f4cfc
5
+ SHA512:
6
+ metadata.gz: e51385d1bdf52f5ade7292fc13cf3b58f27008db4db08ff9c4fb056af3d091042054b3b75737530f26bfbe7ed27d3c98149fa84137823ddb9635ae0ad01c4a77
7
+ data.tar.gz: 7aa2fe95f16d78ea0382451c6b9de02c3fb2286193f445d74a4c7df308da7d0d7bca6dfd935d334ecadbd8a2448202a0ad024dc9b80974aa3a82bfcf4250b712
data/README.md CHANGED
@@ -8,6 +8,14 @@ See [release notes](../../wiki/Release-Notes) about latest version
8
8
 
9
9
  ### MockFunction
10
10
 
11
+ #####Update:
12
+
13
+ As of version 2.1.0 the `#stub` and `#expect` methods have been superseded by `#stubbed` and `#expected` so that you can use parameter matchers. The only difference in usage from previous versions is that the methods take a set of parameters rather than a single array (e.g. `f.expected.with(1, 2, 3)` instead of `f.expect.with([1, 2, 3])`)
14
+
15
+ The change is backwards compatible so `#stub` and `#expect` are still available and function as before
16
+
17
+ #####Usage:
18
+
11
19
  The basic usage is to create your mock function with `MockFunction.new` and then use `mocha` to stub any particular calls that you need
12
20
 
13
21
  ```ruby
@@ -16,14 +24,13 @@ require 'spec_helper'
16
24
  describe 'foo::bar' do
17
25
 
18
26
  let!(:add_stuff) { MockFunction.new('add_stuff') { |f|
19
- f.stub.with([1, 2]).returns(3)
27
+ f.stubbed.with(1, 2).returns(3)
20
28
  }
21
29
  }
22
30
 
23
31
  it 'should do something with add_stuff' do
24
32
  # Specific stub for this test
25
- add_stuff.stub.with([]).returns(nil)
26
- ...
33
+ add_stuff.stubbed.with(2, 3).returns(5)
27
34
  ...
28
35
  end
29
36
  end
@@ -37,8 +44,8 @@ MockFunction.new('func', {:type => :statement})
37
44
  You can mock Hiera:
38
45
  ```ruby
39
46
  MockFunction.new('hiera') { |f|
40
- f.stub.with(['non-ex']).raises(Puppet::ParseError.new('Key not found'))
41
- f.stub.with(['db-password']).returns('password1')
47
+ f.stubbed.with('non-ex').raises(Puppet::ParseError.new('Key not found'))
48
+ f.stubbed.with('db-password').returns('password1')
42
49
  }
43
50
  ```
44
51
  You handle when the functions are created yourself, e.g. you can assign it to a local variable `func = MockFunction...` create it in a before block `before(:each) do MockFunction... end` or use let `let!(:func) { MockFunction... }`
@@ -48,15 +55,15 @@ If you use let, **use `let!()` and not `let()`**, this is because lets are lazy-
48
55
  Also if you use `let` when mocking hiera, **you can't use `:hiera` as the name due to conflicts** so you have to do something like `let!(:mock_hiera) { MockFunction.new('hiera') }`
49
56
 
50
57
  #####Mocha stubs and expects:
51
- `f.stub` and `f.expect` are helper methods for `f.stubs(:call)` and `f.expects(:call)`
58
+ `f.stubbed` and `f.expected` are helper methods for `f.stubs(:execute)` and `f.expects(:execute)`
52
59
 
53
- Internally `#expect` will clear the rspec-puppet catalog cache. This is because rspec-puppet will only re-compile the catalog for a test if `:title`, `:params`, or `:facts` are changed. This means that if you setup an expectaion in a test, it might not be satisfied because the catalog was already compiled for a previous test, and so the functions weren't called!
60
+ Internally `#expected` will clear the rspec-puppet catalog cache. This is because rspec-puppet will only re-compile the catalog for a test if `:title`, `:params`, or `:facts` are changed. This means that if you setup an expectaion in a test, it might not be satisfied because the catalog was already compiled for a previous test, and so the functions weren't called!
54
61
 
55
- Clearing the cache ensures tests aren't coupled and order dependent. The downside is that the catalog isn't cached and has to be re-compiled which slows down your tests. If you're concerned about performance and you are explicitly changing `:title`, `:params`, or `:facts` for a test, you can keep the cache intact with `f.expect(:keep_cache)`
62
+ Clearing the cache ensures tests aren't coupled and order dependent. The downside is that the catalog isn't cached and has to be re-compiled which slows down your tests. If you're concerned about performance and you are explicitly changing `:title`, `:params`, or `:facts` for a test, you can keep the cache intact with `f.expected(:keep_cache)`
56
63
 
57
64
  #####Notes:
58
- - You always stub the `call` method as that gets called internally
59
- - The `call` method takes an array of arguments
65
+ - You always stub the `execute` method as that gets called internally
66
+ - The `execute` method takes a set of arguments instead of an array of arguments
60
67
 
61
68
  ### TemplateHarness
62
69
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- RSpec::Core::RakeTask.new(:rspec)
4
+ RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :build => :rspec
6
+ task :build => :spec
@@ -16,22 +16,33 @@ module RSpecPuppetUtils
16
16
  def initialize(name, options = {})
17
17
  parse_options! options
18
18
  this = self
19
- Puppet::Parser::Functions.newfunction(name.to_sym, options) { |args| this.call args}
19
+ Puppet::Parser::Functions.newfunction(name.to_sym, options) { |args| this.call args }
20
20
  yield self if block_given?
21
+ end
21
22
 
22
- if options[:type] == :statement
23
- # call is called on statement function incase expects(:call) is needed
24
- # The method is defined incase expects(:call) isn't used
25
- def this.call args
26
- args
27
- end
28
- end
23
+ def call(args)
24
+ execute *args
25
+ end
26
+
27
+ def execute(*args)
28
+ args
29
+ end
30
+
31
+ def stubbed
32
+ self.stubs(:execute)
33
+ end
34
+
35
+ def expected(*args)
36
+ RSpec::Puppet::Support.clear_cache unless args.include? :keep_cache
37
+ self.expects(:execute)
29
38
  end
30
39
 
40
+ # Use stubbed instead, see readme
31
41
  def stub
32
42
  self.stubs(:call)
33
43
  end
34
44
 
45
+ # Use expected instead, see readme
35
46
  def expect(*args)
36
47
  RSpec::Puppet::Support.clear_cache unless args.include? :keep_cache
37
48
  self.expects(:call)
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |gem|
3
3
  gem.name = 'rspec-puppet-utils'
4
- gem.version = '2.0.6'
4
+ gem.version = '2.1.0'
5
5
  gem.description = 'Helper classes for mock/stub functions, templates and hierdata'
6
6
  gem.summary = ''
7
7
  gem.author = 'Tom Poulton'
@@ -14,39 +14,39 @@ describe MockFunction do
14
14
  func_name = 'my_func'
15
15
  func_sym = func_name.to_sym
16
16
 
17
- it 'should add new function to puppet' do
17
+ it 'adds new function to puppet' do
18
18
  name = 'mock_func'
19
19
  func = MockFunction.new name
20
20
  expect(Puppet::Parser::Functions.function(name.to_sym)).to eq "function_#{name}"
21
21
  end
22
22
 
23
- it 'should default to :rvalue type' do
23
+ it 'defaults to :rvalue type' do
24
24
  func = MockFunction.new func_name
25
25
  expect(Puppet::Parser::Functions.rvalue?(func_sym)).to eq true
26
26
  end
27
27
 
28
- it 'should default to :rvalue type if missing from options' do
28
+ it 'defaults to :rvalue type if missing from options' do
29
29
  func = MockFunction.new func_name, {}
30
30
  expect(Puppet::Parser::Functions.rvalue?(func_sym)).to eq true
31
31
  end
32
32
 
33
- it 'should allow type to be set' do
33
+ it 'allows type to be set' do
34
34
  func = MockFunction.new func_name, {:type => :statement}
35
35
  expect(Puppet::Parser::Functions.rvalue?(func_sym)).to eq false
36
36
  end
37
37
 
38
- it 'should only allow :rvalue or :statement for type' do
38
+ it 'only allows :rvalue or :statement for type' do
39
39
  expect {
40
40
  MockFunction.new func_name, {:type => :error}
41
41
  }.to raise_error ArgumentError, 'Type should be :rvalue or :statement, not error'
42
42
  end
43
43
 
44
- it 'should allow arity to be set' do
44
+ it 'allows arity to be set' do
45
45
  func = MockFunction.new func_name, {:arity => 3}
46
46
  expect(Puppet::Parser::Functions.arity(func_sym)).to eq 3
47
47
  end
48
48
 
49
- it 'should only allow arity to be an integer' do
49
+ it 'only allows arity to be an integer' do
50
50
  expect {
51
51
  MockFunction.new func_name, {:arity => 'oops'}
52
52
  }.to raise_error ArgumentError, 'arity should be an integer'
@@ -58,33 +58,80 @@ describe MockFunction do
58
58
 
59
59
  let(:func) { MockFunction.new('func') }
60
60
 
61
- it 'should not be defined by default' do
62
- expect(func.respond_to?(:call)).to eq false
63
- end
64
-
65
- it 'should be stubable' do
61
+ it 'is stubable' do
66
62
  func.stubs(:call)
67
63
  expect(func.respond_to?(:call)).to eq true
68
64
  end
69
65
 
70
- it 'should be called by puppet function' do
66
+ it 'is called by puppet function' do
71
67
  func.stubs(:call).returns('penguin')
72
68
  result = scope.function_func []
73
69
  expect(result).to eq 'penguin'
74
70
  end
75
71
 
76
- it 'should be passed puppet function args' do
72
+ it 'is passed puppet function args' do
77
73
  func.expects(:call).with([1, 2, 3]).once
78
74
  scope.function_func [1, 2, 3]
79
75
  end
80
76
 
77
+ it 'passes function args to execute method' do
78
+ func.expects(:execute).with(1, 2, 3)
79
+ func.call [1, 2, 3]
80
+ end
81
+
82
+ end
83
+
84
+ describe '#stubbed' do
85
+
86
+ let(:func) { MockFunction.new('func') }
87
+
88
+ it 'stubs #execute' do
89
+ expectation = func.stubbed
90
+ expect(expectation).to be_a Mocha::Expectation
91
+ expect(expectation.matches_method? :execute).to eq true
92
+ end
93
+
94
+ end
95
+
96
+ describe '#expected' do
97
+
98
+ let(:func) { MockFunction.new('func') }
99
+
100
+ it 'registers expect on #execute' do
101
+ expectation = func.expected
102
+ expect(expectation).to be_a Mocha::Expectation
103
+ expect(expectation.matches_method? :execute).to eq true
104
+ func.execute # satisfy the expect we just created on #execute!
105
+ end
106
+
107
+ it 'clears rspec puppet cache' do
108
+ RSpec::Puppet::Support.expects(:clear_cache).once
109
+ func.expected
110
+ func.execute # satisfy the expect we just created on #execute!
111
+ end
112
+
113
+ it 'works with parameter matchers' do
114
+ func.expected.with(regexp_matches(/thing/), anything)
115
+ scope.function_func ['something', 1234]
116
+ end
117
+
118
+ context 'when :keep_cache is set' do
119
+
120
+ it 'does not clear rspec puppet cache' do
121
+ RSpec::Puppet::Support.expects(:clear_cache).never
122
+ func.expected(:keep_cache)
123
+ func.execute # satisfy the expect we just created on #execute!
124
+ end
125
+
126
+ end
127
+
81
128
  end
82
129
 
83
130
  describe '#stub' do
84
131
 
85
132
  let(:func) { MockFunction.new('func') }
86
133
 
87
- it 'should stub #call' do
134
+ it 'stubs #call' do
88
135
  expectation = func.stub
89
136
  expect(expectation).to be_a Mocha::Expectation
90
137
  expect(expectation.matches_method? :call).to eq true
@@ -96,14 +143,14 @@ describe MockFunction do
96
143
 
97
144
  let(:func) { MockFunction.new('func') }
98
145
 
99
- it 'should register expect on #call' do
146
+ it 'registers expect on #call' do
100
147
  expectation = func.expect
101
148
  expect(expectation).to be_a Mocha::Expectation
102
149
  expect(expectation.matches_method? :call).to eq true
103
150
  func.call [nil] # satisfy the expect we just created on #call!
104
151
  end
105
152
 
106
- it 'should clear rspec puppet cache' do
153
+ it 'clears rspec puppet cache' do
107
154
  RSpec::Puppet::Support.expects(:clear_cache).once
108
155
  func.expect
109
156
  func.call [nil] # satisfy the expect we just created on #call!
@@ -111,7 +158,7 @@ describe MockFunction do
111
158
 
112
159
  context 'when :keep_cache is set' do
113
160
 
114
- it 'should not clear rspec puppet cache' do
161
+ it 'does not clear rspec puppet cache' do
115
162
  RSpec::Puppet::Support.expects(:clear_cache).never
116
163
  func.expect(:keep_cache)
117
164
  func.call [nil] # satisfy the expect we just created on #call!
@@ -125,13 +172,13 @@ describe MockFunction do
125
172
 
126
173
  let!(:statement) { MockFunction.new 'statement', {:type => :statement} }
127
174
 
128
- it 'should not raise error' do
175
+ it 'does not raise error' do
129
176
  expect {
130
177
  scope.function_statement []
131
178
  }.to_not raise_error
132
179
  end
133
180
 
134
- it 'should respond to #call' do
181
+ it 'responds to #call' do
135
182
  expect(statement.respond_to? :call).to eq true
136
183
  end
137
184
 
@@ -139,13 +186,13 @@ describe MockFunction do
139
186
 
140
187
  context 'when :type => :rvalue' do
141
188
 
142
- it 'should allow setup stubs' do
189
+ it 'allows setup stubs' do
143
190
  func = MockFunction.new('func') { |f| f.stubs(:call).returns('badger') }
144
191
  result = func.call
145
192
  expect(result).to eq 'badger'
146
193
  end
147
194
 
148
- it 'should return values defined by a "let"' do
195
+ it 'returns values defined by a "let"' do
149
196
  result = []
150
197
  expect {
151
198
  func = MockFunction.new('func') { |f| f.stubs(:call).returns(values_from_let) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-puppet-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Poulton
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2015-01-16 00:00:00 Z
12
+ date: 2015-07-28 00:00:00 Z
13
13
  dependencies: []
14
14
 
15
15
  description: Helper classes for mock/stub functions, templates and hierdata