Permalink
Fetching contributors…
Cannot retrieve contributors at this time
85 lines (70 sloc) 2.6 KB
require "helper"
class Novelist < ActiveRecord::Base
extend FriendlyId
friendly_id :name, :use => :slugged
end
class Novel < ActiveRecord::Base
extend FriendlyId
belongs_to :novelist
belongs_to :publisher
friendly_id :name, :use => :scoped, :scope => [:publisher, :novelist]
def should_generate_new_friendly_id?
new_record? || super
end
end
class Publisher < ActiveRecord::Base
has_many :novels
end
class ScopedTest < TestCaseClass
include FriendlyId::Test
include FriendlyId::Test::Shared::Core
def model_class
Novel
end
test "should detect scope column from belongs_to relation" do
assert_equal ["publisher_id", "novelist_id"], Novel.friendly_id_config.scope_columns
end
test "should detect scope column from explicit column name" do
model_class = Class.new(ActiveRecord::Base) do
self.abstract_class = true
extend FriendlyId
friendly_id :empty, :use => :scoped, :scope => :dummy
end
assert_equal ["dummy"], model_class.friendly_id_config.scope_columns
end
test "should allow duplicate slugs outside scope" do
transaction do
novel1 = Novel.create! :name => "a", :novelist => Novelist.create!(:name => "a")
novel2 = Novel.create! :name => "a", :novelist => Novelist.create!(:name => "b")
assert_equal novel1.friendly_id, novel2.friendly_id
end
end
test "should not allow duplicate slugs inside scope" do
with_instance_of Novelist do |novelist|
novel1 = Novel.create! :name => "a", :novelist => novelist
novel2 = Novel.create! :name => "a", :novelist => novelist
assert novel1.friendly_id != novel2.friendly_id
end
end
test "should apply scope with multiple columns" do
transaction do
novelist = Novelist.create! :name => "a"
publisher = Publisher.create! :name => "b"
novel1 = Novel.create! :name => "c", :novelist => novelist, :publisher => publisher
novel2 = Novel.create! :name => "c", :novelist => novelist, :publisher => Publisher.create(:name => "d")
novel3 = Novel.create! :name => "c", :novelist => Novelist.create(:name => "e"), :publisher => publisher
novel4 = Novel.create! :name => "c", :novelist => novelist, :publisher => publisher
assert_equal novel1.friendly_id, novel2.friendly_id
assert_equal novel2.friendly_id, novel3.friendly_id
assert novel3.friendly_id != novel4.friendly_id
end
end
test 'should allow a record to reuse its own slug' do
with_instance_of(model_class) do |record|
old_id = record.friendly_id
record.slug = nil
record.save!
assert_equal old_id, record.friendly_id
end
end
end