1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
# frozen_string_literal: true
require "spec_helper"
module PaperTrail
::RSpec.describe(Request, versioning: true) do
describe ".enabled_for_model?" do
it "returns true" do
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(true)
end
end
describe ".disable_model" do
after do
PaperTrail.request.enable_model(Widget)
end
it "sets enabled_for_model? to false" do
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(true)
PaperTrail.request.disable_model(Widget)
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(false)
end
end
describe ".enabled_for_model" do
after do
PaperTrail.request.enable_model(Widget)
end
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
end
describe ".enabled?" do
it "returns true" do
expect(PaperTrail.request.enabled?).to eq(true)
end
end
describe ".enabled=" do
after do
PaperTrail.request.enabled = true
end
it "sets enabled? to true" do
PaperTrail.request.enabled = true
expect(PaperTrail.request.enabled?).to eq(true)
PaperTrail.request.enabled = false
expect(PaperTrail.request.enabled?).to eq(false)
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
after do
PaperTrail.request.controller_info = {}
end
it "sets controller_info" do
PaperTrail.request.controller_info = { foo: :bar }
expect(PaperTrail.request.controller_info).to eq(foo: :bar)
end
end
describe ".enable_model" do
after do
PaperTrail.request.enable_model(Widget)
end
it "sets enabled_for_model? to true" do
PaperTrail.request.disable_model(Widget)
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(false)
PaperTrail.request.enable_model(Widget)
expect(PaperTrail.request.enabled_for_model?(Widget)).to eq(true)
end
end
describe ".whodunnit" do
context "when set to a proc" do
it "evaluates the proc each time a version is made" do
call_count = 0
described_class.whodunnit = proc { call_count += 1 }
expect(described_class.whodunnit).to eq(1)
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
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
end
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
end
end
end
end
|