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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
module FriendlyId
module Test
module Shared
module Slugged
test "configuration should have a sequence_separator" do
assert !model_class.friendly_id_config.sequence_separator.empty?
end
test "should make a new slug if the slug has been set to nil changed" do
with_instance_of model_class do |record|
record.name = "Changed Value"
record.slug = nil
record.save!
assert_equal "changed-value", record.slug
end
end
test "should add a UUID for duplicate friendly ids" do
with_instance_of model_class do |record|
record2 = model_class.create! name: record.name
assert record2.friendly_id.match(/([0-9a-z]+-){4}[0-9a-z]+\z/)
end
end
test "should not add slug sequence on update after other conflicting slugs were added" do
with_instance_of model_class do |record|
old = record.friendly_id
model_class.create! name: record.name
record.save!
record.reload
assert_equal old, record.to_param
end
end
test "should not change the sequence on save" do
with_instance_of model_class do |record|
record2 = model_class.create! name: record.name
friendly_id = record2.friendly_id
record2.active = !record2.active
record2.save!
assert_equal friendly_id, record2.reload.friendly_id
end
end
test "should create slug on save if the slug is nil" do
with_instance_of model_class do |record|
record.slug = nil
record.save!
refute_nil record.slug
end
end
test "should set the slug to nil on dup" do
with_instance_of model_class do |record|
record2 = record.dup
assert_nil record2.slug
end
end
test "when validations block save, to_param should return friendly_id rather than nil" do
my_model_class = Class.new(model_class)
self.class.const_set("Foo", my_model_class)
with_instance_of my_model_class do |record|
record.update my_model_class.friendly_id_config.slug_column => nil
record = my_model_class.friendly.find(record.id)
record.class.validate proc { errors.add(:name, "FAIL") }
record.save
assert_equal record.to_param, record.friendly_id
end
end
end
module Core
test "finds should respect conditions" do
with_instance_of(model_class) do |record|
assert_raises(ActiveRecord::RecordNotFound) do
model_class.where("1 = 2").friendly.find record.friendly_id
end
assert_raises(ActiveRecord::RecordNotFound) do
model_class.where("1 = 2").friendly.find record.id
end
end
end
test "should be findable by friendly id" do
with_instance_of(model_class) { |record| assert model_class.friendly.find record.friendly_id }
end
test "should exist? by friendly id" do
with_instance_of(model_class) do |record|
assert model_class.friendly.exists? record.id
assert model_class.friendly.exists? record.id.to_s
assert model_class.friendly.exists? record.friendly_id
assert model_class.friendly.exists?({id: record.id})
assert model_class.friendly.exists?(["id = ?", record.id])
assert !model_class.friendly.exists?(record.friendly_id + "-hello")
assert !model_class.friendly.exists?(0)
end
end
test "should be findable by id as integer" do
with_instance_of(model_class) { |record| assert model_class.friendly.find record.id.to_i }
end
test "should be findable by id as string" do
with_instance_of(model_class) { |record| assert model_class.friendly.find record.id.to_s }
end
test "should treat numeric part of string as an integer id" do
with_instance_of(model_class) do |record|
assert_raises(ActiveRecord::RecordNotFound) do
model_class.friendly.find "#{record.id}-foo"
end
end
end
test "should be findable by numeric friendly_id" do
with_instance_of(model_class, name: "206") { |record| assert model_class.friendly.find record.friendly_id }
end
test "to_param should return the friendly_id" do
with_instance_of(model_class) { |record| assert_equal record.friendly_id, record.to_param }
end
if ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR < 2
test "should be findable by themselves" do
with_instance_of(model_class) { |record| assert_equal record, model_class.friendly.find(record) }
end
end
test "updating record's other values should not change the friendly_id" do
with_instance_of model_class do |record|
old = record.friendly_id
record.update! active: false
assert model_class.friendly.find old
end
end
test "instances found by a single id should not be read-only" do
with_instance_of(model_class) { |record| assert !model_class.friendly.find(record.friendly_id).readonly? }
end
test "failing finds with unfriendly_id should raise errors normally" do
assert_raises(ActiveRecord::RecordNotFound) { model_class.friendly.find 0 }
end
test "should return numeric id if the friendly_id is nil" do
with_instance_of(model_class) do |record|
record.expects(:friendly_id).returns(nil)
assert_equal record.id.to_s, record.to_param
end
end
test "should return numeric id if the friendly_id is an empty string" do
with_instance_of(model_class) do |record|
record.expects(:friendly_id).returns("")
assert_equal record.id.to_s, record.to_param
end
end
test "should return the friendly_id as a string" do
with_instance_of(model_class) do |record|
record.expects(:friendly_id).returns(5)
assert_equal "5", record.to_param
end
end
test "should return numeric id if the friendly_id is blank" do
with_instance_of(model_class) do |record|
record.expects(:friendly_id).returns(" ")
assert_equal record.id.to_s, record.to_param
end
end
test "should return nil for to_param with a new record" do
assert_nil model_class.new.to_param
end
end
end
end
end
|