paper-trail-gem--paper_trail/spec/models/gadget_spec.rb

69 lines
2.2 KiB
Ruby
Raw Normal View History

require "rails_helper"
2016-02-16 03:32:40 +00:00
describe Gadget, type: :model do
it { is_expected.to be_versioned }
let(:gadget) { Gadget.create!(name: "Wrench", brand: "Acme") }
2016-02-16 03:32:40 +00:00
describe "updates", versioning: true do
2017-04-01 05:50:13 +00:00
it "generates a version for updates to `name` attribute" do
expect { gadget.update_attribute(:name, "Hammer") }.to(change { gadget.versions.size }.by(1))
end
2017-04-01 05:50:13 +00:00
it "ignores for updates to `brand` attribute" do
expect { gadget.update_attribute(:brand, "Stanley") }.to_not(change { gadget.versions.size })
end
2017-04-01 05:50:13 +00:00
it "still generates a version when only the `updated_at` attribute is updated" do
# Plus 1 second because MySQL lacks sub-second resolution
2016-02-15 23:27:57 +00:00
expect {
gadget.update_attribute(:updated_at, Time.now + 1)
}.to(change { gadget.versions.size }.by(1))
end
end
describe "Methods" do
2016-02-16 03:32:40 +00:00
describe "Instance", versioning: true do
describe "private" do
2016-06-27 07:02:33 +00:00
describe "#changed_notably?" do
2016-02-16 03:32:40 +00:00
subject { Gadget.new(created_at: Time.now) }
context "create events" do
it { expect(subject.paper_trail.changed_notably?).to be true }
end
context "update events" do
before { subject.save! }
context "without update timestamps" do
2017-04-01 05:50:13 +00:00
it "only acknowledges non-ignored attrs" do
subject.name = "Wrench"
expect(subject.paper_trail.changed_notably?).to be true
end
2017-04-01 05:50:13 +00:00
it "does not acknowledge ignored attr (brand)" do
subject.brand = "Acme"
expect(subject.paper_trail.changed_notably?).to be false
end
end
context "with update timestamps" do
2017-04-01 05:50:13 +00:00
it "only acknowledges non-ignored attrs" do
2016-03-05 22:23:10 +00:00
subject.name = "Wrench"
subject.updated_at = Time.now
expect(subject.paper_trail.changed_notably?).to be true
end
2017-04-01 05:50:13 +00:00
it "does not acknowledge ignored attrs and timestamps only" do
2016-03-05 22:23:10 +00:00
subject.brand = "Acme"
subject.updated_at = Time.now
expect(subject.paper_trail.changed_notably?).to be false
end
end
end
end
end
end
end
end