Skip to content

Commit

Permalink
Add specs to request variables branch (paper-trail-gem#1052)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Evanczuk authored and aried3r committed Dec 14, 2020
1 parent c06de33 commit b8a9d81
Show file tree
Hide file tree
Showing 5 changed files with 206 additions and 9 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
*.gem
*.sqlite3-journal
.bundle
.byebug_history
.idea
.rbenv-gemsets
.rbenv-version
.rspec_results
.ruby-gemset
.ruby-version
.rvmrc
Expand Down
35 changes: 35 additions & 0 deletions spec/paper_trail/model_config_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,40 @@ class MisconfiguredCVC < ActiveRecord::Base
)
end
end

describe "deprecated methods" do
let(:config) { PaperTrail::ModelConfig.new(:some_model_class) }

before do
allow(ActiveSupport::Deprecation).to receive(:warn)
end

describe "disable" do
it "delegates to request" do
allow(PaperTrail.request).to receive(:disable_model)
config.disable
expect(PaperTrail.request).to have_received(:disable_model).with(:some_model_class)
expect(ActiveSupport::Deprecation).to have_received(:warn)
end
end

describe "enable" do
it "delegates to request" do
allow(PaperTrail.request).to receive(:enable_model)
config.enable
expect(PaperTrail.request).to have_received(:enable_model).with(:some_model_class)
expect(ActiveSupport::Deprecation).to have_received(:warn)
end
end

describe "enabled?" do
it "delegates to request" do
allow(PaperTrail.request).to receive(:enabled_for_model?)
config.enabled?
expect(PaperTrail.request).to have_received(:enabled_for_model?).with(:some_model_class)
expect(ActiveSupport::Deprecation).to have_received(:warn)
end
end
end
end
end
129 changes: 120 additions & 9 deletions spec/paper_trail/request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,55 @@ module PaperTrail
end
end

describe ".enabled_for_model" do
it "sets enabled_for_model? to true" do
PaperTrail.request.enabled_for_model(Widget, false)
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(false)
PaperTrail.request.enabled_for_model(Widget, true)
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(true)
end

after do
PaperTrail.request.enable_model(Widget)
end
end

describe ".enabled_for_controller?" do
it "returns true" do
expect(PaperTrail.request.enabled_for_controller?).to eq(true)
end
end

describe ".enabled_for_controller=" do
it "sets enabled_for_controller? to true" do
PaperTrail.request.enabled_for_controller = true
expect(PaperTrail.request.enabled_for_controller?).to eq(true)
PaperTrail.request.enabled_for_controller = false
expect(PaperTrail.request.enabled_for_controller?).to eq(false)
end

after do
PaperTrail.request.enabled_for_controller = true
end
end

describe ".controller_info" do
it "returns an empty hash" do
expect(PaperTrail.request.controller_info).to eq({})
end
end

describe ".controller_info=" do
it "sets controller_info" do
PaperTrail.request.controller_info = { foo: :bar }
expect(PaperTrail.request.controller_info).to eq(foo: :bar)
end

after do
PaperTrail.request.controller_info = {}
end
end

describe ".enable_model" do
it "sets enabled_for_model? to true" do
PaperTrail.request.disable_model(Widget)
Expand All @@ -44,23 +93,85 @@ module PaperTrail
expect(described_class.whodunnit).to eq(2)
end
end

context "when set to a primtive value" do
it "returns the primitive value" do
described_class.whodunnit = :some_whodunnit
expect(described_class.whodunnit).to eq(:some_whodunnit)
end
end
end

describe ".with" do
context "block given" do
it "sets whodunnit only for the block passed" do
described_class.with(whodunnit: "foo") do
expect(described_class.whodunnit).to eq("foo")
context "all allowed options" do
it "sets options only for the block passed" do
described_class.whodunnit = "some_whodunnit"
described_class.enabled_for_model(Widget, true)

described_class.with(whodunnit: "foo", enabled_for_Widget: false) do
expect(described_class.whodunnit).to eq("foo")
expect(described_class.enabled_for_model?(Widget)).to eq false
end
expect(described_class.whodunnit).to eq "some_whodunnit"
expect(described_class.enabled_for_model?(Widget)).to eq true
end

it "sets options only for the current thread" do
described_class.whodunnit = "some_whodunnit"
described_class.enabled_for_model(Widget, true)

described_class.with(whodunnit: "foo", enabled_for_Widget: false) do
expect(described_class.whodunnit).to eq("foo")
expect(described_class.enabled_for_model?(Widget)).to eq false
Thread.new { expect(described_class.whodunnit).to be_nil }.join
Thread.new { expect(described_class.enabled_for_model?(Widget)).to eq true }.join
end
expect(described_class.whodunnit).to eq "some_whodunnit"
expect(described_class.enabled_for_model?(Widget)).to eq true
end
end

context "some invalid options" do
it "raises an invalid option error" do
subject = proc do
described_class.with(whodunnit: "blah", invalid_option: "foo") do
raise "This block should not be reached"
end
end

expect { subject.call }.to raise_error(PaperTrail::Request::InvalidOption) do |e|
expect(e.message).to eq "Invalid option: invalid_option"
end
end
expect(described_class.whodunnit).to be_nil
end

it "sets whodunnit only for the current thread" do
described_class.with(whodunnit: "foo") do
expect(described_class.whodunnit).to eq("foo")
Thread.new { expect(described_class.whodunnit).to be_nil }.join
context "all invalid options" do
it "raises an invalid option error" do
subject = proc do
described_class.with(invalid_option: "foo", other_invalid_option: "blah") do
raise "This block should not be reached"
end
end

expect { subject.call }.to raise_error(PaperTrail::Request::InvalidOption) do |e|
expect(e.message).to eq "Invalid option: invalid_option"
end
end
end

context "private options" do
it "raises an invalid option error" do
subject = proc do
described_class.with(transaction_id: "blah") do
raise "This block should not be reached"
end
end

expect { subject.call }.to raise_error(PaperTrail::Request::InvalidOption) do |e|
expect(e.message).to eq "Cannot set private option: transaction_id"
end
end
expect(described_class.whodunnit).to be_nil
end
end
end
Expand Down
47 changes: 47 additions & 0 deletions spec/paper_trail_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,51 @@
expect(described_class.version).to eq(described_class::VERSION::STRING)
end
end

describe "deprecated methods" do
before do
allow(ActiveSupport::Deprecation).to receive(:warn)
end

shared_examples "it delegates to request" do |method, args|
it do
arguments = args || [no_args]
allow(described_class.request).to receive(method)
described_class.public_send(method, *args)
expect(described_class.request).to have_received(method).with(*arguments)
expect(ActiveSupport::Deprecation).to have_received(:warn)
end
end

it_behaves_like "it delegates to request", :clear_transaction_id, nil
it_behaves_like "it delegates to request", :enabled_for_controller=, [true]
it_behaves_like "it delegates to request", :enabled_for_model, [Widget, true]
it_behaves_like "it delegates to request", :enabled_for_model?, [Widget]
it_behaves_like "it delegates to request", :whodunnit=, [:some_whodunnit]
it_behaves_like "it delegates to request", :whodunnit, nil
it_behaves_like "it delegates to request", :controller_info=, [:some_whodunnit]
it_behaves_like "it delegates to request", :controller_info, nil
it_behaves_like "it delegates to request", :transaction_id=, 123
it_behaves_like "it delegates to request", :transaction_id, nil

describe "whodunnit with block" do
it "delegates to request" do
allow(described_class.request).to receive(:with)
described_class.whodunnit(:some_whodunnit) { :some_block }
expect(ActiveSupport::Deprecation).to have_received(:warn)
expect(described_class.request).to have_received(:with) do |*args, &block|
expect(args).to eq([{ whodunnit: :some_whodunnit }])
expect(block.call).to eq :some_block
end
end
end

describe "whodunnit with invalid arguments" do
it "raises an error" do
expect { described_class.whodunnit(:some_whodunnit) }.to raise_error(ArgumentError) do |e|
expect(e.message).to eq "Invalid arguments"
end
end
end
end
end
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
end

RSpec.configure do |config|
config.example_status_persistence_file_path = ".rspec_results"

config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
Expand Down

0 comments on commit b8a9d81

Please sign in to comment.