Making Active Record base_test.rb thinner by moving tests
to relevant files. Number of assertions before refactoring: 2391 tests, 7579 assertions, 0 failures, 0 errors Number of assertions after refactoring: 2391 tests, 7579 assertions, 0 failures, 0 errors Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
parent
4dc2521028
commit
807239f5a1
|
@ -32,6 +32,28 @@ class AssociationsTest < ActiveRecord::TestCase
|
|||
assert_equal 1, liquids[0].molecules.length
|
||||
end
|
||||
|
||||
def test_clear_association_cache_stored
|
||||
firm = Firm.find(1)
|
||||
assert_kind_of Firm, firm
|
||||
|
||||
firm.clear_association_cache
|
||||
assert_equal Firm.find(1).clients.collect{ |x| x.name }.sort, firm.clients.collect{ |x| x.name }.sort
|
||||
end
|
||||
|
||||
def test_clear_association_cache_new_record
|
||||
firm = Firm.new
|
||||
client_stored = Client.find(3)
|
||||
client_new = Client.new
|
||||
client_new.name = "The Joneses"
|
||||
clients = [ client_stored, client_new ]
|
||||
|
||||
firm.clients << clients
|
||||
assert_equal clients.map(&:name).to_set, firm.clients.map(&:name).to_set
|
||||
|
||||
firm.clear_association_cache
|
||||
assert_equal clients.map(&:name).to_set, firm.clients.map(&:name).to_set
|
||||
end
|
||||
|
||||
def test_loading_the_association_target_should_keep_child_records_marked_for_destruction
|
||||
ship = Ship.create!(:name => "The good ship Dollypop")
|
||||
part = ship.parts.create!(:name => "Mast")
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
require "cases/helper"
|
||||
require 'models/topic'
|
||||
require 'models/minimalistic'
|
||||
require 'models/developer'
|
||||
require 'models/auto_id'
|
||||
require 'models/computer'
|
||||
require 'models/topic'
|
||||
require 'models/company'
|
||||
require 'models/category'
|
||||
require 'models/reply'
|
||||
|
||||
class AttributeMethodsTest < ActiveRecord::TestCase
|
||||
fixtures :topics
|
||||
fixtures :topics, :developers, :companies, :computers
|
||||
|
||||
def setup
|
||||
@old_matchers = ActiveRecord::Base.send(:attribute_method_matchers).dup
|
||||
|
@ -16,6 +22,274 @@ class AttributeMethodsTest < ActiveRecord::TestCase
|
|||
ActiveRecord::Base.send(:attribute_method_matchers).concat(@old_matchers)
|
||||
end
|
||||
|
||||
def test_attribute_present
|
||||
t = Topic.new
|
||||
t.title = "hello there!"
|
||||
t.written_on = Time.now
|
||||
assert t.attribute_present?("title")
|
||||
assert t.attribute_present?("written_on")
|
||||
assert !t.attribute_present?("content")
|
||||
end
|
||||
|
||||
def test_attribute_keys_on_new_instance
|
||||
t = Topic.new
|
||||
assert_equal nil, t.title, "The topics table has a title column, so it should be nil"
|
||||
assert_raise(NoMethodError) { t.title2 }
|
||||
end
|
||||
|
||||
def test_boolean_attributes
|
||||
assert ! Topic.find(1).approved?
|
||||
assert Topic.find(2).approved?
|
||||
end
|
||||
|
||||
def test_set_attributes
|
||||
topic = Topic.find(1)
|
||||
topic.attributes = { "title" => "Budget", "author_name" => "Jason" }
|
||||
topic.save
|
||||
assert_equal("Budget", topic.title)
|
||||
assert_equal("Jason", topic.author_name)
|
||||
assert_equal(topics(:first).author_email_address, Topic.find(1).author_email_address)
|
||||
end
|
||||
|
||||
def test_set_attributes_without_hash
|
||||
topic = Topic.new
|
||||
assert_nothing_raised { topic.attributes = '' }
|
||||
end
|
||||
|
||||
def test_integers_as_nil
|
||||
test = AutoId.create('value' => '')
|
||||
assert_nil AutoId.find(test.id).value
|
||||
end
|
||||
|
||||
def test_set_attributes_with_block
|
||||
topic = Topic.new do |t|
|
||||
t.title = "Budget"
|
||||
t.author_name = "Jason"
|
||||
end
|
||||
|
||||
assert_equal("Budget", topic.title)
|
||||
assert_equal("Jason", topic.author_name)
|
||||
end
|
||||
|
||||
def test_respond_to?
|
||||
topic = Topic.find(1)
|
||||
assert_respond_to topic, "title"
|
||||
assert_respond_to topic, "title?"
|
||||
assert_respond_to topic, "title="
|
||||
assert_respond_to topic, :title
|
||||
assert_respond_to topic, :title?
|
||||
assert_respond_to topic, :title=
|
||||
assert_respond_to topic, "author_name"
|
||||
assert_respond_to topic, "attribute_names"
|
||||
assert !topic.respond_to?("nothingness")
|
||||
assert !topic.respond_to?(:nothingness)
|
||||
end
|
||||
|
||||
def test_array_content
|
||||
topic = Topic.new
|
||||
topic.content = %w( one two three )
|
||||
topic.save
|
||||
|
||||
assert_equal(%w( one two three ), Topic.find(topic.id).content)
|
||||
end
|
||||
|
||||
def test_read_attributes_before_type_cast
|
||||
category = Category.new({:name=>"Test categoty", :type => nil})
|
||||
category_attrs = {"name"=>"Test categoty", "type" => nil, "categorizations_count" => nil}
|
||||
assert_equal category_attrs , category.attributes_before_type_cast
|
||||
end
|
||||
|
||||
if current_adapter?(:MysqlAdapter)
|
||||
def test_read_attributes_before_type_cast_on_boolean
|
||||
bool = Booleantest.create({ "value" => false })
|
||||
assert_equal "0", bool.reload.attributes_before_type_cast["value"]
|
||||
end
|
||||
end
|
||||
|
||||
def test_read_attributes_before_type_cast_on_datetime
|
||||
developer = Developer.find(:first)
|
||||
# Oracle adapter returns Time before type cast
|
||||
unless current_adapter?(:OracleAdapter)
|
||||
assert_equal developer.created_at.to_s(:db) , developer.attributes_before_type_cast["created_at"]
|
||||
else
|
||||
assert_equal developer.created_at.to_s(:db) , developer.attributes_before_type_cast["created_at"].to_s(:db)
|
||||
|
||||
developer.created_at = "345643456"
|
||||
assert_equal developer.created_at_before_type_cast, "345643456"
|
||||
assert_equal developer.created_at, nil
|
||||
|
||||
developer.created_at = "2010-03-21T21:23:32+01:00"
|
||||
assert_equal developer.created_at_before_type_cast, "2010-03-21T21:23:32+01:00"
|
||||
assert_equal developer.created_at, Time.parse("2010-03-21T21:23:32+01:00")
|
||||
end
|
||||
end
|
||||
|
||||
def test_hash_content
|
||||
topic = Topic.new
|
||||
topic.content = { "one" => 1, "two" => 2 }
|
||||
topic.save
|
||||
|
||||
assert_equal 2, Topic.find(topic.id).content["two"]
|
||||
|
||||
topic.content_will_change!
|
||||
topic.content["three"] = 3
|
||||
topic.save
|
||||
|
||||
assert_equal 3, Topic.find(topic.id).content["three"]
|
||||
end
|
||||
|
||||
def test_update_array_content
|
||||
topic = Topic.new
|
||||
topic.content = %w( one two three )
|
||||
|
||||
topic.content.push "four"
|
||||
assert_equal(%w( one two three four ), topic.content)
|
||||
|
||||
topic.save
|
||||
|
||||
topic = Topic.find(topic.id)
|
||||
topic.content << "five"
|
||||
assert_equal(%w( one two three four five ), topic.content)
|
||||
end
|
||||
|
||||
def test_case_sensitive_attributes_hash
|
||||
# DB2 is not case-sensitive
|
||||
return true if current_adapter?(:DB2Adapter)
|
||||
|
||||
assert_equal @loaded_fixtures['computers']['workstation'].to_hash, Computer.find(:first).attributes
|
||||
end
|
||||
|
||||
def test_hashes_not_mangled
|
||||
new_topic = { :title => "New Topic" }
|
||||
new_topic_values = { :title => "AnotherTopic" }
|
||||
|
||||
topic = Topic.new(new_topic)
|
||||
assert_equal new_topic[:title], topic.title
|
||||
|
||||
topic.attributes= new_topic_values
|
||||
assert_equal new_topic_values[:title], topic.title
|
||||
end
|
||||
|
||||
def test_create_through_factory
|
||||
topic = Topic.create("title" => "New Topic")
|
||||
topicReloaded = Topic.find(topic.id)
|
||||
assert_equal(topic, topicReloaded)
|
||||
end
|
||||
|
||||
def test_write_attribute
|
||||
topic = Topic.new
|
||||
topic.send(:write_attribute, :title, "Still another topic")
|
||||
assert_equal "Still another topic", topic.title
|
||||
|
||||
topic.send(:write_attribute, "title", "Still another topic: part 2")
|
||||
assert_equal "Still another topic: part 2", topic.title
|
||||
end
|
||||
|
||||
def test_read_attribute
|
||||
topic = Topic.new
|
||||
topic.title = "Don't change the topic"
|
||||
assert_equal "Don't change the topic", topic.send(:read_attribute, "title")
|
||||
assert_equal "Don't change the topic", topic["title"]
|
||||
|
||||
assert_equal "Don't change the topic", topic.send(:read_attribute, :title)
|
||||
assert_equal "Don't change the topic", topic[:title]
|
||||
end
|
||||
|
||||
def test_read_attribute_when_false
|
||||
topic = topics(:first)
|
||||
topic.approved = false
|
||||
assert !topic.approved?, "approved should be false"
|
||||
topic.approved = "false"
|
||||
assert !topic.approved?, "approved should be false"
|
||||
end
|
||||
|
||||
def test_read_attribute_when_true
|
||||
topic = topics(:first)
|
||||
topic.approved = true
|
||||
assert topic.approved?, "approved should be true"
|
||||
topic.approved = "true"
|
||||
assert topic.approved?, "approved should be true"
|
||||
end
|
||||
|
||||
def test_read_write_boolean_attribute
|
||||
topic = Topic.new
|
||||
# puts ""
|
||||
# puts "New Topic"
|
||||
# puts topic.inspect
|
||||
topic.approved = "false"
|
||||
# puts "Expecting false"
|
||||
# puts topic.inspect
|
||||
assert !topic.approved?, "approved should be false"
|
||||
topic.approved = "false"
|
||||
# puts "Expecting false"
|
||||
# puts topic.inspect
|
||||
assert !topic.approved?, "approved should be false"
|
||||
topic.approved = "true"
|
||||
# puts "Expecting true"
|
||||
# puts topic.inspect
|
||||
assert topic.approved?, "approved should be true"
|
||||
topic.approved = "true"
|
||||
# puts "Expecting true"
|
||||
# puts topic.inspect
|
||||
assert topic.approved?, "approved should be true"
|
||||
# puts ""
|
||||
end
|
||||
|
||||
def test_query_attribute_string
|
||||
[nil, "", " "].each do |value|
|
||||
assert_equal false, Topic.new(:author_name => value).author_name?
|
||||
end
|
||||
|
||||
assert_equal true, Topic.new(:author_name => "Name").author_name?
|
||||
end
|
||||
|
||||
def test_query_attribute_number
|
||||
[nil, 0, "0"].each do |value|
|
||||
assert_equal false, Developer.new(:salary => value).salary?
|
||||
end
|
||||
|
||||
assert_equal true, Developer.new(:salary => 1).salary?
|
||||
assert_equal true, Developer.new(:salary => "1").salary?
|
||||
end
|
||||
|
||||
def test_query_attribute_boolean
|
||||
[nil, "", false, "false", "f", 0].each do |value|
|
||||
assert_equal false, Topic.new(:approved => value).approved?
|
||||
end
|
||||
|
||||
[true, "true", "1", 1].each do |value|
|
||||
assert_equal true, Topic.new(:approved => value).approved?
|
||||
end
|
||||
end
|
||||
|
||||
def test_query_attribute_with_custom_fields
|
||||
object = Company.find_by_sql(<<-SQL).first
|
||||
SELECT c1.*, c2.ruby_type as string_value, c2.rating as int_value
|
||||
FROM companies c1, companies c2
|
||||
WHERE c1.firm_id = c2.id
|
||||
AND c1.id = 2
|
||||
SQL
|
||||
|
||||
assert_equal "Firm", object.string_value
|
||||
assert object.string_value?
|
||||
|
||||
object.string_value = " "
|
||||
assert !object.string_value?
|
||||
|
||||
assert_equal 1, object.int_value.to_i
|
||||
assert object.int_value?
|
||||
|
||||
object.int_value = "0"
|
||||
assert !object.int_value?
|
||||
end
|
||||
|
||||
def test_non_attribute_access_and_assignment
|
||||
topic = Topic.new
|
||||
assert !topic.respond_to?("mumbo")
|
||||
assert_raise(NoMethodError) { topic.mumbo }
|
||||
assert_raise(NoMethodError) { topic.mumbo = 5 }
|
||||
end
|
||||
|
||||
def test_undeclared_attribute_method_does_not_affect_respond_to_and_method_missing
|
||||
topic = @target.new(:title => 'Budget')
|
||||
assert topic.respond_to?('title')
|
||||
|
|
|
@ -52,254 +52,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
assert Topic.table_exists?
|
||||
end
|
||||
|
||||
def test_set_attributes
|
||||
topic = Topic.find(1)
|
||||
topic.attributes = { "title" => "Budget", "author_name" => "Jason" }
|
||||
topic.save
|
||||
assert_equal("Budget", topic.title)
|
||||
assert_equal("Jason", topic.author_name)
|
||||
assert_equal(topics(:first).author_email_address, Topic.find(1).author_email_address)
|
||||
end
|
||||
|
||||
def test_set_attributes_without_hash
|
||||
topic = Topic.new
|
||||
assert_nothing_raised { topic.attributes = '' }
|
||||
end
|
||||
|
||||
def test_integers_as_nil
|
||||
test = AutoId.create('value' => '')
|
||||
assert_nil AutoId.find(test.id).value
|
||||
end
|
||||
|
||||
def test_set_attributes_with_block
|
||||
topic = Topic.new do |t|
|
||||
t.title = "Budget"
|
||||
t.author_name = "Jason"
|
||||
end
|
||||
|
||||
assert_equal("Budget", topic.title)
|
||||
assert_equal("Jason", topic.author_name)
|
||||
end
|
||||
|
||||
def test_respond_to?
|
||||
topic = Topic.find(1)
|
||||
assert_respond_to topic, "title"
|
||||
assert_respond_to topic, "title?"
|
||||
assert_respond_to topic, "title="
|
||||
assert_respond_to topic, :title
|
||||
assert_respond_to topic, :title?
|
||||
assert_respond_to topic, :title=
|
||||
assert_respond_to topic, "author_name"
|
||||
assert_respond_to topic, "attribute_names"
|
||||
assert !topic.respond_to?("nothingness")
|
||||
assert !topic.respond_to?(:nothingness)
|
||||
end
|
||||
|
||||
def test_array_content
|
||||
topic = Topic.new
|
||||
topic.content = %w( one two three )
|
||||
topic.save
|
||||
|
||||
assert_equal(%w( one two three ), Topic.find(topic.id).content)
|
||||
end
|
||||
|
||||
def test_read_attributes_before_type_cast
|
||||
category = Category.new({:name=>"Test categoty", :type => nil})
|
||||
category_attrs = {"name"=>"Test categoty", "type" => nil, "categorizations_count" => nil}
|
||||
assert_equal category_attrs , category.attributes_before_type_cast
|
||||
end
|
||||
|
||||
if current_adapter?(:MysqlAdapter)
|
||||
def test_read_attributes_before_type_cast_on_boolean
|
||||
bool = Booleantest.create({ "value" => false })
|
||||
assert_equal "0", bool.reload.attributes_before_type_cast["value"]
|
||||
end
|
||||
end
|
||||
|
||||
def test_read_attributes_before_type_cast_on_datetime
|
||||
developer = Developer.find(:first)
|
||||
# Oracle adapter returns Time before type cast
|
||||
unless current_adapter?(:OracleAdapter)
|
||||
assert_equal developer.created_at.to_s(:db) , developer.attributes_before_type_cast["created_at"]
|
||||
else
|
||||
assert_equal developer.created_at.to_s(:db) , developer.attributes_before_type_cast["created_at"].to_s(:db)
|
||||
|
||||
developer.created_at = "345643456"
|
||||
assert_equal developer.created_at_before_type_cast, "345643456"
|
||||
assert_equal developer.created_at, nil
|
||||
|
||||
developer.created_at = "2010-03-21T21:23:32+01:00"
|
||||
assert_equal developer.created_at_before_type_cast, "2010-03-21T21:23:32+01:00"
|
||||
assert_equal developer.created_at, Time.parse("2010-03-21T21:23:32+01:00")
|
||||
end
|
||||
end
|
||||
|
||||
def test_hash_content
|
||||
topic = Topic.new
|
||||
topic.content = { "one" => 1, "two" => 2 }
|
||||
topic.save
|
||||
|
||||
assert_equal 2, Topic.find(topic.id).content["two"]
|
||||
|
||||
topic.content_will_change!
|
||||
topic.content["three"] = 3
|
||||
topic.save
|
||||
|
||||
assert_equal 3, Topic.find(topic.id).content["three"]
|
||||
end
|
||||
|
||||
def test_update_array_content
|
||||
topic = Topic.new
|
||||
topic.content = %w( one two three )
|
||||
|
||||
topic.content.push "four"
|
||||
assert_equal(%w( one two three four ), topic.content)
|
||||
|
||||
topic.save
|
||||
|
||||
topic = Topic.find(topic.id)
|
||||
topic.content << "five"
|
||||
assert_equal(%w( one two three four five ), topic.content)
|
||||
end
|
||||
|
||||
def test_case_sensitive_attributes_hash
|
||||
# DB2 is not case-sensitive
|
||||
return true if current_adapter?(:DB2Adapter)
|
||||
|
||||
assert_equal @loaded_fixtures['computers']['workstation'].to_hash, Computer.find(:first).attributes
|
||||
end
|
||||
|
||||
def test_hashes_not_mangled
|
||||
new_topic = { :title => "New Topic" }
|
||||
new_topic_values = { :title => "AnotherTopic" }
|
||||
|
||||
topic = Topic.new(new_topic)
|
||||
assert_equal new_topic[:title], topic.title
|
||||
|
||||
topic.attributes= new_topic_values
|
||||
assert_equal new_topic_values[:title], topic.title
|
||||
end
|
||||
|
||||
def test_create_through_factory
|
||||
topic = Topic.create("title" => "New Topic")
|
||||
topicReloaded = Topic.find(topic.id)
|
||||
assert_equal(topic, topicReloaded)
|
||||
end
|
||||
|
||||
def test_write_attribute
|
||||
topic = Topic.new
|
||||
topic.send(:write_attribute, :title, "Still another topic")
|
||||
assert_equal "Still another topic", topic.title
|
||||
|
||||
topic.send(:write_attribute, "title", "Still another topic: part 2")
|
||||
assert_equal "Still another topic: part 2", topic.title
|
||||
end
|
||||
|
||||
def test_read_attribute
|
||||
topic = Topic.new
|
||||
topic.title = "Don't change the topic"
|
||||
assert_equal "Don't change the topic", topic.send(:read_attribute, "title")
|
||||
assert_equal "Don't change the topic", topic["title"]
|
||||
|
||||
assert_equal "Don't change the topic", topic.send(:read_attribute, :title)
|
||||
assert_equal "Don't change the topic", topic[:title]
|
||||
end
|
||||
|
||||
def test_read_attribute_when_false
|
||||
topic = topics(:first)
|
||||
topic.approved = false
|
||||
assert !topic.approved?, "approved should be false"
|
||||
topic.approved = "false"
|
||||
assert !topic.approved?, "approved should be false"
|
||||
end
|
||||
|
||||
def test_read_attribute_when_true
|
||||
topic = topics(:first)
|
||||
topic.approved = true
|
||||
assert topic.approved?, "approved should be true"
|
||||
topic.approved = "true"
|
||||
assert topic.approved?, "approved should be true"
|
||||
end
|
||||
|
||||
def test_read_write_boolean_attribute
|
||||
topic = Topic.new
|
||||
# puts ""
|
||||
# puts "New Topic"
|
||||
# puts topic.inspect
|
||||
topic.approved = "false"
|
||||
# puts "Expecting false"
|
||||
# puts topic.inspect
|
||||
assert !topic.approved?, "approved should be false"
|
||||
topic.approved = "false"
|
||||
# puts "Expecting false"
|
||||
# puts topic.inspect
|
||||
assert !topic.approved?, "approved should be false"
|
||||
topic.approved = "true"
|
||||
# puts "Expecting true"
|
||||
# puts topic.inspect
|
||||
assert topic.approved?, "approved should be true"
|
||||
topic.approved = "true"
|
||||
# puts "Expecting true"
|
||||
# puts topic.inspect
|
||||
assert topic.approved?, "approved should be true"
|
||||
# puts ""
|
||||
end
|
||||
|
||||
def test_query_attribute_string
|
||||
[nil, "", " "].each do |value|
|
||||
assert_equal false, Topic.new(:author_name => value).author_name?
|
||||
end
|
||||
|
||||
assert_equal true, Topic.new(:author_name => "Name").author_name?
|
||||
end
|
||||
|
||||
def test_query_attribute_number
|
||||
[nil, 0, "0"].each do |value|
|
||||
assert_equal false, Developer.new(:salary => value).salary?
|
||||
end
|
||||
|
||||
assert_equal true, Developer.new(:salary => 1).salary?
|
||||
assert_equal true, Developer.new(:salary => "1").salary?
|
||||
end
|
||||
|
||||
def test_query_attribute_boolean
|
||||
[nil, "", false, "false", "f", 0].each do |value|
|
||||
assert_equal false, Topic.new(:approved => value).approved?
|
||||
end
|
||||
|
||||
[true, "true", "1", 1].each do |value|
|
||||
assert_equal true, Topic.new(:approved => value).approved?
|
||||
end
|
||||
end
|
||||
|
||||
def test_query_attribute_with_custom_fields
|
||||
object = Company.find_by_sql(<<-SQL).first
|
||||
SELECT c1.*, c2.ruby_type as string_value, c2.rating as int_value
|
||||
FROM companies c1, companies c2
|
||||
WHERE c1.firm_id = c2.id
|
||||
AND c1.id = 2
|
||||
SQL
|
||||
|
||||
assert_equal "Firm", object.string_value
|
||||
assert object.string_value?
|
||||
|
||||
object.string_value = " "
|
||||
assert !object.string_value?
|
||||
|
||||
assert_equal 1, object.int_value.to_i
|
||||
assert object.int_value?
|
||||
|
||||
object.int_value = "0"
|
||||
assert !object.int_value?
|
||||
end
|
||||
|
||||
def test_non_attribute_access_and_assignment
|
||||
topic = Topic.new
|
||||
assert !topic.respond_to?("mumbo")
|
||||
assert_raise(NoMethodError) { topic.mumbo }
|
||||
assert_raise(NoMethodError) { topic.mumbo = 5 }
|
||||
end
|
||||
|
||||
def test_preserving_date_objects
|
||||
if current_adapter?(:SybaseAdapter)
|
||||
# Sybase ctlib does not (yet?) support the date type; use datetime instead.
|
||||
|
@ -531,38 +283,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
GUESSED_CLASSES.each(&:reset_table_name)
|
||||
end
|
||||
|
||||
def test_destroy_all
|
||||
conditions = "author_name = 'Mary'"
|
||||
topics_by_mary = Topic.all(:conditions => conditions, :order => 'id')
|
||||
assert ! topics_by_mary.empty?
|
||||
|
||||
assert_difference('Topic.count', -topics_by_mary.size) do
|
||||
destroyed = Topic.destroy_all(conditions).sort_by(&:id)
|
||||
assert_equal topics_by_mary, destroyed
|
||||
assert destroyed.all? { |topic| topic.frozen? }, "destroyed topics should be frozen"
|
||||
end
|
||||
end
|
||||
|
||||
def test_destroy_many
|
||||
clients = Client.find([2, 3], :order => 'id')
|
||||
|
||||
assert_difference('Client.count', -2) do
|
||||
destroyed = Client.destroy([2, 3]).sort_by(&:id)
|
||||
assert_equal clients, destroyed
|
||||
assert destroyed.all? { |client| client.frozen? }, "destroyed clients should be frozen"
|
||||
end
|
||||
end
|
||||
|
||||
def test_delete_many
|
||||
original_count = Topic.count
|
||||
Topic.delete(deleting = [1, 2])
|
||||
assert_equal original_count - deleting.size, Topic.count
|
||||
end
|
||||
|
||||
def test_boolean_attributes
|
||||
assert ! Topic.find(1).approved?
|
||||
assert Topic.find(2).approved?
|
||||
end
|
||||
|
||||
if current_adapter?(:MysqlAdapter)
|
||||
def test_update_all_with_order_and_limit
|
||||
|
@ -570,63 +290,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
# Oracle UPDATE does not support ORDER BY
|
||||
unless current_adapter?(:OracleAdapter)
|
||||
def test_update_all_ignores_order_without_limit_from_association
|
||||
author = authors(:david)
|
||||
assert_nothing_raised do
|
||||
assert_equal author.posts_with_comments_and_categories.length, author.posts_with_comments_and_categories.update_all([ "body = ?", "bulk update!" ])
|
||||
end
|
||||
end
|
||||
|
||||
def test_update_all_with_order_and_limit_updates_subset_only
|
||||
author = authors(:david)
|
||||
assert_nothing_raised do
|
||||
assert_equal 1, author.posts_sorted_by_id_limited.size
|
||||
assert_equal 2, author.posts_sorted_by_id_limited.find(:all, :limit => 2).size
|
||||
assert_equal 1, author.posts_sorted_by_id_limited.update_all([ "body = ?", "bulk update!" ])
|
||||
assert_equal "bulk update!", posts(:welcome).body
|
||||
assert_not_equal "bulk update!", posts(:thinking).body
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_update_many
|
||||
topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } }
|
||||
updated = Topic.update(topic_data.keys, topic_data.values)
|
||||
|
||||
assert_equal 2, updated.size
|
||||
assert_equal "1 updated", Topic.find(1).content
|
||||
assert_equal "2 updated", Topic.find(2).content
|
||||
end
|
||||
|
||||
def test_delete_all
|
||||
assert Topic.count > 0
|
||||
|
||||
assert_equal Topic.count, Topic.delete_all
|
||||
end
|
||||
|
||||
def test_update_by_condition
|
||||
Topic.update_all "content = 'bulk updated!'", ["approved = ?", true]
|
||||
assert_equal "Have a nice day", Topic.find(1).content
|
||||
assert_equal "bulk updated!", Topic.find(2).content
|
||||
end
|
||||
|
||||
def test_attribute_present
|
||||
t = Topic.new
|
||||
t.title = "hello there!"
|
||||
t.written_on = Time.now
|
||||
assert t.attribute_present?("title")
|
||||
assert t.attribute_present?("written_on")
|
||||
assert !t.attribute_present?("content")
|
||||
end
|
||||
|
||||
def test_attribute_keys_on_new_instance
|
||||
t = Topic.new
|
||||
assert_equal nil, t.title, "The topics table has a title column, so it should be nil"
|
||||
assert_raise(NoMethodError) { t.title2 }
|
||||
end
|
||||
|
||||
def test_null_fields
|
||||
assert_nil Topic.find(1).parent_id
|
||||
assert_nil Topic.create("title" => "Hey you").parent_id
|
||||
|
@ -710,8 +373,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
assert_equal [ Topic.find(1) ], [ Topic.find(2).topic ] & [ Topic.find(1) ]
|
||||
end
|
||||
|
||||
|
||||
|
||||
def test_readonly_attributes
|
||||
assert_equal Set.new([ 'title' , 'comments_count' ]), ReadonlyTitlePost.readonly_attributes
|
||||
|
||||
|
@ -1313,49 +974,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_increment_attribute
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
accounts(:signals37).increment! :credit_limit
|
||||
assert_equal 51, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).increment(:credit_limit).increment!(:credit_limit)
|
||||
assert_equal 53, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_increment_nil_attribute
|
||||
assert_nil topics(:first).parent_id
|
||||
topics(:first).increment! :parent_id
|
||||
assert_equal 1, topics(:first).parent_id
|
||||
end
|
||||
|
||||
def test_increment_attribute_by
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
accounts(:signals37).increment! :credit_limit, 5
|
||||
assert_equal 55, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).increment(:credit_limit, 1).increment!(:credit_limit, 3)
|
||||
assert_equal 59, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_decrement_attribute
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
|
||||
accounts(:signals37).decrement!(:credit_limit)
|
||||
assert_equal 49, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).decrement(:credit_limit).decrement!(:credit_limit)
|
||||
assert_equal 47, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_decrement_attribute_by
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
accounts(:signals37).decrement! :credit_limit, 5
|
||||
assert_equal 45, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).decrement(:credit_limit, 1).decrement!(:credit_limit, 3)
|
||||
assert_equal 41, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_toggle_attribute
|
||||
assert !topics(:first).approved?
|
||||
topics(:first).toggle!(:approved)
|
||||
|
@ -1482,28 +1100,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
assert_equal res6, res7
|
||||
end
|
||||
|
||||
def test_clear_association_cache_stored
|
||||
firm = Firm.find(1)
|
||||
assert_kind_of Firm, firm
|
||||
|
||||
firm.clear_association_cache
|
||||
assert_equal Firm.find(1).clients.collect{ |x| x.name }.sort, firm.clients.collect{ |x| x.name }.sort
|
||||
end
|
||||
|
||||
def test_clear_association_cache_new_record
|
||||
firm = Firm.new
|
||||
client_stored = Client.find(3)
|
||||
client_new = Client.new
|
||||
client_new.name = "The Joneses"
|
||||
clients = [ client_stored, client_new ]
|
||||
|
||||
firm.clients << clients
|
||||
assert_equal clients.map(&:name).to_set, firm.clients.map(&:name).to_set
|
||||
|
||||
firm.clear_association_cache
|
||||
assert_equal clients.map(&:name).to_set, firm.clients.map(&:name).to_set
|
||||
end
|
||||
|
||||
def test_interpolate_sql
|
||||
assert_nothing_raised { Category.new.send(:interpolate_sql, 'foo@bar') }
|
||||
assert_nothing_raised { Category.new.send(:interpolate_sql, 'foo bar) baz') }
|
||||
|
@ -1703,134 +1299,6 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
assert_no_queries { assert true }
|
||||
end
|
||||
|
||||
def test_to_xml
|
||||
xml = REXML::Document.new(topics(:first).to_xml(:indent => 0))
|
||||
bonus_time_in_current_timezone = topics(:first).bonus_time.xmlschema
|
||||
written_on_in_current_timezone = topics(:first).written_on.xmlschema
|
||||
last_read_in_current_timezone = topics(:first).last_read.xmlschema
|
||||
|
||||
assert_equal "topic", xml.root.name
|
||||
assert_equal "The First Topic" , xml.elements["//title"].text
|
||||
assert_equal "David" , xml.elements["//author-name"].text
|
||||
assert_match "Have a nice day", xml.elements["//content"].text
|
||||
|
||||
assert_equal "1", xml.elements["//id"].text
|
||||
assert_equal "integer" , xml.elements["//id"].attributes['type']
|
||||
|
||||
assert_equal "1", xml.elements["//replies-count"].text
|
||||
assert_equal "integer" , xml.elements["//replies-count"].attributes['type']
|
||||
|
||||
assert_equal written_on_in_current_timezone, xml.elements["//written-on"].text
|
||||
assert_equal "datetime" , xml.elements["//written-on"].attributes['type']
|
||||
|
||||
assert_equal "david@loudthinking.com", xml.elements["//author-email-address"].text
|
||||
|
||||
assert_equal nil, xml.elements["//parent-id"].text
|
||||
assert_equal "integer", xml.elements["//parent-id"].attributes['type']
|
||||
assert_equal "true", xml.elements["//parent-id"].attributes['nil']
|
||||
|
||||
if current_adapter?(:SybaseAdapter)
|
||||
assert_equal last_read_in_current_timezone, xml.elements["//last-read"].text
|
||||
assert_equal "datetime" , xml.elements["//last-read"].attributes['type']
|
||||
else
|
||||
# Oracle enhanced adapter allows to define Date attributes in model class (see topic.rb)
|
||||
assert_equal "2004-04-15", xml.elements["//last-read"].text
|
||||
assert_equal "date" , xml.elements["//last-read"].attributes['type']
|
||||
end
|
||||
|
||||
# Oracle and DB2 don't have true boolean or time-only fields
|
||||
unless current_adapter?(:OracleAdapter, :DB2Adapter)
|
||||
assert_equal "false", xml.elements["//approved"].text
|
||||
assert_equal "boolean" , xml.elements["//approved"].attributes['type']
|
||||
|
||||
assert_equal bonus_time_in_current_timezone, xml.elements["//bonus-time"].text
|
||||
assert_equal "datetime" , xml.elements["//bonus-time"].attributes['type']
|
||||
end
|
||||
end
|
||||
|
||||
def test_to_xml_skipping_attributes
|
||||
xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :replies_count])
|
||||
assert_equal "<topic>", xml.first(7)
|
||||
assert !xml.include?(%(<title>The First Topic</title>))
|
||||
assert xml.include?(%(<author-name>David</author-name>))
|
||||
|
||||
xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :author_name, :replies_count])
|
||||
assert !xml.include?(%(<title>The First Topic</title>))
|
||||
assert !xml.include?(%(<author-name>David</author-name>))
|
||||
end
|
||||
|
||||
def test_to_xml_including_has_many_association
|
||||
xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :include => :replies, :except => :replies_count)
|
||||
assert_equal "<topic>", xml.first(7)
|
||||
assert xml.include?(%(<replies type="array"><reply>))
|
||||
assert xml.include?(%(<title>The Second Topic of the day</title>))
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_has_many_association
|
||||
xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :include => :replies)
|
||||
assert xml.include?(%(<replies type="array"><reply>))
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_methods
|
||||
xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :methods => [ :topic_id ])
|
||||
assert xml.include?(%(<topic-id type="integer">#{topics(:first).topic_id}</topic-id>)), xml
|
||||
assert xml.include?(%(<topic-id type="integer">#{topics(:second).topic_id}</topic-id>)), xml
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_has_one_association
|
||||
xml = [ companies(:first_firm), companies(:rails_core) ].to_xml(:indent => 0, :skip_instruct => true, :include => :account)
|
||||
assert xml.include?(companies(:first_firm).account.to_xml(:indent => 0, :skip_instruct => true))
|
||||
assert xml.include?(companies(:rails_core).account.to_xml(:indent => 0, :skip_instruct => true))
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_belongs_to_association
|
||||
xml = [ companies(:first_client), companies(:second_client), companies(:another_client) ].to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
|
||||
assert xml.include?(companies(:first_client).to_xml(:indent => 0, :skip_instruct => true))
|
||||
assert xml.include?(companies(:second_client).firm.to_xml(:indent => 0, :skip_instruct => true))
|
||||
assert xml.include?(companies(:another_client).firm.to_xml(:indent => 0, :skip_instruct => true))
|
||||
end
|
||||
|
||||
def test_to_xml_including_belongs_to_association
|
||||
xml = companies(:first_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
|
||||
assert !xml.include?("<firm>")
|
||||
|
||||
xml = companies(:second_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
|
||||
assert xml.include?("<firm>")
|
||||
end
|
||||
|
||||
def test_to_xml_including_multiple_associations
|
||||
xml = companies(:first_firm).to_xml(:indent => 0, :skip_instruct => true, :include => [ :clients, :account ])
|
||||
assert_equal "<firm>", xml.first(6)
|
||||
assert xml.include?(%(<account>))
|
||||
assert xml.include?(%(<clients type="array"><client>))
|
||||
end
|
||||
|
||||
def test_to_xml_including_multiple_associations_with_options
|
||||
xml = companies(:first_firm).to_xml(
|
||||
:indent => 0, :skip_instruct => true,
|
||||
:include => { :clients => { :only => :name } }
|
||||
)
|
||||
|
||||
assert_equal "<firm>", xml.first(6)
|
||||
assert xml.include?(%(<client><name>Summit</name></client>))
|
||||
assert xml.include?(%(<clients type="array"><client>))
|
||||
end
|
||||
|
||||
def test_to_xml_including_methods
|
||||
xml = Company.new.to_xml(:methods => :arbitrary_method, :skip_instruct => true)
|
||||
assert_equal "<company>", xml.first(9)
|
||||
assert xml.include?(%(<arbitrary-method>I am Jack's profound disappointment</arbitrary-method>))
|
||||
end
|
||||
|
||||
def test_to_xml_with_block
|
||||
value = "Rockin' the block"
|
||||
xml = Company.new.to_xml(:skip_instruct => true) do |_xml|
|
||||
_xml.tag! "arbitrary-element", value
|
||||
end
|
||||
assert_equal "<company>", xml.first(9)
|
||||
assert xml.include?(%(<arbitrary-element>#{value}</arbitrary-element>))
|
||||
end
|
||||
|
||||
def test_to_param_should_return_string
|
||||
assert_kind_of String, Client.find(:first).to_param
|
||||
end
|
||||
|
|
|
@ -19,6 +19,119 @@ class PersistencesTest < ActiveRecord::TestCase
|
|||
|
||||
fixtures :topics, :companies, :developers, :projects, :computers, :accounts, :minimalistics, 'warehouse-things', :authors, :categorizations, :categories, :posts, :minivans
|
||||
|
||||
# Oracle UPDATE does not support ORDER BY
|
||||
unless current_adapter?(:OracleAdapter)
|
||||
def test_update_all_ignores_order_without_limit_from_association
|
||||
author = authors(:david)
|
||||
assert_nothing_raised do
|
||||
assert_equal author.posts_with_comments_and_categories.length, author.posts_with_comments_and_categories.update_all([ "body = ?", "bulk update!" ])
|
||||
end
|
||||
end
|
||||
|
||||
def test_update_all_with_order_and_limit_updates_subset_only
|
||||
author = authors(:david)
|
||||
assert_nothing_raised do
|
||||
assert_equal 1, author.posts_sorted_by_id_limited.size
|
||||
assert_equal 2, author.posts_sorted_by_id_limited.find(:all, :limit => 2).size
|
||||
assert_equal 1, author.posts_sorted_by_id_limited.update_all([ "body = ?", "bulk update!" ])
|
||||
assert_equal "bulk update!", posts(:welcome).body
|
||||
assert_not_equal "bulk update!", posts(:thinking).body
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_update_many
|
||||
topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } }
|
||||
updated = Topic.update(topic_data.keys, topic_data.values)
|
||||
|
||||
assert_equal 2, updated.size
|
||||
assert_equal "1 updated", Topic.find(1).content
|
||||
assert_equal "2 updated", Topic.find(2).content
|
||||
end
|
||||
|
||||
def test_delete_all
|
||||
assert Topic.count > 0
|
||||
|
||||
assert_equal Topic.count, Topic.delete_all
|
||||
end
|
||||
|
||||
def test_update_by_condition
|
||||
Topic.update_all "content = 'bulk updated!'", ["approved = ?", true]
|
||||
assert_equal "Have a nice day", Topic.find(1).content
|
||||
assert_equal "bulk updated!", Topic.find(2).content
|
||||
end
|
||||
|
||||
def test_increment_attribute
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
accounts(:signals37).increment! :credit_limit
|
||||
assert_equal 51, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).increment(:credit_limit).increment!(:credit_limit)
|
||||
assert_equal 53, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_increment_nil_attribute
|
||||
assert_nil topics(:first).parent_id
|
||||
topics(:first).increment! :parent_id
|
||||
assert_equal 1, topics(:first).parent_id
|
||||
end
|
||||
|
||||
def test_increment_attribute_by
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
accounts(:signals37).increment! :credit_limit, 5
|
||||
assert_equal 55, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).increment(:credit_limit, 1).increment!(:credit_limit, 3)
|
||||
assert_equal 59, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_destroy_all
|
||||
conditions = "author_name = 'Mary'"
|
||||
topics_by_mary = Topic.all(:conditions => conditions, :order => 'id')
|
||||
assert ! topics_by_mary.empty?
|
||||
|
||||
assert_difference('Topic.count', -topics_by_mary.size) do
|
||||
destroyed = Topic.destroy_all(conditions).sort_by(&:id)
|
||||
assert_equal topics_by_mary, destroyed
|
||||
assert destroyed.all? { |topic| topic.frozen? }, "destroyed topics should be frozen"
|
||||
end
|
||||
end
|
||||
|
||||
def test_destroy_many
|
||||
clients = Client.find([2, 3], :order => 'id')
|
||||
|
||||
assert_difference('Client.count', -2) do
|
||||
destroyed = Client.destroy([2, 3]).sort_by(&:id)
|
||||
assert_equal clients, destroyed
|
||||
assert destroyed.all? { |client| client.frozen? }, "destroyed clients should be frozen"
|
||||
end
|
||||
end
|
||||
|
||||
def test_delete_many
|
||||
original_count = Topic.count
|
||||
Topic.delete(deleting = [1, 2])
|
||||
assert_equal original_count - deleting.size, Topic.count
|
||||
end
|
||||
|
||||
def test_decrement_attribute
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
|
||||
accounts(:signals37).decrement!(:credit_limit)
|
||||
assert_equal 49, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).decrement(:credit_limit).decrement!(:credit_limit)
|
||||
assert_equal 47, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_decrement_attribute_by
|
||||
assert_equal 50, accounts(:signals37).credit_limit
|
||||
accounts(:signals37).decrement! :credit_limit, 5
|
||||
assert_equal 45, accounts(:signals37, :reload).credit_limit
|
||||
|
||||
accounts(:signals37).decrement(:credit_limit, 1).decrement!(:credit_limit, 3)
|
||||
assert_equal 41, accounts(:signals37, :reload).credit_limit
|
||||
end
|
||||
|
||||
def test_create
|
||||
topic = Topic.new
|
||||
topic.title = "New Topic"
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
require "cases/helper"
|
||||
require 'models/contact'
|
||||
require 'models/topic'
|
||||
require 'models/reply'
|
||||
require 'models/company'
|
||||
|
||||
class SerializationTest < ActiveRecord::TestCase
|
||||
|
||||
fixtures :topics, :companies, :accounts
|
||||
|
||||
FORMATS = [ :xml, :json ]
|
||||
|
||||
def setup
|
||||
|
@ -17,6 +23,134 @@ class SerializationTest < ActiveRecord::TestCase
|
|||
@contact = Contact.new(@contact_attributes)
|
||||
end
|
||||
|
||||
def test_to_xml
|
||||
xml = REXML::Document.new(topics(:first).to_xml(:indent => 0))
|
||||
bonus_time_in_current_timezone = topics(:first).bonus_time.xmlschema
|
||||
written_on_in_current_timezone = topics(:first).written_on.xmlschema
|
||||
last_read_in_current_timezone = topics(:first).last_read.xmlschema
|
||||
|
||||
assert_equal "topic", xml.root.name
|
||||
assert_equal "The First Topic" , xml.elements["//title"].text
|
||||
assert_equal "David" , xml.elements["//author-name"].text
|
||||
assert_match "Have a nice day", xml.elements["//content"].text
|
||||
|
||||
assert_equal "1", xml.elements["//id"].text
|
||||
assert_equal "integer" , xml.elements["//id"].attributes['type']
|
||||
|
||||
assert_equal "1", xml.elements["//replies-count"].text
|
||||
assert_equal "integer" , xml.elements["//replies-count"].attributes['type']
|
||||
|
||||
assert_equal written_on_in_current_timezone, xml.elements["//written-on"].text
|
||||
assert_equal "datetime" , xml.elements["//written-on"].attributes['type']
|
||||
|
||||
assert_equal "david@loudthinking.com", xml.elements["//author-email-address"].text
|
||||
|
||||
assert_equal nil, xml.elements["//parent-id"].text
|
||||
assert_equal "integer", xml.elements["//parent-id"].attributes['type']
|
||||
assert_equal "true", xml.elements["//parent-id"].attributes['nil']
|
||||
|
||||
if current_adapter?(:SybaseAdapter)
|
||||
assert_equal last_read_in_current_timezone, xml.elements["//last-read"].text
|
||||
assert_equal "datetime" , xml.elements["//last-read"].attributes['type']
|
||||
else
|
||||
# Oracle enhanced adapter allows to define Date attributes in model class (see topic.rb)
|
||||
assert_equal "2004-04-15", xml.elements["//last-read"].text
|
||||
assert_equal "date" , xml.elements["//last-read"].attributes['type']
|
||||
end
|
||||
|
||||
# Oracle and DB2 don't have true boolean or time-only fields
|
||||
unless current_adapter?(:OracleAdapter, :DB2Adapter)
|
||||
assert_equal "false", xml.elements["//approved"].text
|
||||
assert_equal "boolean" , xml.elements["//approved"].attributes['type']
|
||||
|
||||
assert_equal bonus_time_in_current_timezone, xml.elements["//bonus-time"].text
|
||||
assert_equal "datetime" , xml.elements["//bonus-time"].attributes['type']
|
||||
end
|
||||
end
|
||||
|
||||
def test_to_xml_skipping_attributes
|
||||
xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :replies_count])
|
||||
assert_equal "<topic>", xml.first(7)
|
||||
assert !xml.include?(%(<title>The First Topic</title>))
|
||||
assert xml.include?(%(<author-name>David</author-name>))
|
||||
|
||||
xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :except => [:title, :author_name, :replies_count])
|
||||
assert !xml.include?(%(<title>The First Topic</title>))
|
||||
assert !xml.include?(%(<author-name>David</author-name>))
|
||||
end
|
||||
|
||||
def test_to_xml_including_has_many_association
|
||||
xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true, :include => :replies, :except => :replies_count)
|
||||
assert_equal "<topic>", xml.first(7)
|
||||
assert xml.include?(%(<replies type="array"><reply>))
|
||||
assert xml.include?(%(<title>The Second Topic of the day</title>))
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_has_many_association
|
||||
xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :include => :replies)
|
||||
assert xml.include?(%(<replies type="array"><reply>))
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_methods
|
||||
xml = [ topics(:first), topics(:second) ].to_xml(:indent => 0, :skip_instruct => true, :methods => [ :topic_id ])
|
||||
assert xml.include?(%(<topic-id type="integer">#{topics(:first).topic_id}</topic-id>)), xml
|
||||
assert xml.include?(%(<topic-id type="integer">#{topics(:second).topic_id}</topic-id>)), xml
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_has_one_association
|
||||
xml = [ companies(:first_firm), companies(:rails_core) ].to_xml(:indent => 0, :skip_instruct => true, :include => :account)
|
||||
assert xml.include?(companies(:first_firm).account.to_xml(:indent => 0, :skip_instruct => true))
|
||||
assert xml.include?(companies(:rails_core).account.to_xml(:indent => 0, :skip_instruct => true))
|
||||
end
|
||||
|
||||
def test_array_to_xml_including_belongs_to_association
|
||||
xml = [ companies(:first_client), companies(:second_client), companies(:another_client) ].to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
|
||||
assert xml.include?(companies(:first_client).to_xml(:indent => 0, :skip_instruct => true))
|
||||
assert xml.include?(companies(:second_client).firm.to_xml(:indent => 0, :skip_instruct => true))
|
||||
assert xml.include?(companies(:another_client).firm.to_xml(:indent => 0, :skip_instruct => true))
|
||||
end
|
||||
|
||||
def test_to_xml_including_belongs_to_association
|
||||
xml = companies(:first_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
|
||||
assert !xml.include?("<firm>")
|
||||
|
||||
xml = companies(:second_client).to_xml(:indent => 0, :skip_instruct => true, :include => :firm)
|
||||
assert xml.include?("<firm>")
|
||||
end
|
||||
|
||||
def test_to_xml_including_multiple_associations
|
||||
xml = companies(:first_firm).to_xml(:indent => 0, :skip_instruct => true, :include => [ :clients, :account ])
|
||||
assert_equal "<firm>", xml.first(6)
|
||||
assert xml.include?(%(<account>))
|
||||
assert xml.include?(%(<clients type="array"><client>))
|
||||
end
|
||||
|
||||
def test_to_xml_including_multiple_associations_with_options
|
||||
xml = companies(:first_firm).to_xml(
|
||||
:indent => 0, :skip_instruct => true,
|
||||
:include => { :clients => { :only => :name } }
|
||||
)
|
||||
|
||||
assert_equal "<firm>", xml.first(6)
|
||||
assert xml.include?(%(<client><name>Summit</name></client>))
|
||||
assert xml.include?(%(<clients type="array"><client>))
|
||||
end
|
||||
|
||||
def test_to_xml_including_methods
|
||||
xml = Company.new.to_xml(:methods => :arbitrary_method, :skip_instruct => true)
|
||||
assert_equal "<company>", xml.first(9)
|
||||
assert xml.include?(%(<arbitrary-method>I am Jack's profound disappointment</arbitrary-method>))
|
||||
end
|
||||
|
||||
def test_to_xml_with_block
|
||||
value = "Rockin' the block"
|
||||
xml = Company.new.to_xml(:skip_instruct => true) do |_xml|
|
||||
_xml.tag! "arbitrary-element", value
|
||||
end
|
||||
assert_equal "<company>", xml.first(9)
|
||||
assert xml.include?(%(<arbitrary-element>#{value}</arbitrary-element>))
|
||||
end
|
||||
|
||||
def test_serialize_should_be_reversible
|
||||
for format in FORMATS
|
||||
@serialized = Contact.new.send("to_#{format}")
|
||||
|
|
Loading…
Reference in New Issue