diff options
author | Noah Kantrowitz <noah@coderanger.net> | 2018-06-14 18:39:14 -0700 |
---|---|---|
committer | Noah Kantrowitz <noah@coderanger.net> | 2018-06-14 18:39:14 -0700 |
commit | d98d35448da139c5c039f810f5cb9c86094f695b (patch) | |
tree | 32a7af49b4919fc8a148690780f18d26ff4eb79b /spec/unit/chef_class_spec.rb | |
parent | aa4f3285f3e49919e29f40337183fd0510baaee5 (diff) | |
download | chef-d98d35448da139c5c039f810f5cb9c86094f695b.tar.gz |
Simplify the deprecations system a bit, and introduce ways to silence deprecation warnings.
Signed-off-by: Noah Kantrowitz <noah@coderanger.net>
Diffstat (limited to 'spec/unit/chef_class_spec.rb')
-rw-r--r-- | spec/unit/chef_class_spec.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/spec/unit/chef_class_spec.rb b/spec/unit/chef_class_spec.rb index 21987c01ab..1910d90b38 100644 --- a/spec/unit/chef_class_spec.rb +++ b/spec/unit/chef_class_spec.rb @@ -107,4 +107,97 @@ describe "Chef class" do end.to raise_error(Chef::Exceptions::InvalidEventType) end end + + fdescribe "Deprecation system" do + context "with treat_deprecation_warnings_as_errors false" do + before { Chef::Config[:treat_deprecation_warnings_as_errors] = false } + + it "displays a simple deprecation warning" do + expect(Chef::Log).to receive(:warn).with(%r{I'm a little teapot\..*?spec/unit/chef_class_spec\.rb.*?Please see}m) + Chef.deprecated(:generic, "I'm a little teapot.") + end + + it "allows silencing all warnings" do + Chef::Config[:silence_deprecation_warnings] = true + expect(Chef::Log).to_not receive(:warn) + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:internal_api, "Short and stout.") + Chef.deprecated(:generic, "This is my handle.") + end + + it "allows silencing specific types" do + Chef::Config[:silence_deprecation_warnings] = [:internal_api] + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/This is my handle/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:internal_api, "Short and stout.") + Chef.deprecated(:generic, "This is my handle.") + end + + it "allows silencing specific lines" do + Chef::Config[:silence_deprecation_warnings] = ["chef_class_spec.rb:#{__LINE__ + 4}"] + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/This is my handle/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:generic, "Short and stout.") + Chef.deprecated(:internal_api, "This is my handle.") + end + + it "allows silencing all via inline comments" do + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/This is my handle/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:generic, "Short and stout.") # chef:silence_deprecation + Chef.deprecated(:internal_api, "This is my handle.") + end + + it "allows silencing specific types via inline comments" do + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/This is my handle/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:generic, "Short and stout.") # chef:silence_deprecation:generic + Chef.deprecated(:internal_api, "This is my handle.") + end + + it "does not silence via inline comments when the types don't match" do + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/Short and stout/).once + expect(Chef::Log).to receive(:warn).with(/This is my handle/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:internal_api, "Short and stout.") # chef:silence_deprecation:generic + Chef.deprecated(:internal_api, "This is my handle.") + end + + it "allows silencing all via inline comments with other stuff in the comment" do + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/This is my handle/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:generic, "Short and stout.") # rubocop:something chef:silence_deprecation other stuff + Chef.deprecated(:internal_api, "This is my handle.") + end + + it "handles multiple silence configurations at the same time" do + Chef::Config[:silence_deprecation_warnings] = ["exit_code", "chef_class_spec.rb:#{__LINE__ + 6}"] + expect(Chef::Log).to receive(:warn).with(/I'm a little teapot/).once + expect(Chef::Log).to receive(:warn).with(/This is my spout/).once + expect(Chef::Log).to receive(:warn).with(/Hear me shout/).once + Chef.deprecated(:generic, "I'm a little teapot.") + Chef.deprecated(:generic, "Short and stout.") # chef:silence_deprecation + Chef.deprecated(:internal_api, "This is my handle.") + Chef.deprecated(:internal_api, "This is my spout.") + Chef.deprecated(:exit_code, "When I get all steamed up.") + Chef.deprecated(:generic, "Hear me shout.") + end + end + + context "with treat_deprecation_warnings_as_errors true" do + # This is already turned on globally for Chef's unit tests, but just for clarity do it here too. + before { Chef::Config[:treat_deprecation_warnings_as_errors] = true } + + it "displays a simple deprecation error" do + expect(Chef::Log).to receive(:error).with(%r{I'm a little teapot\..*?spec/unit/chef_class_spec\.rb.*?Please see}m) + expect { Chef.deprecated(:generic, "I'm a little teapot.") }.to raise_error(/I'm a little teapot./) + end + end + end end |