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

46 lines
1.8 KiB
Ruby

# frozen_string_literal: true
require "spec_helper"
RSpec.describe Pet, type: :model, versioning: true do
it "baseline test setup" do
expect(Pet.new).to be_versioned
end
it "can be reified" do
person = Person.create(name: "Frank")
dog = Dog.create(name: "Snoopy")
cat = Cat.create(name: "Garfield")
person.pets << Pet.create(animal: dog)
person.pets << Pet.create(animal: cat)
person.update_attributes(name: "Steve")
dog.update_attributes(name: "Beethoven")
cat.update_attributes(name: "Sylvester")
person.update_attributes(name: "Peter")
expect(person.reload.versions.length).to(eq(3))
second_version = person.reload.versions.second.reify(has_many: true)
expect(second_version.pets.length).to(eq(2))
expect(second_version.animals.length).to(eq(2))
expect(second_version.animals.map { |a| a.class.name }).to(eq(%w[Dog Cat]))
expect(second_version.pets.map { |p| p.animal.class.name }).to(eq(%w[Dog Cat]))
expect(second_version.animals.first.name).to(eq("Snoopy"))
expect(second_version.dogs.first.name).to(eq("Snoopy"))
expect(second_version.animals.second.name).to(eq("Garfield"))
expect(second_version.cats.first.name).to(eq("Garfield"))
last_version = person.reload.versions.last.reify(has_many: true)
expect(last_version.pets.length).to(eq(2))
expect(last_version.animals.length).to(eq(2))
expect(last_version.animals.map { |a| a.class.name }).to(eq(%w[Dog Cat]))
expect(last_version.pets.map { |p| p.animal.class.name }).to(eq(%w[Dog Cat]))
expect(last_version.animals.first.name).to(eq("Beethoven"))
expect(last_version.dogs.first.name).to(eq("Beethoven"))
expect(last_version.animals.second.name).to(eq("Sylvester"))
expect(last_version.cats.first.name).to(eq("Sylvester"))
end
end