1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
require "helper"
class StiTest < TestCaseClass
include FriendlyId::Test
include FriendlyId::Test::Shared::Core
include FriendlyId::Test::Shared::Slugged
class Journalist < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: [:slugged]
end
class Editorialist < Journalist
end
def model_class
Editorialist
end
test "friendly_id should accept a base and a hash with single table inheritance" do
abstract_klass = Class.new(ActiveRecord::Base) do
def self.table_exists?
false
end
extend FriendlyId
friendly_id :foo, use: :slugged, slug_column: :bar
end
klass = Class.new(abstract_klass)
assert klass < FriendlyId::Slugged
assert_equal :foo, klass.friendly_id_config.base
assert_equal :bar, klass.friendly_id_config.slug_column
end
test "the configuration's model_class should be the class, not the base_class" do
assert_equal model_class, model_class.friendly_id_config.model_class
end
test "friendly_id should accept a block with single table inheritance" do
abstract_klass = Class.new(ActiveRecord::Base) do
def self.table_exists?
false
end
extend FriendlyId
friendly_id :foo do |config|
config.use :slugged
config.base = :foo
config.slug_column = :bar
end
end
klass = Class.new(abstract_klass)
assert klass < FriendlyId::Slugged
assert_equal :foo, klass.friendly_id_config.base
assert_equal :bar, klass.friendly_id_config.slug_column
end
test "friendly_id slugs should not clash with each other" do
transaction do
journalist = model_class.base_class.create! name: "foo bar"
editoralist = model_class.create! name: "foo bar"
assert_equal "foo-bar", journalist.slug
assert_match(/foo-bar-.+/, editoralist.slug)
end
end
end
class StiTestWithHistory < StiTest
class Journalist < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: [:slugged, :history]
end
class Editorialist < Journalist
end
def model_class
Editorialist
end
end
class StiTestWithFinders < TestCaseClass
include FriendlyId::Test
class Journalist < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
end
class Editorialist < Journalist
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
end
def model_class
Editorialist
end
test "friendly_id slugs should be looked up from subclass with friendly" do
transaction do
editoralist = model_class.create! name: "foo bar"
assert_equal editoralist, model_class.friendly.find(editoralist.slug)
end
end
test "friendly_id slugs should be looked up from subclass" do
transaction do
editoralist = model_class.create! name: "foo bar"
assert_equal editoralist, model_class.find(editoralist.slug)
end
end
end
class StiTestSubClass < TestCaseClass
include FriendlyId::Test
class Journalist < ActiveRecord::Base
extend FriendlyId
end
class Editorialist < Journalist
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
end
def model_class
Editorialist
end
test "friendly_id slugs can be created and looked up from subclass" do
transaction do
editoralist = model_class.create! name: "foo bar"
assert_equal editoralist, model_class.find(editoralist.slug)
end
end
end
|