require "rails_helper"

describe Animal, type: :model do
  it { is_expected.to be_versioned }

  describe "STI", versioning: true do
    it { expect(Animal.inheritance_column).to eq("species") }

    describe "updates to the `inheritance_column`" do
      subject { Cat.create!(name: "Leo") }

      it "should be allowed" do
        subject.update_attributes(name: "Spike", species: "Dog")
        dog = Animal.find(subject.id)
        expect(dog).to be_instance_of(Dog)
      end
    end

    context "with callback-methods" do
      context "when only has_paper_trail set in super class" do
        let(:callback_cat) { Cat.create(name: "Markus") }

        it "trails all events" do
          callback_cat.update_attributes(name: "Billie")
          callback_cat.destroy
          expect(callback_cat.versions.collect(&:event)).to eq %w(create update destroy)
        end

        it "does not break reify" do
          callback_cat.destroy
          expect { callback_cat.versions.last.reify }.not_to raise_error
        end
      end
    end
  end
end
