chefspec 8.0.1 → 9.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +16 -9
  3. data/Rakefile +60 -52
  4. data/chefspec.gemspec +20 -20
  5. data/lib/chefspec.rb +29 -29
  6. data/lib/chefspec/api.rb +15 -13
  7. data/lib/chefspec/api/core.rb +3 -3
  8. data/lib/chefspec/api/described.rb +3 -5
  9. data/lib/chefspec/api/include_any_recipe.rb +24 -0
  10. data/lib/chefspec/api/stubs.rb +2 -2
  11. data/lib/chefspec/api/stubs_for.rb +23 -20
  12. data/lib/chefspec/berkshelf.rb +4 -4
  13. data/lib/chefspec/cacher.rb +2 -2
  14. data/lib/chefspec/coverage.rb +35 -40
  15. data/lib/chefspec/coverage/filters.rb +18 -15
  16. data/lib/chefspec/deprecations.rb +3 -3
  17. data/lib/chefspec/errors.rb +7 -7
  18. data/lib/chefspec/expect_exception.rb +2 -1
  19. data/lib/chefspec/extensions.rb +14 -13
  20. data/lib/chefspec/extensions/chef/client.rb +3 -3
  21. data/lib/chefspec/extensions/chef/conditional.rb +2 -1
  22. data/lib/chefspec/extensions/chef/cookbook/gem_installer.rb +5 -4
  23. data/lib/chefspec/extensions/chef/cookbook_loader.rb +1 -0
  24. data/lib/chefspec/extensions/chef/cookbook_uploader.rb +1 -1
  25. data/lib/chefspec/extensions/chef/data_query.rb +3 -3
  26. data/lib/chefspec/extensions/chef/lwrp_base.rb +1 -0
  27. data/lib/chefspec/extensions/chef/provider.rb +8 -5
  28. data/lib/chefspec/extensions/chef/resource.rb +18 -12
  29. data/lib/chefspec/extensions/chef/resource/freebsd_package.rb +2 -1
  30. data/lib/chefspec/extensions/chef/run_context/cookbook_compiler.rb +21 -1
  31. data/lib/chefspec/extensions/chef/securable.rb +1 -1
  32. data/lib/chefspec/extensions/ohai/system.rb +11 -0
  33. data/lib/chefspec/file_cache_path_proxy.rb +3 -3
  34. data/lib/chefspec/formatter.rb +15 -3
  35. data/lib/chefspec/librarian.rb +7 -6
  36. data/lib/chefspec/matchers.rb +9 -8
  37. data/lib/chefspec/matchers/do_nothing_matcher.rb +15 -15
  38. data/lib/chefspec/matchers/include_any_recipe_matcher.rb +51 -0
  39. data/lib/chefspec/matchers/include_recipe_matcher.rb +1 -1
  40. data/lib/chefspec/matchers/link_to_matcher.rb +2 -2
  41. data/lib/chefspec/matchers/notifications_matcher.rb +5 -4
  42. data/lib/chefspec/matchers/render_file_matcher.rb +3 -3
  43. data/lib/chefspec/matchers/resource_matcher.rb +18 -16
  44. data/lib/chefspec/mixins/normalize.rb +1 -1
  45. data/lib/chefspec/policyfile.rb +6 -6
  46. data/lib/chefspec/renderer.rb +4 -4
  47. data/lib/chefspec/rspec.rb +1 -1
  48. data/lib/chefspec/runner.rb +1 -1
  49. data/lib/chefspec/server.rb +1 -1
  50. data/lib/chefspec/server_methods.rb +8 -8
  51. data/lib/chefspec/server_runner.rb +10 -10
  52. data/lib/chefspec/solo_runner.rb +26 -24
  53. data/lib/chefspec/stubs/command_registry.rb +1 -1
  54. data/lib/chefspec/stubs/command_stub.rb +1 -1
  55. data/lib/chefspec/stubs/data_bag_item_registry.rb +1 -1
  56. data/lib/chefspec/stubs/data_bag_item_stub.rb +1 -1
  57. data/lib/chefspec/stubs/data_bag_registry.rb +1 -1
  58. data/lib/chefspec/stubs/data_bag_stub.rb +1 -1
  59. data/lib/chefspec/stubs/registry.rb +1 -1
  60. data/lib/chefspec/stubs/search_registry.rb +2 -2
  61. data/lib/chefspec/stubs/search_stub.rb +2 -2
  62. data/lib/chefspec/util.rb +7 -7
  63. data/lib/chefspec/version.rb +1 -1
  64. data/lib/chefspec/zero_server.rb +4 -4
  65. data/spec/spec_helper.rb +3 -4
  66. data/spec/support/hash.rb +3 -3
  67. data/spec/unit/cacher_spec.rb +17 -17
  68. data/spec/unit/coverage/filters_spec.rb +16 -16
  69. data/spec/unit/deprecations_spec.rb +8 -9
  70. data/spec/unit/errors_spec.rb +15 -15
  71. data/spec/unit/expect_exception_spec.rb +9 -9
  72. data/spec/unit/macros_spec.rb +50 -50
  73. data/spec/unit/matchers/do_nothing_matcher.rb +1 -1
  74. data/spec/unit/matchers/include_any_recipe_matcher_spec.rb +52 -0
  75. data/spec/unit/matchers/include_recipe_matcher_spec.rb +15 -15
  76. data/spec/unit/matchers/link_to_matcher_spec.rb +18 -18
  77. data/spec/unit/matchers/notifications_matcher_spec.rb +15 -16
  78. data/spec/unit/matchers/render_file_matcher_spec.rb +26 -26
  79. data/spec/unit/matchers/resource_matcher_spec.rb +1 -1
  80. data/spec/unit/matchers/state_attrs_matcher_spec.rb +24 -24
  81. data/spec/unit/matchers/subscribes_matcher_spec.rb +27 -29
  82. data/spec/unit/renderer_spec.rb +36 -36
  83. data/spec/unit/server_runner_spec.rb +6 -6
  84. data/spec/unit/solo_runner_spec.rb +69 -69
  85. data/spec/unit/stubs/command_registry_spec.rb +11 -11
  86. data/spec/unit/stubs/command_stub_spec.rb +26 -26
  87. data/spec/unit/stubs/data_bag_item_registry_spec.rb +17 -17
  88. data/spec/unit/stubs/data_bag_item_stub_spec.rb +14 -14
  89. data/spec/unit/stubs/data_bag_registry_spec.rb +16 -16
  90. data/spec/unit/stubs/data_bag_stub_spec.rb +13 -13
  91. data/spec/unit/stubs/registry_spec.rb +9 -9
  92. data/spec/unit/stubs/search_registry_spec.rb +17 -17
  93. data/spec/unit/stubs/search_stub_spec.rb +14 -14
  94. data/spec/unit/stubs/stub_spec.rb +22 -22
  95. metadata +16 -12
@@ -1,30 +1,30 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ChefSpec::ExpectException do
4
- context 'when there have been no `raise_error` matchers' do
4
+ context "when there have been no `raise_error` matchers" do
5
5
  subject { described_class.new(Exception) }
6
6
 
7
- it 'does not match' do
7
+ it "does not match" do
8
8
  allow(RSpec::Matchers::BuiltIn::RaiseError).to receive(:last_run).and_return(nil)
9
9
  expect(subject.expected?).to be_falsy
10
10
  end
11
11
  end
12
12
 
13
- context 'when the last error does not match the expected type' do
13
+ context "when the last error does not match the expected type" do
14
14
  subject { described_class.new(RuntimeError) }
15
15
 
16
- it 'does not match' do
17
- last_error = double('last error', last_error_for_chefspec: ArgumentError)
16
+ it "does not match" do
17
+ last_error = double("last error", last_error_for_chefspec: ArgumentError)
18
18
  allow(RSpec::Matchers::BuiltIn::RaiseError).to receive(:last_run).and_return(last_error)
19
19
  expect(subject.expected?).to be_falsy
20
20
  end
21
21
  end
22
22
 
23
- context 'when the last error matches the expected type' do
23
+ context "when the last error matches the expected type" do
24
24
  subject { described_class.new(RuntimeError) }
25
25
 
26
- it 'does not match' do
27
- last_error = double('last error', last_error_for_chefspec: RuntimeError)
26
+ it "does not match" do
27
+ last_error = double("last error", last_error_for_chefspec: RuntimeError)
28
28
  allow(RSpec::Matchers::BuiltIn::RaiseError).to receive(:last_run).and_return(last_error)
29
29
  expect(subject.expected?).to be_truthy
30
30
  end
@@ -1,10 +1,10 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ChefSpec::API::Stubs do
4
- describe '#stub_command' do
5
- let(:command_stub) { double('command') }
4
+ describe "#stub_command" do
5
+ let(:command_stub) { double("command") }
6
6
 
7
- it 'adds the command to the command registry' do
7
+ it "adds the command to the command registry" do
8
8
  allow(ChefSpec::Stubs::CommandStub).to receive(:new).and_return(command_stub)
9
9
  stub_command('echo "hello"')
10
10
 
@@ -12,21 +12,21 @@ describe ChefSpec::API::Stubs do
12
12
  end
13
13
  end
14
14
 
15
- describe '#stub_search' do
16
- let(:search_stub) { double('search') }
15
+ describe "#stub_search" do
16
+ let(:search_stub) { double("search") }
17
17
 
18
- it 'adds the query to the search registry' do
18
+ it "adds the query to the search registry" do
19
19
  allow(ChefSpec::Stubs::SearchStub).to receive(:new).and_return(search_stub)
20
- stub_search(:node, '*:*')
20
+ stub_search(:node, "*:*")
21
21
 
22
22
  expect(ChefSpec::Stubs::SearchRegistry.stubs).to include(search_stub)
23
23
  end
24
24
  end
25
25
 
26
- describe '#stub_data_bag' do
27
- let(:data_bag_stub) { double('data_bag') }
26
+ describe "#stub_data_bag" do
27
+ let(:data_bag_stub) { double("data_bag") }
28
28
 
29
- it 'adds the query to the data_bag registry' do
29
+ it "adds the query to the data_bag registry" do
30
30
  allow(ChefSpec::Stubs::DataBagStub).to receive(:new).and_return(data_bag_stub)
31
31
  stub_data_bag(:users)
32
32
 
@@ -34,84 +34,84 @@ describe ChefSpec::API::Stubs do
34
34
  end
35
35
  end
36
36
 
37
- describe '#stub_data_bag_item' do
38
- let(:data_bag_item_stub) { double('data_bag_item') }
37
+ describe "#stub_data_bag_item" do
38
+ let(:data_bag_item_stub) { double("data_bag_item") }
39
39
 
40
- it 'adds the query to the data_bag_item registry' do
40
+ it "adds the query to the data_bag_item registry" do
41
41
  allow(ChefSpec::Stubs::DataBagItemStub).to receive(:new).and_return(data_bag_item_stub)
42
- stub_data_bag_item(:users, 'id')
42
+ stub_data_bag_item(:users, "id")
43
43
 
44
44
  expect(ChefSpec::Stubs::DataBagItemRegistry.stubs).to include(data_bag_item_stub)
45
45
  end
46
46
  end
47
47
 
48
- describe '#stub_node' do
49
- it 'returns a Chef::Node' do
48
+ describe "#stub_node" do
49
+ it "returns a Chef::Node" do
50
50
  expect(stub_node).to be_a(Chef::Node)
51
51
  end
52
52
 
53
- it 'defaults the node name to `node.example`' do
53
+ it "defaults the node name to `node.example`" do
54
54
  node = stub_node
55
- expect(node.name).to eq('node.example')
55
+ expect(node.name).to eq("node.example")
56
56
  end
57
57
 
58
- it 'sets the node name when given' do
59
- node = stub_node('example.com')
60
- expect(node.name).to eq('example.com')
58
+ it "sets the node name when given" do
59
+ node = stub_node("example.com")
60
+ expect(node.name).to eq("example.com")
61
61
  end
62
62
 
63
- it 'sets the automatic attributes' do
63
+ it "sets the automatic attributes" do
64
64
  node = stub_node
65
65
  expect(node.automatic).to eq(Fauxhai.mock.data)
66
66
  end
67
67
 
68
- it 'sets the automatic attributes with ohai overrides' do
69
- node = stub_node('node.example', ohai: { ipaddress: '1.2.3.4' })
70
- expect(node['ipaddress']).to eq('1.2.3.4')
68
+ it "sets the automatic attributes with ohai overrides" do
69
+ node = stub_node("node.example", ohai: { ipaddress: "1.2.3.4" })
70
+ expect(node["ipaddress"]).to eq("1.2.3.4")
71
71
  end
72
72
 
73
- it 'sets the automatic attributes for a specific platform and version' do
74
- node = stub_node('node.example', platform: 'ubuntu', version: '18.04')
75
- expect(node.automatic).to eq(Fauxhai.mock(platform: 'ubuntu', version: '18.04').data)
73
+ it "sets the automatic attributes for a specific platform and version" do
74
+ node = stub_node("node.example", platform: "ubuntu", version: "18.04")
75
+ expect(node.automatic).to eq(Fauxhai.mock(platform: "ubuntu", version: "18.04").data)
76
76
  end
77
77
 
78
- it 'sets the automatic attributes from a JSON data path' do
79
- allow(File).to receive(:exist?).with('/path/to/json').and_return(true)
80
- allow(File).to receive(:read).with('/path/to/json').and_return('{ "ipaddress": "1.2.3.4" }')
81
- node = stub_node('node.example', path: '/path/to/json')
82
- expect(node['ipaddress']).to eq('1.2.3.4')
78
+ it "sets the automatic attributes from a JSON data path" do
79
+ allow(File).to receive(:exist?).with("/path/to/json").and_return(true)
80
+ allow(File).to receive(:read).with("/path/to/json").and_return('{ "ipaddress": "1.2.3.4" }')
81
+ node = stub_node("node.example", path: "/path/to/json")
82
+ expect(node["ipaddress"]).to eq("1.2.3.4")
83
83
  end
84
84
 
85
- it 'yields a block' do
85
+ it "yields a block" do
86
86
  expect { |block| stub_node(&block) }.to yield_with_args(Chef::Node)
87
87
  end
88
88
  end
89
89
  end
90
90
 
91
- describe 'nginx::source' do
92
- describe '#described_cookbook' do
93
- describe 'nginx::source' do
94
- it 'returns the name of the cookbook' do
95
- expect(described_cookbook).to eq('nginx')
91
+ describe "nginx::source" do
92
+ describe "#described_cookbook" do
93
+ describe "nginx::source" do
94
+ it "returns the name of the cookbook" do
95
+ expect(described_cookbook).to eq("nginx")
96
96
  end
97
97
 
98
- context 'in a nested context' do
99
- it 'still returns the name of the cookbook' do
100
- expect(described_cookbook).to eq('nginx')
98
+ context "in a nested context" do
99
+ it "still returns the name of the cookbook" do
100
+ expect(described_cookbook).to eq("nginx")
101
101
  end
102
102
  end
103
103
  end
104
104
  end
105
105
 
106
- describe '#described_recipe' do
107
- describe 'nginx::source' do
108
- it 'returns the cookbook::recipe' do
109
- expect(described_recipe).to eq('nginx::source')
106
+ describe "#described_recipe" do
107
+ describe "nginx::source" do
108
+ it "returns the cookbook::recipe" do
109
+ expect(described_recipe).to eq("nginx::source")
110
110
  end
111
111
 
112
- context 'in a nested context' do
113
- it 'still retrns the cookbook::recipe' do
114
- expect(described_recipe).to eq('nginx::source')
112
+ context "in a nested context" do
113
+ it "still retrns the cookbook::recipe" do
114
+ expect(described_recipe).to eq("nginx::source")
115
115
  end
116
116
  end
117
117
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ChefSpec::Matchers::DoNothingMatcher do
4
4
  pending
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe ChefSpec::Matchers::IncludeAnyRecipeMatcher do
4
+ let(:node) { double("Chef::Node", run_list: run_list) }
5
+ let(:run_list) { double("Chef::RunList", run_list_items: run_list_items) }
6
+ let(:run_list_items) { [run_list_item_one] }
7
+ let(:run_list_item_one) { double("Chef::RunList::RunListItem", name: "one") }
8
+ let(:run_list_item_two) { double("Chef::RunList::RunListItem", name: "two") }
9
+ let(:loaded_recipes) { %w{one} }
10
+ let(:chef_run) { double("chef run", run_context: { loaded_recipes: loaded_recipes, node: node }) }
11
+
12
+ subject { described_class.new }
13
+
14
+ describe "#failure_message" do
15
+ it "has the right value" do
16
+ subject.matches?(chef_run)
17
+ expect(subject.failure_message).to eq("expected to include any recipe")
18
+ end
19
+ end
20
+
21
+ describe "#failure_message_when_negated" do
22
+ it "has the right value" do
23
+ subject.matches?(chef_run)
24
+ expect(subject.failure_message_when_negated).to eq("expected not to include any recipes")
25
+ end
26
+ end
27
+
28
+ describe "#description" do
29
+ it "has the right value" do
30
+ subject.matches?(chef_run)
31
+ expect(subject.description).to eq("include any recipe")
32
+ end
33
+ end
34
+
35
+ describe "#matches?" do
36
+ context "when 0 recipes are included" do
37
+ let(:loaded_recipes) { %w{one} }
38
+
39
+ it "returns false" do
40
+ expect(subject.matches?(chef_run)).to be false
41
+ end
42
+ end
43
+
44
+ context "when at least one recipe is included" do
45
+ let(:loaded_recipes) { %w{one two} }
46
+
47
+ it "returns true" do
48
+ expect(subject.matches?(chef_run)).to be true
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,38 +1,38 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ChefSpec::Matchers::IncludeRecipeMatcher do
4
- let(:chef_run) { double('chef run', run_context: { loaded_recipes: %w(one two three) }) }
5
- subject { described_class.new('one::default') }
4
+ let(:chef_run) { double("chef run", run_context: { loaded_recipes: %w{one two three} }) }
5
+ subject { described_class.new("one::default") }
6
6
 
7
- describe '#failure_message' do
8
- it 'has the right value' do
7
+ describe "#failure_message" do
8
+ it "has the right value" do
9
9
  subject.matches?(chef_run)
10
10
  expect(subject.failure_message)
11
- .to eq(%q(expected ["one::default", "two::default", "three::default"] to include "one::default"))
11
+ .to eq(%q{expected ["one::default", "two::default", "three::default"] to include "one::default"})
12
12
  end
13
13
  end
14
14
 
15
- describe '#failure_message_when_negated' do
16
- it 'has the right value' do
15
+ describe "#failure_message_when_negated" do
16
+ it "has the right value" do
17
17
  subject.matches?(chef_run)
18
18
  expect(subject.failure_message_when_negated)
19
- .to eq(%q(expected "one::default" to not be included))
19
+ .to eq(%q{expected "one::default" to not be included})
20
20
  end
21
21
  end
22
22
 
23
- describe '#description' do
24
- it 'has the right value' do
23
+ describe "#description" do
24
+ it "has the right value" do
25
25
  subject.matches?(chef_run)
26
- expect(subject.description).to eq(%q(include recipe "one::default"))
26
+ expect(subject.description).to eq(%q{include recipe "one::default"})
27
27
  end
28
28
  end
29
29
 
30
- it 'matches when the recipe is included' do
30
+ it "matches when the recipe is included" do
31
31
  expect(subject.matches?(chef_run)).to be_truthy
32
32
  end
33
33
 
34
- it 'does not match when the recipe is not included' do
35
- failure = described_class.new('nope')
34
+ it "does not match when the recipe is not included" do
35
+ failure = described_class.new("nope")
36
36
  expect(failure.matches?(chef_run)).to be_falsy
37
37
  end
38
38
  end
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ChefSpec::Matchers::LinkToMatcher do
4
- let(:from) { '/var/www' }
5
- let(:to) { '/var/html' }
4
+ let(:from) { "/var/www" }
5
+ let(:to) { "/var/html" }
6
6
  let(:link) do
7
7
  Chef::Resource::Link.new(from).tap do |link|
8
8
  link.to(to)
@@ -11,44 +11,44 @@ describe ChefSpec::Matchers::LinkToMatcher do
11
11
  end
12
12
  subject { described_class.new(to) }
13
13
 
14
- describe '#failure_message' do
15
- it 'has the right value' do
14
+ describe "#failure_message" do
15
+ it "has the right value" do
16
16
  subject.matches?(link)
17
17
  expect(subject.failure_message)
18
- .to eq(%Q(expected "link[#{from}]" to link to "#{to}" but was "#{to}"))
18
+ .to eq(%Q{expected "link[#{from}]" to link to "#{to}" but was "#{to}"})
19
19
  end
20
20
  end
21
21
 
22
- describe '#failure_message_when_negated' do
23
- it 'has the right value' do
22
+ describe "#failure_message_when_negated" do
23
+ it "has the right value" do
24
24
  subject.matches?(link)
25
25
  expect(subject.failure_message_when_negated)
26
- .to eq(%Q(expected "link[#{from}]" to not link to "#{to}"))
26
+ .to eq(%Q{expected "link[#{from}]" to not link to "#{to}"})
27
27
  end
28
28
  end
29
29
 
30
- describe '#description' do
31
- it 'has the right value' do
30
+ describe "#description" do
31
+ it "has the right value" do
32
32
  subject.matches?(link)
33
- expect(subject.description).to eq(%Q(link to "#{to}"))
33
+ expect(subject.description).to eq(%Q{link to "#{to}"})
34
34
  end
35
35
  end
36
36
 
37
- context 'when the link is correct' do
38
- it 'matches' do
37
+ context "when the link is correct" do
38
+ it "matches" do
39
39
  expect(subject.matches?(link)).to be_truthy
40
40
  end
41
41
 
42
- it 'adds the link to the coverage report' do
42
+ it "adds the link to the coverage report" do
43
43
  expect(ChefSpec::Coverage).to receive(:cover!).with(link)
44
44
  subject.matches?(link)
45
45
  end
46
46
  end
47
47
 
48
- context 'when the link is not correct' do
49
- subject { described_class.new('/nope/bad/path/bro') }
48
+ context "when the link is not correct" do
49
+ subject { described_class.new("/nope/bad/path/bro") }
50
50
 
51
- it 'does not match' do
51
+ it "does not match" do
52
52
  expect(subject.matches?(link)).to be_falsy
53
53
  end
54
54
  end
@@ -1,40 +1,39 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ChefSpec::Matchers::NotificationsMatcher do
4
- subject { described_class.new('execute[install]') }
4
+ subject { described_class.new("execute[install]") }
5
5
  let(:package) do
6
- double('package',
7
- name: 'package',
8
- to_s: 'package[foo]',
6
+ double("package",
7
+ name: "package",
8
+ to_s: "package[foo]",
9
9
  is_a?: true,
10
10
  performed_action?: true,
11
11
  immediate_notifications: [],
12
12
  delayed_notifications: [],
13
- before_notifications: []
14
- )
13
+ before_notifications: [])
15
14
  end
16
15
 
17
- describe '#failure_message' do
18
- it 'has the right value' do
16
+ describe "#failure_message" do
17
+ it "has the right value" do
19
18
  subject.matches?(package)
20
19
  expect(subject.failure_message)
21
- .to include %|expected "package[foo]" to notify "execute[install]", but did not.|
20
+ .to include %{expected "package[foo]" to notify "execute[install]", but did not.}
22
21
  end
23
22
  end
24
23
 
25
- describe '#failure_message_when_negated' do
26
- it 'has the right value' do
24
+ describe "#failure_message_when_negated" do
25
+ it "has the right value" do
27
26
  subject.matches?(package)
28
27
  expect(subject.failure_message_when_negated)
29
- .to eq %|expected "package[foo]" to not notify "execute[install]", but it did.|
28
+ .to eq %{expected "package[foo]" to not notify "execute[install]", but it did.}
30
29
  end
31
30
  end
32
31
 
33
- describe '#description' do
34
- it 'has the right value' do
32
+ describe "#description" do
33
+ it "has the right value" do
35
34
  subject.matches?(package)
36
35
  expect(subject.description)
37
- .to eq %|notify "execute[install]"|
36
+ .to eq %{notify "execute[install]"}
38
37
  end
39
38
  end
40
39
  end