2011-12-19 10:07:02 -05:00
require 'cases/helper'
require 'models/admin'
require 'models/admin/account'
2011-12-19 10:00:24 -05:00
require 'models/admin/randomly_named_c1'
2011-12-19 10:07:02 -05:00
require 'models/admin/user'
2008-01-18 02:31:37 -05:00
require 'models/binary'
2011-12-19 10:07:02 -05:00
require 'models/book'
2014-11-21 08:57:25 -05:00
require 'models/bulb'
2011-12-19 10:07:02 -05:00
require 'models/category'
require 'models/company'
2008-01-18 02:31:37 -05:00
require 'models/computer'
2011-12-19 10:07:02 -05:00
require 'models/course'
2008-01-18 02:31:37 -05:00
require 'models/developer'
2014-11-14 03:55:32 -05:00
require 'models/computer'
2008-01-18 02:31:37 -05:00
require 'models/joke'
2011-12-19 10:07:02 -05:00
require 'models/matey'
2008-01-18 02:31:37 -05:00
require 'models/parrot'
require 'models/pirate'
2011-12-19 10:07:02 -05:00
require 'models/post'
2011-12-19 10:00:24 -05:00
require 'models/randomly_named_c1'
2012-02-12 05:33:08 -05:00
require 'models/reply'
2011-12-22 12:04:01 -05:00
require 'models/ship'
2011-12-19 10:07:02 -05:00
require 'models/task'
require 'models/topic'
require 'models/traffic_light'
require 'models/treasure'
2011-09-01 18:00:31 -04:00
require 'tempfile'
2004-11-23 20:04:44 -05:00
2008-01-21 12:20:51 -05:00
class FixturesTest < ActiveRecord :: TestCase
2005-06-10 10:58:02 -04:00
self . use_instantiated_fixtures = true
self . use_transactional_fixtures = false
2011-12-19 10:07:02 -05:00
# other_topics fixture should not be included here
2010-12-29 11:15:45 -05:00
fixtures :topics , :developers , :accounts , :tasks , :categories , :funny_jokes , :binaries , :traffic_lights
2004-12-09 10:52:54 -05:00
2007-05-21 14:54:51 -04:00
FIXTURES = %w( accounts binaries companies customers
2004-11-23 20:04:44 -05:00
developers developers_projects entrants
2005-04-07 02:54:25 -04:00
movies projects subscribers topics tasks )
2010-04-16 11:53:36 -04:00
MATCH_ATTRIBUTE_NAME = / [a-zA-Z][- \ w]* /
2004-11-23 20:04:44 -05:00
def test_clean_fixtures
FIXTURES . each do | name |
fixtures = nil
2011-02-11 19:09:34 -05:00
assert_nothing_raised { fixtures = create_fixtures ( name ) . first }
2012-05-12 07:17:03 -04:00
assert_kind_of ( ActiveRecord :: FixtureSet , fixtures )
2010-07-14 15:43:59 -04:00
fixtures . each { | _name , fixture |
2004-11-23 20:04:44 -05:00
fixture . each { | key , value |
assert_match ( MATCH_ATTRIBUTE_NAME , key )
}
}
end
end
2011-09-01 18:00:31 -04:00
def test_broken_yaml_exception
badyaml = Tempfile . new [ 'foo' , '.yml' ]
2011-09-06 08:45:19 -04:00
badyaml . write 'a: : '
2011-09-01 18:00:31 -04:00
badyaml . flush
dir = File . dirname badyaml . path
2011-09-06 08:45:19 -04:00
name = File . basename badyaml . path , '.yml'
2011-09-01 18:00:31 -04:00
assert_raises ( ActiveRecord :: Fixture :: FormatError ) do
2012-05-12 07:17:03 -04:00
ActiveRecord :: FixtureSet . create_fixtures ( dir , name )
2011-09-01 18:00:31 -04:00
end
ensure
badyaml . close
badyaml . unlink
end
2011-04-29 21:21:07 -04:00
def test_create_fixtures
2012-05-12 07:17:03 -04:00
fixtures = ActiveRecord :: FixtureSet . create_fixtures ( FIXTURES_ROOT , " parrots " )
2013-01-18 09:15:19 -05:00
assert Parrot . find_by_name ( 'Curious George' ) , 'George is not in the database'
2012-01-04 00:49:10 -05:00
assert fixtures . detect { | f | f . name == 'parrots' } , " no fixtures named 'parrots' in #{ fixtures . map ( & :name ) . inspect } "
2011-04-29 21:21:07 -04:00
end
2004-11-23 20:04:44 -05:00
def test_multiple_clean_fixtures
fixtures_array = nil
assert_nothing_raised { fixtures_array = create_fixtures ( * FIXTURES ) }
assert_kind_of ( Array , fixtures_array )
2012-05-12 07:17:03 -04:00
fixtures_array . each { | fixtures | assert_kind_of ( ActiveRecord :: FixtureSet , fixtures ) }
2004-11-23 20:04:44 -05:00
end
2012-01-04 00:49:10 -05:00
def test_create_symbol_fixtures
2013-09-09 17:47:12 -04:00
fixtures = ActiveRecord :: FixtureSet . create_fixtures ( FIXTURES_ROOT , :collections , :collections = > Course ) { Course . connection }
2012-01-04 00:49:10 -05:00
2013-01-18 09:15:19 -05:00
assert Course . find_by_name ( 'Collection' ) , 'course is not in the database'
2012-01-04 00:49:10 -05:00
assert fixtures . detect { | f | f . name == 'collections' } , " no fixtures named 'collections' in #{ fixtures . map ( & :name ) . inspect } "
end
2004-11-23 20:04:44 -05:00
def test_attributes
2011-02-11 19:09:34 -05:00
topics = create_fixtures ( " topics " ) . first
2004-11-23 20:04:44 -05:00
assert_equal ( " The First Topic " , topics [ " first " ] [ " title " ] )
assert_nil ( topics [ " second " ] [ " author_email_address " ] )
end
def test_inserts
2010-11-16 20:06:50 -05:00
create_fixtures ( " topics " )
2007-09-28 10:56:07 -04:00
first_row = ActiveRecord :: Base . connection . select_one ( " SELECT * FROM topics WHERE author_name = 'David' " )
assert_equal ( " The First Topic " , first_row [ " title " ] )
2004-11-23 20:04:44 -05:00
2007-09-28 10:56:07 -04:00
second_row = ActiveRecord :: Base . connection . select_one ( " SELECT * FROM topics WHERE author_name = 'Mary' " )
assert_nil ( second_row [ " author_email_address " ] )
2004-11-23 20:04:44 -05:00
end
2005-11-16 03:16:54 -05:00
if ActiveRecord :: Base . connection . supports_migrations?
def test_inserts_with_pre_and_suffix
2007-09-28 10:56:07 -04:00
# Reset cache to make finds on the new table work
2012-05-12 07:17:03 -04:00
ActiveRecord :: FixtureSet . reset_cache
2007-09-28 10:56:07 -04:00
2011-12-19 10:07:02 -05:00
ActiveRecord :: Base . connection . create_table :prefix_other_topics_suffix do | t |
2005-11-16 03:16:54 -05:00
t . column :title , :string
t . column :author_name , :string
t . column :author_email_address , :string
t . column :written_on , :datetime
t . column :bonus_time , :time
t . column :last_read , :date
2006-03-01 11:01:53 -05:00
t . column :content , :string
2005-11-16 03:16:54 -05:00
t . column :approved , :boolean , :default = > true
t . column :replies_count , :integer , :default = > 0
t . column :parent_id , :integer
t . column :type , :string , :limit = > 50
end
# Store existing prefix/suffix
old_prefix = ActiveRecord :: Base . table_name_prefix
old_suffix = ActiveRecord :: Base . table_name_suffix
# Set a prefix/suffix we can test against
ActiveRecord :: Base . table_name_prefix = 'prefix_'
ActiveRecord :: Base . table_name_suffix = '_suffix'
2011-12-19 10:07:02 -05:00
other_topic_klass = Class . new ( ActiveRecord :: Base ) do
def self . name
" OtherTopic "
end
end
2011-12-19 10:07:02 -05:00
2011-12-19 10:07:02 -05:00
topics = [ create_fixtures ( " other_topics " ) ] . flatten . first
2011-12-19 10:07:02 -05:00
2011-12-22 12:04:01 -05:00
# This checks for a caching problem which causes a bug in the fixtures
# class-level configuration helper.
assert_not_nil topics , " Fixture data inserted, but fixture objects not returned from create "
2011-12-19 10:07:02 -05:00
first_row = ActiveRecord :: Base . connection . select_one ( " SELECT * FROM prefix_other_topics_suffix WHERE author_name = 'David' " )
assert_not_nil first_row , " The prefix_other_topics_suffix table appears to be empty despite create_fixtures: the row with author_name = 'David' was not found "
assert_equal ( " The First Topic " , first_row [ " title " ] )
second_row = ActiveRecord :: Base . connection . select_one ( " SELECT * FROM prefix_other_topics_suffix WHERE author_name = 'Mary' " )
assert_nil ( second_row [ " author_email_address " ] )
assert_equal :prefix_other_topics_suffix , topics . table_name . to_sym
# This assertion should preferably be the last in the list, because calling
# other_topic_klass.table_name sets a class-level instance variable
assert_equal :prefix_other_topics_suffix , other_topic_klass . table_name . to_sym
2005-11-16 03:16:54 -05:00
ensure
2006-03-01 11:01:53 -05:00
# Restore prefix/suffix to its previous values
2007-09-28 10:56:07 -04:00
ActiveRecord :: Base . table_name_prefix = old_prefix
ActiveRecord :: Base . table_name_suffix = old_suffix
2006-03-01 11:01:53 -05:00
2011-12-19 10:07:02 -05:00
ActiveRecord :: Base . connection . drop_table :prefix_other_topics_suffix rescue nil
2005-09-02 06:51:23 -04:00
end
end
2005-04-07 02:54:25 -04:00
def test_insert_with_datetime
2010-11-16 20:06:50 -05:00
create_fixtures ( " tasks " )
2005-04-07 02:54:25 -04:00
first = Task . find ( 1 )
assert first
end
2004-11-23 20:04:44 -05:00
def test_logger_level_invariant
level = ActiveRecord :: Base . logger . level
create_fixtures ( 'topics' )
assert_equal level , ActiveRecord :: Base . logger . level
end
2004-12-09 10:52:54 -05:00
2004-11-23 20:04:44 -05:00
def test_instantiation
2011-02-11 19:09:34 -05:00
topics = create_fixtures ( " topics " ) . first
2004-11-23 20:04:44 -05:00
assert_kind_of Topic , topics [ " first " ] . find
end
2004-12-09 10:52:54 -05:00
2004-11-23 20:04:44 -05:00
def test_complete_instantiation
assert_equal " The First Topic " , @first . title
end
2004-12-09 10:52:54 -05:00
2004-11-23 20:04:44 -05:00
def test_fixtures_from_root_yml_with_instantiation
# assert_equal 2, @accounts.size
assert_equal 50 , @unknown . credit_limit
end
2004-12-09 10:52:54 -05:00
2004-11-23 20:04:44 -05:00
def test_erb_in_fixtures
assert_equal " fixture_5 " , @dev_5 . name
end
2004-12-14 19:46:26 -05:00
def test_empty_yaml_fixture
2013-08-24 04:11:18 -04:00
assert_not_nil ActiveRecord :: FixtureSet . new ( Account . connection , " accounts " , Account , FIXTURES_ROOT + " /naked/yml/accounts " )
2004-12-14 19:46:26 -05:00
end
def test_empty_yaml_fixture_with_a_comment_in_it
2013-08-24 04:11:18 -04:00
assert_not_nil ActiveRecord :: FixtureSet . new ( Account . connection , " companies " , Company , FIXTURES_ROOT + " /naked/yml/companies " )
2004-12-14 19:46:26 -05:00
end
2010-08-10 22:09:24 -04:00
def test_nonexistent_fixture_file
nonexistent_fixture_path = FIXTURES_ROOT + " /imnothere "
#sanity check to make sure that this file never exists
assert Dir [ nonexistent_fixture_path + " * " ] . empty?
2011-12-10 18:32:14 -05:00
assert_raise ( Errno :: ENOENT ) do
2013-08-24 04:11:18 -04:00
ActiveRecord :: FixtureSet . new ( Account . connection , " companies " , Company , nonexistent_fixture_path )
2010-08-10 22:09:24 -04:00
end
end
2004-12-14 19:46:26 -05:00
def test_dirty_dirty_yaml_file
2011-05-07 16:20:51 -04:00
assert_raise ( ActiveRecord :: Fixture :: FormatError ) do
2013-08-24 04:11:18 -04:00
ActiveRecord :: FixtureSet . new ( Account . connection , " courses " , Course , FIXTURES_ROOT + " /naked/yml/courses " )
2004-12-14 19:46:26 -05:00
end
end
2005-10-14 22:01:38 -04:00
def test_omap_fixtures
assert_nothing_raised do
2013-08-24 04:11:18 -04:00
fixtures = ActiveRecord :: FixtureSet . new ( Account . connection , 'categories' , Category , FIXTURES_ROOT + " /categories_ordered " )
2005-10-14 22:01:38 -04:00
2011-07-08 08:45:41 -04:00
fixtures . each . with_index do | ( name , fixture ) , i |
2005-10-14 22:01:38 -04:00
assert_equal " fixture_no_ #{ i } " , name
assert_equal " Category #{ i } " , fixture [ 'name' ]
end
end
2005-10-15 23:45:39 -04:00
end
2006-02-27 00:14:57 -05:00
def test_yml_file_in_subdirectory
2006-02-28 15:39:21 -05:00
assert_equal ( categories ( :sub_special_1 ) . name , " A special category in a subdir file " )
assert_equal ( categories ( :sub_special_1 ) . class , SpecialCategory )
2006-02-27 00:14:57 -05:00
end
def test_subsubdir_file_with_arbitrary_name
2006-02-28 15:39:21 -05:00
assert_equal ( categories ( :sub_special_3 ) . name , " A special category in an arbitrarily named subsubdir file " )
assert_equal ( categories ( :sub_special_3 ) . class , SpecialCategory )
2006-02-27 00:14:57 -05:00
end
2007-05-21 14:54:51 -04:00
def test_binary_in_fixtures
2009-05-01 18:22:09 -04:00
data = File . open ( ASSETS_ROOT + " /flowers.jpg " , 'rb' ) { | f | f . read }
2011-12-25 06:34:58 -05:00
data . force_encoding ( 'ASCII-8BIT' )
2008-04-01 02:58:52 -04:00
data . freeze
2007-05-21 14:54:51 -04:00
assert_equal data , @flowers . data
end
2010-12-29 11:15:45 -05:00
def test_serialized_fixtures
assert_equal [ " Green " , " Red " , " Orange " ] , traffic_lights ( :uk ) . state
end
2013-06-10 07:52:22 -04:00
def test_fixtures_are_set_up_with_database_env_variable
2013-10-07 04:15:23 -04:00
db_url_tmp = ENV [ 'DATABASE_URL' ]
2014-04-02 08:36:16 -04:00
ENV [ 'DATABASE_URL' ] = " sqlite3::memory: "
2013-06-10 07:52:22 -04:00
ActiveRecord :: Base . stubs ( :configurations ) . returns ( { } )
test_case = Class . new ( ActiveRecord :: TestCase ) do
fixtures :accounts
def test_fixtures
assert accounts ( :signals37 )
end
end
result = test_case . new ( :test_fixtures ) . run
assert result . passed? , " Expected #{ result . name } to pass: \n #{ result } "
2013-10-07 04:15:23 -04:00
ensure
ENV [ 'DATABASE_URL' ] = db_url_tmp
2013-06-10 07:52:22 -04:00
end
2005-10-18 19:52:07 -04:00
end
2013-09-06 14:29:40 -04:00
class HasManyThroughFixture < ActiveSupport :: TestCase
def make_model ( name )
Class . new ( ActiveRecord :: Base ) { define_singleton_method ( :name ) { name } }
end
def test_has_many_through
pt = make_model " ParrotTreasure "
parrot = make_model " Parrot "
treasure = make_model " Treasure "
pt . table_name = " parrots_treasures "
pt . belongs_to :parrot , :class = > parrot
pt . belongs_to :treasure , :class = > treasure
parrot . has_many :parrot_treasures , :class = > pt
parrot . has_many :treasures , :through = > :parrot_treasures
parrots = File . join FIXTURES_ROOT , 'parrots'
fs = ActiveRecord :: FixtureSet . new parrot . connection , " parrots " , parrot , parrots
rows = fs . table_rows
assert_equal load_has_and_belongs_to_many [ 'parrots_treasures' ] , rows [ 'parrots_treasures' ]
end
def load_has_and_belongs_to_many
parrot = make_model " Parrot "
parrot . has_and_belongs_to_many :treasures
parrots = File . join FIXTURES_ROOT , 'parrots'
fs = ActiveRecord :: FixtureSet . new parrot . connection , " parrots " , parrot , parrots
fs . table_rows
end
end
2005-10-18 19:52:07 -04:00
if Account . connection . respond_to? ( :reset_pk_sequence! )
2008-01-21 12:20:51 -05:00
class FixturesResetPkSequenceTest < ActiveRecord :: TestCase
2005-10-18 19:52:07 -04:00
fixtures :accounts
2005-11-12 06:59:54 -05:00
fixtures :companies
2005-10-15 23:45:39 -04:00
2005-11-12 06:59:54 -05:00
def setup
@instances = [ Account . new ( :credit_limit = > 50 ) , Company . new ( :name = > 'RoR Consulting' ) ]
2012-05-12 07:17:03 -04:00
ActiveRecord :: FixtureSet . reset_cache # make sure tables get reinitialized
2005-11-12 06:59:54 -05:00
end
def test_resets_to_min_pk_with_specified_pk_and_sequence
@instances . each do | instance |
model = instance . class
model . delete_all
model . connection . reset_pk_sequence! ( model . table_name , model . primary_key , model . sequence_name )
2005-10-15 23:45:39 -04:00
2005-11-12 06:59:54 -05:00
instance . save!
assert_equal 1 , instance . id , " Sequence reset for #{ model . table_name } failed. "
end
2005-10-15 23:45:39 -04:00
end
2005-11-12 06:59:54 -05:00
def test_resets_to_min_pk_with_default_pk_and_sequence
@instances . each do | instance |
model = instance . class
model . delete_all
model . connection . reset_pk_sequence! ( model . table_name )
instance . save!
assert_equal 1 , instance . id , " Sequence reset for #{ model . table_name } failed. "
2005-10-15 23:45:39 -04:00
end
2005-11-12 06:59:54 -05:00
end
2005-10-15 23:45:39 -04:00
2007-09-28 10:56:07 -04:00
def test_create_fixtures_resets_sequences_when_not_cached
2005-11-12 06:59:54 -05:00
@instances . each do | instance |
2011-02-11 19:09:34 -05:00
max_id = create_fixtures ( instance . class . table_name ) . first . fixtures . inject ( 0 ) do | _max_id , ( _ , fixture ) |
2005-11-12 06:59:54 -05:00
fixture_id = fixture [ 'id' ] . to_i
2010-07-14 15:43:59 -04:00
fixture_id > _max_id ? fixture_id : _max_id
2005-11-12 06:59:54 -05:00
end
# Clone the last fixture to check that it gets the next greatest id.
instance . save!
assert_equal max_id + 1 , instance . id , " Sequence reset for #{ instance . class . table_name } failed. "
end
2005-10-15 23:45:39 -04:00
end
2005-10-14 22:01:38 -04:00
end
2005-03-06 08:51:55 -05:00
end
2008-01-21 12:20:51 -05:00
class FixturesWithoutInstantiationTest < ActiveRecord :: TestCase
2005-03-06 08:51:55 -05:00
self . use_instantiated_fixtures = false
fixtures :topics , :developers , :accounts
def test_without_complete_instantiation
2010-03-18 13:23:14 -04:00
assert ! defined? ( @first )
assert ! defined? ( @topics )
assert ! defined? ( @developers )
assert ! defined? ( @accounts )
2005-03-06 08:51:55 -05:00
end
def test_fixtures_from_root_yml_without_instantiation
2010-03-18 13:23:14 -04:00
assert ! defined? ( @unknown ) , " @unknown is not defined "
2005-03-06 08:51:55 -05:00
end
2010-08-14 01:13:00 -04:00
2010-05-16 10:12:13 -04:00
def test_visibility_of_accessor_method
assert_equal false , respond_to? ( :topics , false ) , " should be private method "
assert_equal true , respond_to? ( :topics , true ) , " confirm to respond surely "
end
2005-06-03 07:49:34 -04:00
def test_accessor_methods
assert_equal " The First Topic " , topics ( :first ) . title
assert_equal " Jamis " , developers ( :jamis ) . name
assert_equal 50 , accounts ( :signals37 ) . credit_limit
end
2007-06-04 23:47:02 -04:00
def test_accessor_methods_with_multiple_args
assert_equal 2 , topics ( :first , :second ) . size
assert_raise ( StandardError ) { topics ( [ :first , :second ] ) }
end
2009-02-03 21:25:37 -05:00
def test_reloading_fixtures_through_accessor_methods
assert_equal " The First Topic " , topics ( :first ) . title
@loaded_fixtures [ 'topics' ] [ 'first' ] . expects ( :find ) . returns ( stub ( :title = > " Fresh Topic! " ) )
assert_equal " Fresh Topic! " , topics ( :first , true ) . title
2007-06-04 23:47:02 -04:00
end
2005-03-06 08:51:55 -05:00
end
2008-01-21 12:20:51 -05:00
class FixturesWithoutInstanceInstantiationTest < ActiveRecord :: TestCase
2005-06-10 10:58:02 -04:00
self . use_instantiated_fixtures = true
2005-03-20 08:42:35 -05:00
self . use_instantiated_fixtures = :no_instances
2005-06-10 10:58:02 -04:00
2005-03-20 08:42:35 -05:00
fixtures :topics , :developers , :accounts
def test_without_instance_instantiation
2010-03-18 13:23:14 -04:00
assert ! defined? ( @first ) , " @first is not defined "
2005-03-20 08:42:35 -05:00
end
end
2008-01-21 12:20:51 -05:00
class TransactionalFixturesTest < ActiveRecord :: TestCase
2005-06-10 10:58:02 -04:00
self . use_instantiated_fixtures = true
2005-03-06 08:51:55 -05:00
self . use_transactional_fixtures = true
2005-06-10 10:58:02 -04:00
2005-03-06 08:51:55 -05:00
fixtures :topics
def test_destroy
assert_not_nil @first
@first . destroy
end
def test_destroy_just_kidding
assert_not_nil @first
end
2004-12-01 07:25:04 -05:00
end
2005-03-17 14:36:44 -05:00
2008-01-21 12:20:51 -05:00
class MultipleFixturesTest < ActiveRecord :: TestCase
2005-03-17 14:36:44 -05:00
fixtures :topics
fixtures :developers , :accounts
def test_fixture_table_names
2005-10-23 15:02:38 -04:00
assert_equal %w( topics developers accounts ) , fixture_table_names
2005-03-17 14:36:44 -05:00
end
end
2008-01-21 12:20:51 -05:00
class SetupTest < ActiveRecord :: TestCase
2007-12-19 17:49:27 -05:00
# fixtures :topics
2008-01-18 02:30:42 -05:00
2007-12-19 17:49:27 -05:00
def setup
@first = true
end
2008-01-18 02:30:42 -05:00
2007-12-19 17:49:27 -05:00
def test_nothing
end
end
class SetupSubclassTest < SetupTest
def setup
super
@second = true
end
2008-01-18 02:30:42 -05:00
2007-12-19 17:49:27 -05:00
def test_subclassing_should_preserve_setups
assert @first
assert @second
end
end
2008-01-21 12:20:51 -05:00
class OverlappingFixturesTest < ActiveRecord :: TestCase
2005-03-17 14:36:44 -05:00
fixtures :topics , :developers
fixtures :developers , :accounts
def test_fixture_table_names
2005-10-23 15:02:38 -04:00
assert_equal %w( topics developers accounts ) , fixture_table_names
2005-03-17 14:36:44 -05:00
end
end
2005-04-18 03:52:58 -04:00
2008-01-21 12:20:51 -05:00
class ForeignKeyFixturesTest < ActiveRecord :: TestCase
2005-04-18 03:52:58 -04:00
fixtures :fk_test_has_pk , :fk_test_has_fk
# if foreign keys are implemented and fixtures
# are not deleted in reverse order then this test
# case will raise StatementInvalid
def test_number1
assert true
end
def test_number2
assert true
end
end
2006-02-27 15:29:28 -05:00
2011-02-15 18:52:27 -05:00
class OverRideFixtureMethodTest < ActiveRecord :: TestCase
fixtures :topics
def topics ( name )
topic = super
topic . title = 'omg'
topic
end
def test_fixture_methods_can_be_overridden
x = topics :first
assert_equal 'omg' , x . title
end
end
2008-03-28 16:21:20 -04:00
class CheckSetTableNameFixturesTest < ActiveRecord :: TestCase
2013-08-24 04:11:18 -04:00
set_fixture_class :funny_jokes = > Joke
2006-02-27 15:29:28 -05:00
fixtures :funny_jokes
2010-08-14 01:13:00 -04:00
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
2008-03-28 07:55:01 -04:00
# and thus takes into account our set_fixture_class
self . use_transactional_fixtures = false
2007-09-28 10:56:07 -04:00
2006-02-27 15:29:28 -05:00
def test_table_method
assert_kind_of Joke , funny_jokes ( :a_joke )
end
end
2006-03-06 18:03:35 -05:00
2008-07-13 21:01:52 -04:00
class FixtureNameIsNotTableNameFixturesTest < ActiveRecord :: TestCase
set_fixture_class :items = > Book
fixtures :items
2010-08-14 01:13:00 -04:00
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
2008-07-13 21:01:52 -04:00
# and thus takes into account our set_fixture_class
self . use_transactional_fixtures = false
def test_named_accessor
assert_kind_of Book , items ( :dvd )
end
end
class FixtureNameIsNotTableNameMultipleFixturesTest < ActiveRecord :: TestCase
set_fixture_class :items = > Book , :funny_jokes = > Joke
fixtures :items , :funny_jokes
2010-08-14 01:13:00 -04:00
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
2008-07-13 21:01:52 -04:00
# and thus takes into account our set_fixture_class
self . use_transactional_fixtures = false
def test_named_accessor_of_differently_named_fixture
assert_kind_of Book , items ( :dvd )
end
def test_named_accessor_of_same_named_fixture
assert_kind_of Joke , funny_jokes ( :a_joke )
end
end
2008-01-21 12:20:51 -05:00
class CustomConnectionFixturesTest < ActiveRecord :: TestCase
2007-01-23 20:29:49 -05:00
set_fixture_class :courses = > Course
fixtures :courses
2008-03-28 07:55:01 -04:00
self . use_transactional_fixtures = false
2007-09-28 10:56:07 -04:00
2011-10-05 20:21:43 -04:00
def test_leaky_destroy
assert_nothing_raised { courses ( :ruby ) }
courses ( :ruby ) . destroy
end
def test_it_twice_in_whatever_order_to_check_for_fixture_leakage
test_leaky_destroy
end
end
class TransactionalFixturesOnCustomConnectionTest < ActiveRecord :: TestCase
set_fixture_class :courses = > Course
fixtures :courses
self . use_transactional_fixtures = true
def test_leaky_destroy
assert_nothing_raised { courses ( :ruby ) }
courses ( :ruby ) . destroy
end
def test_it_twice_in_whatever_order_to_check_for_fixture_leakage
test_leaky_destroy
end
2007-01-23 20:29:49 -05:00
end
2008-01-21 12:20:51 -05:00
class InvalidTableNameFixturesTest < ActiveRecord :: TestCase
2006-03-06 18:03:35 -05:00
fixtures :funny_jokes
2010-08-14 01:13:00 -04:00
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
2008-03-28 07:55:01 -04:00
# and thus takes into account our lack of set_fixture_class
self . use_transactional_fixtures = false
2006-03-06 18:03:35 -05:00
def test_raises_error
2012-03-22 19:25:48 -04:00
assert_raise ActiveRecord :: FixtureClassNotFound do
2006-03-06 18:03:35 -05:00
funny_jokes ( :a_joke )
end
end
end
2006-08-11 19:38:46 -04:00
2008-01-21 12:20:51 -05:00
class CheckEscapedYamlFixturesTest < ActiveRecord :: TestCase
2013-08-24 04:11:18 -04:00
set_fixture_class :funny_jokes = > Joke
2006-08-23 21:50:24 -04:00
fixtures :funny_jokes
2010-08-14 01:13:00 -04:00
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
2008-03-28 07:55:01 -04:00
# and thus takes into account our set_fixture_class
self . use_transactional_fixtures = false
2006-08-23 21:50:24 -04:00
def test_proper_escaped_fixture
assert_equal " The \\ n Aristocrats \n Ate the candy \n " , funny_jokes ( :another_joke ) . name
end
end
2007-09-28 10:56:07 -04:00
class DevelopersProject ; end
2008-01-21 12:20:51 -05:00
class ManyToManyFixturesWithClassDefined < ActiveRecord :: TestCase
2006-08-11 19:38:46 -04:00
fixtures :developers_projects
2007-09-28 10:56:07 -04:00
2006-08-11 19:38:46 -04:00
def test_this_should_run_cleanly
assert true
end
2006-10-09 03:48:27 -04:00
end
2008-01-21 12:20:51 -05:00
class FixturesBrokenRollbackTest < ActiveRecord :: TestCase
2011-10-05 20:21:43 -04:00
def blank_setup
@fixture_connections = [ ActiveRecord :: Base . connection ]
end
2008-01-05 08:34:15 -05:00
alias_method :ar_setup_fixtures , :setup_fixtures
alias_method :setup_fixtures , :blank_setup
2006-10-09 03:48:27 -04:00
alias_method :setup , :blank_setup
def blank_teardown ; end
2008-01-05 08:34:15 -05:00
alias_method :ar_teardown_fixtures , :teardown_fixtures
alias_method :teardown_fixtures , :blank_teardown
2006-10-09 03:48:27 -04:00
alias_method :teardown , :blank_teardown
def test_no_rollback_in_teardown_unless_transaction_active
2008-07-02 00:01:26 -04:00
assert_equal 0 , ActiveRecord :: Base . connection . open_transactions
2008-01-05 08:34:15 -05:00
assert_raise ( RuntimeError ) { ar_setup_fixtures }
2008-07-02 00:01:26 -04:00
assert_equal 0 , ActiveRecord :: Base . connection . open_transactions
2008-01-05 08:34:15 -05:00
assert_nothing_raised { ar_teardown_fixtures }
2008-07-02 00:01:26 -04:00
assert_equal 0 , ActiveRecord :: Base . connection . open_transactions
2006-10-09 03:48:27 -04:00
end
private
2013-08-26 18:24:23 -04:00
def load_fixtures ( config )
2006-10-09 03:48:27 -04:00
raise 'argh'
end
end
2007-02-25 12:31:43 -05:00
2008-01-21 12:20:51 -05:00
class LoadAllFixturesTest < ActiveRecord :: TestCase
2007-02-25 12:31:43 -05:00
def test_all_there
2013-11-16 03:22:05 -05:00
self . class . fixture_path = FIXTURES_ROOT + " /all "
self . class . fixtures :all
2014-02-08 19:52:32 -05:00
if File . symlink? FIXTURES_ROOT + " /all/admin "
assert_equal %w( admin/accounts admin/users developers people tasks ) , fixture_table_names . sort
end
2013-11-16 03:22:05 -05:00
ensure
ActiveRecord :: FixtureSet . reset_cache
2007-02-25 12:31:43 -05:00
end
end
2007-09-28 10:05:03 -04:00
2013-03-21 17:10:44 -04:00
class LoadAllFixturesWithPathnameTest < ActiveRecord :: TestCase
def test_all_there
2013-11-16 03:22:05 -05:00
self . class . fixture_path = Pathname . new ( FIXTURES_ROOT ) . join ( 'all' )
self . class . fixtures :all
2014-02-08 19:52:32 -05:00
if File . symlink? FIXTURES_ROOT + " /all/admin "
assert_equal %w( admin/accounts admin/users developers people tasks ) , fixture_table_names . sort
end
2013-11-16 03:22:05 -05:00
ensure
ActiveRecord :: FixtureSet . reset_cache
2013-03-21 17:10:44 -04:00
end
end
2008-01-21 12:20:51 -05:00
class FasterFixturesTest < ActiveRecord :: TestCase
2014-08-28 11:43:18 -04:00
self . use_transactional_fixtures = false
2007-09-28 10:05:03 -04:00
fixtures :categories , :authors
2007-09-28 10:56:07 -04:00
2007-09-28 10:05:03 -04:00
def load_extra_fixture ( name )
2011-02-11 19:09:34 -05:00
fixture = create_fixtures ( name ) . first
2012-05-12 07:17:03 -04:00
assert fixture . is_a? ( ActiveRecord :: FixtureSet )
2007-09-28 10:05:03 -04:00
@loaded_fixtures [ fixture . table_name ] = fixture
end
2007-09-28 10:56:07 -04:00
2007-09-28 10:05:03 -04:00
def test_cache
2012-05-12 07:17:03 -04:00
assert ActiveRecord :: FixtureSet . fixture_is_cached? ( ActiveRecord :: Base . connection , 'categories' )
assert ActiveRecord :: FixtureSet . fixture_is_cached? ( ActiveRecord :: Base . connection , 'authors' )
2007-09-28 10:56:07 -04:00
2007-09-28 10:05:03 -04:00
assert_no_queries do
create_fixtures ( 'categories' )
create_fixtures ( 'authors' )
end
2007-09-28 10:56:07 -04:00
2007-09-28 10:05:03 -04:00
load_extra_fixture ( 'posts' )
2012-05-12 07:17:03 -04:00
assert ActiveRecord :: FixtureSet . fixture_is_cached? ( ActiveRecord :: Base . connection , 'posts' )
2012-01-03 17:22:03 -05:00
self . class . setup_fixture_accessors :posts
2007-09-28 10:05:03 -04:00
assert_equal 'Welcome to the weblog' , posts ( :welcome ) . title
end
end
2007-10-26 01:56:46 -04:00
2008-01-21 12:20:51 -05:00
class FoxyFixturesTest < ActiveRecord :: TestCase
2010-04-14 13:15:27 -04:00
fixtures :parrots , :parrots_pirates , :pirates , :treasures , :mateys , :ships , :computers , :developers , :" admin/accounts " , :" admin/users "
2007-10-26 01:56:46 -04:00
2013-08-25 05:22:36 -04:00
if ActiveRecord :: Base . connection . adapter_name == 'PostgreSQL'
require 'models/uuid_parent'
require 'models/uuid_child'
2014-09-22 13:12:19 -04:00
fixtures :uuid_parents , :uuid_children
2013-08-25 05:22:36 -04:00
end
2007-10-26 01:56:46 -04:00
def test_identifies_strings
2012-05-12 07:17:03 -04:00
assert_equal ( ActiveRecord :: FixtureSet . identify ( " foo " ) , ActiveRecord :: FixtureSet . identify ( " foo " ) )
assert_not_equal ( ActiveRecord :: FixtureSet . identify ( " foo " ) , ActiveRecord :: FixtureSet . identify ( " FOO " ) )
2007-10-26 01:56:46 -04:00
end
def test_identifies_symbols
2012-05-12 07:17:03 -04:00
assert_equal ( ActiveRecord :: FixtureSet . identify ( :foo ) , ActiveRecord :: FixtureSet . identify ( :foo ) )
2007-10-26 01:56:46 -04:00
end
2009-05-11 23:22:20 -04:00
def test_identifies_consistently
2012-05-12 07:17:03 -04:00
assert_equal 207281424 , ActiveRecord :: FixtureSet . identify ( :ruby )
assert_equal 1066363776 , ActiveRecord :: FixtureSet . identify ( :sapphire_2 )
2013-08-25 05:22:36 -04:00
assert_equal 'f92b6bda-0d0d-5fe1-9124-502b18badded' , ActiveRecord :: FixtureSet . identify ( :daddy , :uuid )
assert_equal 'b4b10018-ad47-595d-b42f-d8bdaa6d01bf' , ActiveRecord :: FixtureSet . identify ( :sonny , :uuid )
2009-05-11 23:22:20 -04:00
end
2007-10-26 01:56:46 -04:00
TIMESTAMP_COLUMNS = %w( created_at created_on updated_at updated_on )
def test_populates_timestamp_columns
TIMESTAMP_COLUMNS . each do | property |
assert_not_nil ( parrots ( :george ) . send ( property ) , " should set #{ property } " )
end
end
2007-11-26 17:45:43 -05:00
def test_does_not_populate_timestamp_columns_if_model_has_set_record_timestamps_to_false
TIMESTAMP_COLUMNS . each do | property |
assert_nil ( ships ( :black_pearl ) . send ( property ) , " should not set #{ property } " )
end
end
2007-10-26 01:56:46 -04:00
def test_populates_all_columns_with_the_same_time
last = nil
TIMESTAMP_COLUMNS . each do | property |
current = parrots ( :george ) . send ( property )
last || = current
assert_equal ( last , current )
last = current
end
end
def test_only_populates_columns_that_exist
assert_not_nil ( pirates ( :blackbeard ) . created_on )
assert_not_nil ( pirates ( :blackbeard ) . updated_on )
end
def test_preserves_existing_fixture_data
2011-08-03 19:23:58 -04:00
assert_equal ( 2 . weeks . ago . to_date , pirates ( :redbeard ) . created_on . to_date )
assert_equal ( 2 . weeks . ago . to_date , pirates ( :redbeard ) . updated_on . to_date )
2007-10-26 01:56:46 -04:00
end
def test_generates_unique_ids
assert_not_nil ( parrots ( :george ) . id )
assert_not_equal ( parrots ( :george ) . id , parrots ( :louis ) . id )
end
2007-11-26 17:45:43 -05:00
def test_automatically_sets_primary_key
assert_not_nil ( ships ( :black_pearl ) )
end
def test_preserves_existing_primary_key
assert_equal ( 2 , ships ( :interceptor ) . id )
end
2007-10-26 01:56:46 -04:00
def test_resolves_belongs_to_symbols
assert_equal ( parrots ( :george ) , pirates ( :blackbeard ) . parrot )
end
2007-11-26 17:45:43 -05:00
def test_ignores_belongs_to_symbols_if_association_and_foreign_key_are_named_the_same
assert_equal ( developers ( :david ) , computers ( :workstation ) . developer )
end
2007-10-26 01:56:46 -04:00
def test_supports_join_tables
assert ( pirates ( :blackbeard ) . parrots . include? ( parrots ( :george ) ) )
assert ( pirates ( :blackbeard ) . parrots . include? ( parrots ( :louis ) ) )
assert ( parrots ( :george ) . pirates . include? ( pirates ( :blackbeard ) ) )
end
def test_supports_inline_habtm
assert ( parrots ( :george ) . treasures . include? ( treasures ( :diamond ) ) )
assert ( parrots ( :george ) . treasures . include? ( treasures ( :sapphire ) ) )
assert ( ! parrots ( :george ) . treasures . include? ( treasures ( :ruby ) ) )
end
2007-11-26 17:45:43 -05:00
def test_supports_inline_habtm_with_specified_id
assert ( parrots ( :polly ) . treasures . include? ( treasures ( :ruby ) ) )
assert ( parrots ( :polly ) . treasures . include? ( treasures ( :sapphire ) ) )
assert ( ! parrots ( :polly ) . treasures . include? ( treasures ( :diamond ) ) )
end
2007-10-26 01:56:46 -04:00
def test_supports_yaml_arrays
assert ( parrots ( :louis ) . treasures . include? ( treasures ( :diamond ) ) )
assert ( parrots ( :louis ) . treasures . include? ( treasures ( :sapphire ) ) )
end
def test_strips_DEFAULTS_key
assert_raise ( StandardError ) { parrots ( :DEFAULTS ) }
# this lets us do YAML defaults and not have an extra fixture entry
%w( sapphire ruby ) . each { | t | assert ( parrots ( :davey ) . treasures . include? ( treasures ( t ) ) ) }
end
def test_supports_label_interpolation
assert_equal ( " frederick " , parrots ( :frederick ) . name )
end
2007-11-20 16:53:22 -05:00
2014-03-15 21:49:04 -04:00
def test_supports_label_string_interpolation
assert_equal ( " X marks the spot! " , pirates ( :mark ) . catchphrase )
end
2015-01-06 04:24:41 -05:00
def test_supports_label_interpolation_for_fixnum_label
assert_equal ( " # 1 pirate! " , pirates ( 1 ) . catchphrase )
end
2007-11-20 16:53:22 -05:00
def test_supports_polymorphic_belongs_to
assert_equal ( pirates ( :redbeard ) , treasures ( :sapphire ) . looter )
assert_equal ( parrots ( :louis ) , treasures ( :ruby ) . looter )
end
2007-11-26 17:46:11 -05:00
2007-11-25 17:08:38 -05:00
def test_only_generates_a_pk_if_necessary
2012-04-26 13:32:55 -04:00
m = Matey . first
2007-11-25 17:08:38 -05:00
m . pirate = pirates ( :blackbeard )
m . target = pirates ( :redbeard )
end
2007-11-26 17:46:11 -05:00
def test_supports_sti
assert_kind_of DeadParrot , parrots ( :polly )
assert_equal pirates ( :blackbeard ) , parrots ( :polly ) . killer
end
2010-04-14 13:15:27 -04:00
def test_namespaced_models
assert admin_accounts ( :signals37 ) . users . include? ( admin_users ( :david ) )
assert_equal 2 , admin_accounts ( :signals37 ) . users . size
end
2007-10-26 01:56:46 -04:00
end
2007-10-31 01:43:52 -04:00
2008-01-21 12:20:51 -05:00
class ActiveSupportSubclassWithFixturesTest < ActiveRecord :: TestCase
2007-10-31 01:43:52 -04:00
fixtures :parrots
# This seemingly useless assertion catches a bug that caused the fixtures
# setup code call nil[]
def test_foo
2013-01-18 09:15:19 -05:00
assert_equal parrots ( :louis ) , Parrot . find_by_name ( " King Louis " )
2007-10-31 01:43:52 -04:00
end
2007-11-26 17:45:43 -05:00
end
2008-03-17 17:48:28 -04:00
2011-12-19 10:00:24 -05:00
class CustomNameForFixtureOrModelTest < ActiveRecord :: TestCase
2012-05-12 07:17:03 -04:00
ActiveRecord :: FixtureSet . reset_cache
2011-12-19 10:00:24 -05:00
set_fixture_class :randomly_named_a9 = >
ClassNameThatDoesNotFollowCONVENTIONS ,
:'admin/randomly_named_a9' = >
Admin :: ClassNameThatDoesNotFollowCONVENTIONS ,
'admin/randomly_named_b0' = >
Admin :: ClassNameThatDoesNotFollowCONVENTIONS
fixtures :randomly_named_a9 , 'admin/randomly_named_a9' ,
:'admin/randomly_named_b0'
def test_named_accessor_for_randomly_named_fixture_and_class
assert_kind_of ClassNameThatDoesNotFollowCONVENTIONS ,
randomly_named_a9 ( :first_instance )
end
def test_named_accessor_for_randomly_named_namespaced_fixture_and_class
assert_kind_of Admin :: ClassNameThatDoesNotFollowCONVENTIONS ,
admin_randomly_named_a9 ( :first_instance )
assert_kind_of Admin :: ClassNameThatDoesNotFollowCONVENTIONS ,
admin_randomly_named_b0 ( :second_instance )
end
2011-12-20 15:32:39 -05:00
def test_table_name_is_defined_in_the_model
2012-05-12 07:17:03 -04:00
assert_equal 'randomly_named_table' , ActiveRecord :: FixtureSet :: all_loaded_fixtures [ " admin/randomly_named_a9 " ] . table_name
2012-01-26 03:10:52 -05:00
assert_equal 'randomly_named_table' , Admin :: ClassNameThatDoesNotFollowCONVENTIONS . table_name
2011-12-20 15:32:39 -05:00
end
2011-12-19 10:00:24 -05:00
end
2014-11-21 08:57:25 -05:00
class FixturesWithDefaultScopeTest < ActiveRecord :: TestCase
fixtures :bulbs
test " inserts fixtures excluded by a default scope " do
assert_equal 1 , Bulb . count
assert_equal 2 , Bulb . unscoped . count
end
test " allows access to fixtures excluded by a default scope " do
assert_equal " special " , bulbs ( :special ) . name
end
end