Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

157 lines (132 sloc) 5.692 kb
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 friendly_id method value has changed" do
with_instance_of model_class do |record|
record.name = "Changed Value"
record.save!
assert_equal "changed-value", record.slug
end
end
test "should increment the slug sequence for duplicate friendly ids" do
with_instance_of model_class do |record|
record2 = model_class.create! :name => record.name
assert record2.friendly_id.match(/2\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 increment sequence on save" do
with_instance_of model_class do |record|
record2 = model_class.create! :name => record.name
record2.active = !record2.active
record2.save!
assert record2.friendly_id.match(/2\z/)
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!
assert_nil record.slug
record.save!
refute_nil record.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_attributes my_model_class.friendly_id_config.slug_column => nil
record = my_model_class.find(record.id)
record.class.validate Proc.new {errors[: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").find record.friendly_id
end
end
end
test "should be findable by friendly id" do
with_instance_of(model_class) {|record| assert model_class.find record.friendly_id}
end
test "should exist? by friendly id" do
with_instance_of(model_class) do |record|
assert model_class.exists? record.id
assert model_class.exists? record.friendly_id
assert model_class.exists?({:id => record.id})
assert model_class.exists?(['id = ?', record.id])
assert !model_class.exists?(record.friendly_id + "-hello")
assert !model_class.exists?(0)
end
end
test "should be findable by id as integer" do
with_instance_of(model_class) {|record| assert model_class.find record.id.to_i}
end
test "should be findable by id as string" do
with_instance_of(model_class) {|record| assert model_class.find record.id.to_s}
end
test "should be findable by numeric friendly_id" do
with_instance_of(model_class, :name => "206") {|record| assert model_class.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
test "should be findable by themselves" do
with_instance_of(model_class) {|record| assert_equal record, model_class.find(record)}
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_attributes! :active => false
assert model_class.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.find(record.friendly_id).readonly?}
end
test "failing finds with unfriendly_id should raise errors normally" do
assert_raises(ActiveRecord::RecordNotFound) {model_class.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 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_equal nil, model_class.new.to_param
end
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.