test_kitchen_chef_minitest_matchers 1.0.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 +7 -0
- data/.gitignore +15 -0
- data/.rubocop.yml +44 -0
- data/.travis.yml +7 -0
- data/Gemfile +3 -0
- data/Guardfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +64 -0
- data/Rakefile +24 -0
- data/lib/test_kitchen_chef_minitest_matchers.rb +20 -0
- data/lib/test_kitchen_chef_minitest_matchers/chef_gem.rb +73 -0
- data/lib/test_kitchen_chef_minitest_matchers/version.rb +3 -0
- data/test/chef_gem_test.rb +154 -0
- data/test/test_helper.rb +39 -0
- data/test_kitchen_chef_minitest_matchers.gemspec +30 -0
- metadata +187 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ecf60211875aaed280b20e491d69819bccca0fd2
|
4
|
+
data.tar.gz: 8e0f10f65e29f7e65d6eb3190862a14e3041833d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 97477009863a8913362316ab2ff17691407529a61c25bc7460a2eba2a2fec86c28a6350b389d7373ad68093abb85f2bbc230f0c38ad0db70bab23796544578de
|
7
|
+
data.tar.gz: 8aa4f258e6d0d703c70a9dfb4a78858aaa379001a51b96a44daf4f67e9c64607bf2849c1c5142850cf5599ceacd671db3546fa4aa8a5748bc7f398ece4cfe07d
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- Guardfile
|
4
|
+
Exclude:
|
5
|
+
- tmp/**
|
6
|
+
|
7
|
+
AbcSize:
|
8
|
+
Max: 30
|
9
|
+
|
10
|
+
CollectionMethods:
|
11
|
+
PreferredMethods:
|
12
|
+
Enabled: false
|
13
|
+
#collect: 'collect'
|
14
|
+
#collect!: 'collect!'
|
15
|
+
#inject: 'inject'
|
16
|
+
#detect: 'detect'
|
17
|
+
#find_all: 'select'
|
18
|
+
|
19
|
+
CommentAnnotation:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Documentation:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Encoding:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
LineLength:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
MethodLength:
|
32
|
+
Max: 20
|
33
|
+
|
34
|
+
RedundantBegin:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
RegexpLiteral:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
StringLiterals:
|
41
|
+
EnforcedStyle: double_quotes
|
42
|
+
|
43
|
+
StringLiteralsInInterpolation:
|
44
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
guard :minitest do
|
2
|
+
watch(%r{^test/(.*)_test\.rb})
|
3
|
+
watch("lib/test_kitchen_chef_minitest_matchers.rb") { "test" }
|
4
|
+
watch(%r{^lib/test_kitchen_chef_minitest_matchers/(.*/)?([^/]+)\.rb}) { |m| "test/#{ m[1] }#{ m[2] }_test.rb" }
|
5
|
+
watch(%r{^test/test_helper\.rb}) { "test" }
|
6
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Nils Landt
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# TestKitchenChefMinitestMatchers
|
2
|
+
|
3
|
+
Minitest assertions / matchers for testing Chef in Test Kitchen.
|
4
|
+
|
5
|
+
# Platforms
|
6
|
+
|
7
|
+
Tested on Linux, should work on Windows, but is untested.
|
8
|
+
Chef-client needs to be installed to the default location for either platform.
|
9
|
+
|
10
|
+
# Installation
|
11
|
+
|
12
|
+
Add to your Gemfile under test/integration/<stuite>/minitest/Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem "test_kitchen_chef_minitest_matchers"
|
16
|
+
```
|
17
|
+
|
18
|
+
Then, in your tests, add:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
require "test_kitchen_chef_minitest_matchers"
|
22
|
+
```
|
23
|
+
|
24
|
+
# Chef gem installations
|
25
|
+
|
26
|
+
Check whether a gem was successfully installed for the embedded Chef Ruby, for example using the `chef_gem` resource.
|
27
|
+
|
28
|
+
Adds `assert_chef_gem_installed` and `refute_chef_gem_installed`.
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
# Let's check whether the PostgreSQL gem is installed
|
32
|
+
assert_chef_gem_installed "pg"
|
33
|
+
|
34
|
+
# We can check for a specific version
|
35
|
+
assert_chef_gem_installed "pg", "0.18.2"
|
36
|
+
|
37
|
+
# Or we can use the gem version constraints, including the pessimistic constraint
|
38
|
+
assert_chef_gem_installed "pg", "~> 0.18"
|
39
|
+
|
40
|
+
# The MySQL gem should not be installed
|
41
|
+
refute_chef_gem_installed "mysql2"
|
42
|
+
|
43
|
+
# While the PostgreSQL gem should be installed, no 0.17.x version should be installed
|
44
|
+
refute_chef_gem_installed "pg", "~> 0.17"
|
45
|
+
```
|
46
|
+
|
47
|
+
For fans of the spec syntax, `.must_be_installed_as_chef_gem` and `.must_not_be_installed_as_chef_gem` are added.
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
# Let's check whether the PostgreSQL gem is installed
|
51
|
+
"pg".must_be_installed_as_chef_gem
|
52
|
+
|
53
|
+
# We can check for a specific version
|
54
|
+
"pg".must_be_installed_as_chef_gem("0.18.2")
|
55
|
+
|
56
|
+
# Or we can use the gem version constraints, including the pessimistic constraint
|
57
|
+
"pg".must_be_installed_as_chef_gem("~> 0.18")
|
58
|
+
|
59
|
+
# The MySQL gem should not be installed
|
60
|
+
"mysql2".must_not_be_installed_as_chef_gem
|
61
|
+
|
62
|
+
# While the PostgreSQL gem should be installed, no 0.17.x version should be installed
|
63
|
+
"pg".must_not_be_installed_as_chef_gem("~> 0.17")
|
64
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rake/testtask"
|
3
|
+
require "rubocop/rake_task"
|
4
|
+
|
5
|
+
desc "Start guard for minitest"
|
6
|
+
task :guard do
|
7
|
+
sh "guard --no-interactions --notify false --clear"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Run rubocop linter"
|
11
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
12
|
+
task.formatters = %w(simple)
|
13
|
+
end
|
14
|
+
|
15
|
+
Rake::TestTask.new(:test) do |test|
|
16
|
+
test.libs << "lib" << "test"
|
17
|
+
test.pattern = "test/**/*_test.rb"
|
18
|
+
test.verbose = true
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "for travis-ci run"
|
22
|
+
task travis: :default
|
23
|
+
|
24
|
+
task default: [:test, :rubocop]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Specified in Gemfile
|
2
|
+
require "mixlib/shellout"
|
3
|
+
|
4
|
+
# Internal stuff
|
5
|
+
require "test_kitchen_chef_minitest_matchers/version"
|
6
|
+
require "test_kitchen_chef_minitest_matchers/chef_gem"
|
7
|
+
|
8
|
+
# rubocop:disable HandleExceptions
|
9
|
+
# Development stuff, can't be loaded in production, but that's fine
|
10
|
+
%w(byebug).each do |development_gem|
|
11
|
+
begin
|
12
|
+
require development_gem
|
13
|
+
rescue LoadError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
# rubocop:enable HandleExceptions
|
17
|
+
|
18
|
+
# @author Nils Landt
|
19
|
+
module TestKitchenChefMinitestMatchers
|
20
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Minitest
|
2
|
+
module Assertions
|
3
|
+
def assert_chef_gem_installed(gem_name, version_requirements = nil, msg: nil)
|
4
|
+
if msg
|
5
|
+
message = msg
|
6
|
+
else
|
7
|
+
message = "Expected #{ gem_name } to be installed but it is not"
|
8
|
+
message += ", version requirements: #{ version_requirements }" if version_requirements
|
9
|
+
end
|
10
|
+
|
11
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(gem_name, version_requirements), message
|
12
|
+
end
|
13
|
+
|
14
|
+
def refute_chef_gem_installed(gem_name, version_requirements = nil, msg: nil)
|
15
|
+
if msg
|
16
|
+
message = msg
|
17
|
+
else
|
18
|
+
message = "Expected #{ gem_name } not to be installed but it is"
|
19
|
+
message += ", version requirements: #{ version_requirements }" if version_requirements
|
20
|
+
end
|
21
|
+
|
22
|
+
refute TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(gem_name, version_requirements), message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
[String, Symbol].each do |klass|
|
28
|
+
klass.infect_an_assertion :assert_chef_gem_installed, :must_be_installed_as_chef_gem, :reverse
|
29
|
+
klass.infect_an_assertion :refute_chef_gem_installed, :must_not_be_installed_as_chef_gem, :reverse
|
30
|
+
end
|
31
|
+
|
32
|
+
module TestKitchenChefMinitestMatchers
|
33
|
+
class ChefGem
|
34
|
+
class << self
|
35
|
+
def chef_gem_installed?(gem_name, *version_requirements)
|
36
|
+
installed_versions = installed_chef_gem_versions(gem_name)
|
37
|
+
|
38
|
+
return false if installed_versions.empty?
|
39
|
+
|
40
|
+
gem_dependency = Gem::Dependency.new("", version_requirements)
|
41
|
+
|
42
|
+
installed_versions.any? { |installed_version| gem_dependency.match?("", installed_version) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def installed_chef_gem_versions(gem_name)
|
46
|
+
# test-kitchen sets GEM_HOME, GEM_PATH and GEM_CACHE for its own testing gems
|
47
|
+
cmd_string = %((unset GEM_HOME; unset GEM_PATH; unset GEM_CACHE; #{ chef_gem_path } list --versions --local --no-details #{ gem_name }))
|
48
|
+
cmd = Mixlib::ShellOut.new(cmd_string)
|
49
|
+
cmd.run_command
|
50
|
+
|
51
|
+
line_regexp = /^#{ gem_name } \((.*)\)/
|
52
|
+
|
53
|
+
matching_line = cmd.stdout.lines.detect { |line| line_regexp.match(line) }
|
54
|
+
|
55
|
+
return [] unless matching_line
|
56
|
+
|
57
|
+
match_data = line_regexp.match(matching_line)
|
58
|
+
|
59
|
+
match_data[1].split(", ")
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def chef_gem_path
|
65
|
+
@chef_gem_path ||= if RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
|
66
|
+
"C:\\opscode\\chef\\embedded\\bin"
|
67
|
+
else
|
68
|
+
"/opt/chef/embedded/bin/gem"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe TestKitchenChefMinitestMatchers::ChefGem do
|
4
|
+
TEST_GEM_NAME = "test_gem"
|
5
|
+
|
6
|
+
describe ".must_be_installed_as_chef_gem" do
|
7
|
+
before do
|
8
|
+
@installed_gem_versions = ["1.2.3", "2.0.1"]
|
9
|
+
|
10
|
+
fake_install_chef_gems(TEST_GEM_NAME => @installed_gem_versions)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "finds an installed gem" do
|
14
|
+
TEST_GEM_NAME.must_be_installed_as_chef_gem
|
15
|
+
end
|
16
|
+
|
17
|
+
it "finds an installed gem with a specific version" do
|
18
|
+
TEST_GEM_NAME.must_be_installed_as_chef_gem(@installed_gem_versions.first)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "finds an installed gem with a pessimistic version constraint" do
|
22
|
+
TEST_GEM_NAME.must_be_installed_as_chef_gem("~> #{ @installed_gem_versions.first.split(".").take(2).join(".") }")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".must_not_be_installed_as_chef_gem" do
|
27
|
+
it "does not find a non installed gem" do
|
28
|
+
TEST_GEM_NAME.must_not_be_installed_as_chef_gem
|
29
|
+
end
|
30
|
+
|
31
|
+
it "finds no installed gem outside a pessimistic version constraint" do
|
32
|
+
fake_install_chef_gems(TEST_GEM_NAME => ["1.2.3", "2.0.1"])
|
33
|
+
|
34
|
+
TEST_GEM_NAME.must_not_be_installed_as_chef_gem("~> 0")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe ".assert_chef_gem_installed" do
|
39
|
+
before do
|
40
|
+
@installed_gem_versions = ["1.2.3", "2.0.1"]
|
41
|
+
|
42
|
+
fake_install_chef_gems(TEST_GEM_NAME => @installed_gem_versions)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "finds an installed gem" do
|
46
|
+
assert_chef_gem_installed(TEST_GEM_NAME)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "finds an installed gem with a specific version" do
|
50
|
+
assert_chef_gem_installed(TEST_GEM_NAME, @installed_gem_versions.first)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "finds an installed gem with a pessimistic version constraint" do
|
54
|
+
assert_chef_gem_installed(TEST_GEM_NAME, "~> #{ @installed_gem_versions.first.split(".").take(2).join(".") }")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe ".refute_chef_gem_installed" do
|
59
|
+
it "does not find a non installed gem" do
|
60
|
+
fake_install_chef_gems("another_gem" => ["1.0.0"])
|
61
|
+
|
62
|
+
refute_chef_gem_installed(TEST_GEM_NAME)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "finds no installed gem outside a pessimistic version constraint" do
|
66
|
+
fake_install_chef_gems(TEST_GEM_NAME => ["1.2.3", "2.0.1"])
|
67
|
+
|
68
|
+
refute_chef_gem_installed(TEST_GEM_NAME, "~> 0")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe ".chef_gem_installed?" do
|
73
|
+
before do
|
74
|
+
@installed_gem_versions = ["1.2.3", "2.0.1"]
|
75
|
+
|
76
|
+
fake_install_chef_gems(TEST_GEM_NAME => @installed_gem_versions)
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "finding the gem" do
|
80
|
+
it "returns true for an installed gem without version information" do
|
81
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "returns true for an installed gem with the exact version information" do
|
85
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, @installed_gem_versions.first)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "returns true for an installed gem with a pessimistic version constraint" do
|
89
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, "~> #{ @installed_gem_versions.first.split(".").take(2).join(".") }")
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns true for an installed gem with a less-than version constraint" do
|
93
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, "< #{ [@installed_gem_versions.first.split(".").first.to_i + 1, 0, 0].join(".") }")
|
94
|
+
end
|
95
|
+
|
96
|
+
it "returns true for an installed gem with a less-or-equal-than version constraint" do
|
97
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, "<= #{ @installed_gem_versions.first }")
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns true for an installed gem with a greater-than version constraint" do
|
101
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, "> #{ [@installed_gem_versions.first.split(".").first.to_i - 1, 0, 0].join(".") }")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "returns true for an installed gem with a greater-or-equal-than version constraint" do
|
105
|
+
assert TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, ">= #{ @installed_gem_versions.first }")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "not finding the gem" do
|
110
|
+
it "returns false for a not installed gem" do
|
111
|
+
refute TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME + "asdf")
|
112
|
+
end
|
113
|
+
|
114
|
+
it "returns false for an installed gem outside the pessimistic version constraint" do
|
115
|
+
refute TestKitchenChefMinitestMatchers::ChefGem.chef_gem_installed?(TEST_GEM_NAME, "~> 0")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe ".installed_chef_gem_versions" do
|
121
|
+
it "finds a single installed version" do
|
122
|
+
installed_gem_versions = ["1.2.3"]
|
123
|
+
|
124
|
+
fake_install_chef_gems(TEST_GEM_NAME => installed_gem_versions)
|
125
|
+
|
126
|
+
assert_equal installed_gem_versions, TestKitchenChefMinitestMatchers::ChefGem.installed_chef_gem_versions(TEST_GEM_NAME)
|
127
|
+
end
|
128
|
+
|
129
|
+
it "finds multiple installed versions" do
|
130
|
+
installed_gem_versions = ["1.2.3", "1.2.4", "2.3.7"]
|
131
|
+
|
132
|
+
fake_install_chef_gems(TEST_GEM_NAME => installed_gem_versions)
|
133
|
+
|
134
|
+
assert_equal installed_gem_versions, TestKitchenChefMinitestMatchers::ChefGem.installed_chef_gem_versions(TEST_GEM_NAME)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "matches the exact name" do
|
138
|
+
installed_gem_versions = ["1.2.3"]
|
139
|
+
|
140
|
+
fake_install_chef_gems(TEST_GEM_NAME => installed_gem_versions,
|
141
|
+
"#{ TEST_GEM_NAME }-rails" => "1.2.2",
|
142
|
+
"#{ TEST_GEM_NAME }improved" => "1.2.1",
|
143
|
+
"better#{ TEST_GEM_NAME }" => "1.3.1")
|
144
|
+
|
145
|
+
assert_equal installed_gem_versions, TestKitchenChefMinitestMatchers::ChefGem.installed_chef_gem_versions(TEST_GEM_NAME)
|
146
|
+
end
|
147
|
+
|
148
|
+
it "returns an empty array when no version is installed" do
|
149
|
+
fake_install_chef_gems("another_gem" => "1.0.0")
|
150
|
+
|
151
|
+
assert_empty TestKitchenChefMinitestMatchers::ChefGem.installed_chef_gem_versions(TEST_GEM_NAME)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
|
3
|
+
require "minitest/autorun"
|
4
|
+
require "minitest/focus"
|
5
|
+
require "mocha/setup"
|
6
|
+
|
7
|
+
require "test_kitchen_chef_minitest_matchers"
|
8
|
+
|
9
|
+
def fake_install_chef_gems(installed_gems)
|
10
|
+
shellout = mocked_shellout(stdout: gem_list_output(installed_gems))
|
11
|
+
Mixlib::ShellOut.stubs(:new).returns(shellout)
|
12
|
+
shellout.expects(:run_command)
|
13
|
+
end
|
14
|
+
|
15
|
+
def gem_list_output(installed_gems)
|
16
|
+
result = ["", "*** LOCAL GEMS ***", ""]
|
17
|
+
|
18
|
+
installed_gems.each_with_object(result) do |(gem_name, installed_versions), collection|
|
19
|
+
collection << "#{ gem_name } (#{ Array(installed_versions).join(", ") })"
|
20
|
+
end
|
21
|
+
|
22
|
+
result.join("\n")
|
23
|
+
end
|
24
|
+
|
25
|
+
def mocked_shellout(stdout: "", stderr: "", error: false, exitstatus: 0)
|
26
|
+
result = mock.stubs(:run_command)
|
27
|
+
|
28
|
+
if error
|
29
|
+
result.stubs(:error!).raises(Mixlib::ShellOut::ShellCommandFailed)
|
30
|
+
else
|
31
|
+
result.stubs(:error!).returns(false)
|
32
|
+
end
|
33
|
+
|
34
|
+
result.stubs(:stderr).returns(stderr)
|
35
|
+
result.stubs(:stdout).returns(stdout)
|
36
|
+
result.stubs(:exitstatus).returns(exitstatus)
|
37
|
+
|
38
|
+
result
|
39
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "test_kitchen_chef_minitest_matchers/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "test_kitchen_chef_minitest_matchers"
|
8
|
+
spec.version = TestKitchenChefMinitestMatchers::VERSION
|
9
|
+
spec.authors = ["Nils Landt"]
|
10
|
+
spec.email = ["nils@promisedlandt.de"]
|
11
|
+
spec.summary = %q{Minitest-Matchers for testing Chef in Test Kitchen}
|
12
|
+
spec.homepage = "https://github.com/promisedlandt/test_kitchen_chef_minitest_matchers"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency "mixlib-shellout", "~> 2"
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency "minitest-focus", "~> 1"
|
25
|
+
spec.add_development_dependency "mocha", "~> 1"
|
26
|
+
spec.add_development_dependency "byebug", "~> 4"
|
27
|
+
spec.add_development_dependency "rubocop", "~> 0"
|
28
|
+
spec.add_development_dependency "guard", "~> 2"
|
29
|
+
spec.add_development_dependency "guard-minitest", "~> 2"
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: test_kitchen_chef_minitest_matchers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nils Landt
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mixlib-shellout
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest-focus
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
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
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-minitest
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2'
|
139
|
+
description:
|
140
|
+
email:
|
141
|
+
- nils@promisedlandt.de
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".gitignore"
|
147
|
+
- ".rubocop.yml"
|
148
|
+
- ".travis.yml"
|
149
|
+
- Gemfile
|
150
|
+
- Guardfile
|
151
|
+
- LICENSE.txt
|
152
|
+
- README.md
|
153
|
+
- Rakefile
|
154
|
+
- lib/test_kitchen_chef_minitest_matchers.rb
|
155
|
+
- lib/test_kitchen_chef_minitest_matchers/chef_gem.rb
|
156
|
+
- lib/test_kitchen_chef_minitest_matchers/version.rb
|
157
|
+
- test/chef_gem_test.rb
|
158
|
+
- test/test_helper.rb
|
159
|
+
- test_kitchen_chef_minitest_matchers.gemspec
|
160
|
+
homepage: https://github.com/promisedlandt/test_kitchen_chef_minitest_matchers
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata: {}
|
164
|
+
post_install_message:
|
165
|
+
rdoc_options: []
|
166
|
+
require_paths:
|
167
|
+
- lib
|
168
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
requirements: []
|
179
|
+
rubyforge_project:
|
180
|
+
rubygems_version: 2.4.5
|
181
|
+
signing_key:
|
182
|
+
specification_version: 4
|
183
|
+
summary: Minitest-Matchers for testing Chef in Test Kitchen
|
184
|
+
test_files:
|
185
|
+
- test/chef_gem_test.rb
|
186
|
+
- test/test_helper.rb
|
187
|
+
has_rdoc:
|