2017-12-11 04:05:11 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-05-30 04:58:26 +00:00
|
|
|
require "spec_helper"
|
2014-10-06 23:13:39 +00:00
|
|
|
|
2017-05-21 05:41:20 +00:00
|
|
|
RSpec.describe Gadget, type: :model do
|
2016-03-05 22:07:32 +00:00
|
|
|
let(:gadget) { Gadget.create!(name: "Wrench", brand: "Acme") }
|
2014-10-06 23:13:39 +00:00
|
|
|
|
2017-09-19 03:56:07 +00:00
|
|
|
it { is_expected.to be_versioned }
|
|
|
|
|
2016-02-16 03:32:40 +00:00
|
|
|
describe "updates", versioning: true do
|
2020-08-16 20:15:09 +00:00
|
|
|
it "generates a version for updates" do
|
2017-04-01 04:33:33 +00:00
|
|
|
expect { gadget.update_attribute(:name, "Hammer") }.to(change { gadget.versions.size }.by(1))
|
2014-10-06 23:13:39 +00:00
|
|
|
end
|
|
|
|
|
2021-08-30 02:22:39 +00:00
|
|
|
context "when ignored via symbol" do
|
2020-08-16 20:15:09 +00:00
|
|
|
it "doesn't generate a version" do
|
|
|
|
expect { gadget.update_attribute(:brand, "Picard") }.not_to(change { gadget.versions.size })
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-08-30 02:22:39 +00:00
|
|
|
context "when ignored via Hash" do
|
2020-08-16 20:15:09 +00:00
|
|
|
it "generates a version when the ignored attribute isn't true" do
|
|
|
|
expect { gadget.update_attribute(:color, "Blue") }.to(change { gadget.versions.size }.by(1))
|
|
|
|
expect(gadget.versions.last.changeset.keys).to eq %w[color updated_at]
|
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't generate a version when the ignored attribute is true" do
|
|
|
|
expect { gadget.update_attribute(:color, "Yellow") }.not_to(change { gadget.versions.size })
|
|
|
|
end
|
2014-10-06 23:13:39 +00:00
|
|
|
end
|
|
|
|
|
2017-04-01 05:50:13 +00:00
|
|
|
it "still generates a version when only the `updated_at` attribute is updated" do
|
2016-01-12 03:07:57 +00:00
|
|
|
# Plus 1 second because MySQL lacks sub-second resolution
|
2016-02-15 23:27:57 +00:00
|
|
|
expect {
|
2021-03-18 03:32:08 +00:00
|
|
|
gadget.update_attribute(:updated_at, Time.current + 1)
|
2017-04-01 04:33:33 +00:00
|
|
|
}.to(change { gadget.versions.size }.by(1))
|
2018-08-31 16:35:41 +00:00
|
|
|
expect(
|
2020-12-15 17:38:55 +00:00
|
|
|
YAML.load(gadget.versions.last.object_changes).keys
|
2018-08-31 16:35:41 +00:00
|
|
|
).to eq(["updated_at"])
|
2014-10-06 23:13:39 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|