Sha256: 9b31eec1d4a7f4137f1cf884ef2184b194665b91e983fceeb918b32c555003b2

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'models'

RSpec.describe "ActiveRecord::Base subclass with #actable" do
  subject { Product }

  let(:pen_attributes) { {name: 'pen', price: 0.8, color: 'red'} }
  let(:pen) { Pen.new pen_attributes }

  it "has a polymorphic belongs_to :actable relation" do
    association = subject.reflect_on_all_associations.find { |r| r.name == :actable }
    expect(association).to_not be_nil
    expect(association.macro).to eq(:belongs_to)
    expect(association).to be_polymorphic
  end

  describe "#actable?" do
    it "returns true for actable models" do
      expect(Product.actable?).to be true
    end

    it "returns false for none actable models" do
      expect(Pen.actable?).to be false
    end
  end

  describe ".specific" do
    it "return specific submodel" do
      pen.save
      expect(Product.find(pen.acting_as.id).specific).to eq(pen)
    end
  end

  it "deletes specific subclass on destroy" do
    pen.save
    pen.product.destroy
    expect { pen.reload }.to raise_error(ActiveRecord::RecordNotFound)
  end

  it "saves submodel on save" do
    pen.save
    product = pen.acting_as
    product.specific.color = 'blue'
    product.save
    pen.reload
    expect(pen.color).to eq('blue')
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_record-acts_as-1.0.0.rc spec/actable_spec.rb