class FixturesTest

Constants

FIXTURES
MATCH_ATTRIBUTE_NAME

Public Class Methods

name() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 179
def self.name
  "OtherTopic"
end

Public Instance Methods

test_attributes() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 119
def test_attributes
  topics = create_fixtures("topics").first
  assert_equal("The First Topic", topics["first"]["title"])
  assert_nil(topics["second"]["author_email_address"])
end
test_binary_in_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 311
def test_binary_in_fixtures
  data = File.open(ASSETS_ROOT + "/flowers.jpg", "rb") { |f| f.read }
  data.force_encoding("ASCII-8BIT")
  data.freeze
  assert_equal data, @flowers.data
  assert_equal data, @binary_helper.data
end
test_broken_yaml_exception() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 84
def test_broken_yaml_exception
  badyaml = Tempfile.new ["foo", ".yml"]
  badyaml.write "a: : "
  badyaml.flush

  dir  = File.dirname badyaml.path
  name = File.basename badyaml.path, ".yml"
  assert_raises(ActiveRecord::Fixture::FormatError) do
    ActiveRecord::FixtureSet.create_fixtures(dir, name)
  end
ensure
  badyaml.close
  badyaml.unlink
end
test_bulk_insert() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 72
def test_bulk_insert
  begin
    subscriber = InsertQuerySubscriber.new
    subscription = ActiveSupport::Notifications.subscribe("sql.active_record", subscriber)
    create_fixtures("bulbs")
    assert_equal 1, subscriber.events.size, "It takes one INSERT query to insert two fixtures"
  ensure
    ActiveSupport::Notifications.unsubscribe(subscription)
  end
end
test_clean_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 46
def test_clean_fixtures
  FIXTURES.each do |name|
    fixtures = nil
    assert_nothing_raised { fixtures = create_fixtures(name).first }
    assert_kind_of(ActiveRecord::FixtureSet, fixtures)
    fixtures.each { |_name, fixture|
      fixture.each { |key, value|
        assert_match(MATCH_ATTRIBUTE_NAME, key)
      }
    }
  end
end
test_complete_instantiation() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 227
def test_complete_instantiation
  assert_equal "The First Topic", @first.title
end
test_create_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 99
def test_create_fixtures
  fixtures = ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, "parrots")
  assert Parrot.find_by_name("Curious George"), "George is not in the database"
  assert fixtures.detect { |f| f.name == "parrots" }, "no fixtures named 'parrots' in #{fixtures.map(&:name).inspect}"
end
test_create_symbol_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 112
def test_create_symbol_fixtures
  fixtures = ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, :collections, collections: Course) { Course.connection }

  assert Course.find_by_name("Collection"), "course is not in the database"
  assert fixtures.detect { |f| f.name == "collections" }, "no fixtures named 'collections' in #{fixtures.map(&:name).inspect}"
end
test_dirty_dirty_yaml_file() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 258
def test_dirty_dirty_yaml_file
  fixture_path = FIXTURES_ROOT + "/naked/yml/courses"
  error = assert_raise(ActiveRecord::Fixture::FormatError) do
    ActiveRecord::FixtureSet.new(Account.connection, "courses", Course, fixture_path)
  end
  assert_equal "fixture is not a hash: #{fixture_path}.yml", error.to_s
end
test_empty_yaml_fixture() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 239
def test_empty_yaml_fixture
  assert_not_nil ActiveRecord::FixtureSet.new(Account.connection, "accounts", Account, FIXTURES_ROOT + "/naked/yml/accounts")
end
test_empty_yaml_fixture_with_a_comment_in_it() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 243
def test_empty_yaml_fixture_with_a_comment_in_it
  assert_not_nil ActiveRecord::FixtureSet.new(Account.connection, "companies", Company, FIXTURES_ROOT + "/naked/yml/companies")
end
test_erb_in_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 235
def test_erb_in_fixtures
  assert_equal "fixture_5", @dev_5.name
end
test_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 330
def test_fixtures
  assert accounts(:signals37)
end
test_fixtures_are_set_up_with_database_env_variable() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 323
def test_fixtures_are_set_up_with_database_env_variable
  db_url_tmp = ENV["DATABASE_URL"]
  ENV["DATABASE_URL"] = "sqlite3::memory:"
  ActiveRecord::Base.stub(:configurations, {}) do
    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}"
  end
ensure
  ENV["DATABASE_URL"] = db_url_tmp
end
test_fixtures_from_root_yml_with_instantiation() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 231
def test_fixtures_from_root_yml_with_instantiation
  assert_equal 50, @unknown.credit_limit
end
test_insert_with_datetime() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 210
def test_insert_with_datetime
  create_fixtures("tasks")
  first = Task.find(1)
  assert first
end
test_inserts() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 143
def test_inserts
  create_fixtures("topics")
  first_row = ActiveRecord::Base.connection.select_one("SELECT * FROM topics WHERE author_name = 'David'")
  assert_equal("The First Topic", first_row["title"])

  second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM topics WHERE author_name = 'Mary'")
  assert_nil(second_row["author_email_address"])
end
test_inserts_with_pre_and_suffix() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 152
def test_inserts_with_pre_and_suffix
  # Reset cache to make finds on the new table work
  ActiveRecord::FixtureSet.reset_cache

  ActiveRecord::Base.connection.create_table :prefix_other_topics_suffix do |t|
    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
    t.column :content, :string
    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"

  other_topic_klass = Class.new(ActiveRecord::Base) do
    def self.name
      "OtherTopic"
    end
  end

  topics = [create_fixtures("other_topics")].flatten.first

  # 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"

  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

ensure
  # Restore prefix/suffix to its previous values
  ActiveRecord::Base.table_name_prefix = old_prefix
  ActiveRecord::Base.table_name_suffix = old_suffix

  ActiveRecord::Base.connection.drop_table :prefix_other_topics_suffix rescue nil
end
test_instantiation() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 222
def test_instantiation
  topics = create_fixtures("topics").first
  assert_kind_of Topic, topics["first"].find
end
test_logger_level_invariant() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 216
def test_logger_level_invariant
  level = ActiveRecord::Base.logger.level
  create_fixtures("topics")
  assert_equal level, ActiveRecord::Base.logger.level
end
test_multiple_clean_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 105
def test_multiple_clean_fixtures
  fixtures_array = nil
  assert_nothing_raised { fixtures_array = create_fixtures(*FIXTURES) }
  assert_kind_of(Array, fixtures_array)
  fixtures_array.each { |fixtures| assert_kind_of(ActiveRecord::FixtureSet, fixtures) }
end
test_nil_raises() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 138
def test_nil_raises
  assert_raise(StandardError) { topics(nil) }
  assert_raise(StandardError) { topics([nil]) }
end
test_no_args_record_returns_all_without_array() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 132
def test_no_args_record_returns_all_without_array
  all_binaries = binaries
  assert_kind_of(Array, all_binaries)
  assert_equal 2, binaries.length
end
test_no_args_returns_all() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 125
def test_no_args_returns_all
  all_topics = topics
  assert_equal 5, all_topics.length
  assert_equal "The First Topic", all_topics.first["title"]
  assert_equal 5, all_topics.last.id
end
test_nonexistent_fixture_file() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 247
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?

  assert_raise(Errno::ENOENT) do
    ActiveRecord::FixtureSet.new(Account.connection, "companies", Company, nonexistent_fixture_path)
  end
end
test_omap_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 290
def test_omap_fixtures
  assert_nothing_raised do
    fixtures = ActiveRecord::FixtureSet.new(Account.connection, "categories", Category, FIXTURES_ROOT + "/categories_ordered")

    fixtures.each.with_index do |(name, fixture), i|
      assert_equal "fixture_no_#{i}", name
      assert_equal "Category #{i}", fixture["name"]
    end
  end
end
test_serialized_fixtures() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 319
def test_serialized_fixtures
  assert_equal ["Green", "Red", "Orange"], traffic_lights(:uk).state
end
test_subsubdir_file_with_arbitrary_name() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 306
def test_subsubdir_file_with_arbitrary_name
  assert_equal(categories(:sub_special_3).name, "A special category in an arbitrarily named subsubdir file")
  assert_equal(categories(:sub_special_3).class, SpecialCategory)
end
test_yaml_file_with_invalid_column() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 274
def test_yaml_file_with_invalid_column
  e = assert_raise(ActiveRecord::Fixture::FixtureError) do
    ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT + "/naked/yml", "parrots")
  end

  if current_adapter?(:SQLite3Adapter)
    assert_equal(%(table "parrots" has no column named "arrr".), e.message)
  else
    assert_equal(%(table "parrots" has no columns named "arrr", "foobar".), e.message)
  end
end
test_yaml_file_with_one_invalid_fixture() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 266
def test_yaml_file_with_one_invalid_fixture
  fixture_path = FIXTURES_ROOT + "/naked/yml/courses_with_invalid_key"
  error = assert_raise(ActiveRecord::Fixture::FormatError) do
    ActiveRecord::FixtureSet.new(Account.connection, "courses", Course, fixture_path)
  end
  assert_equal "fixture key is not a hash: #{fixture_path}.yml, keys: [\"two\"]", error.to_s
end
test_yaml_file_with_symbol_columns() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 286
def test_yaml_file_with_symbol_columns
  ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT + "/naked/yml", "trees")
end
test_yml_file_in_subdirectory() click to toggle source
# File activerecord/test/cases/fixtures_test.rb, line 301
def test_yml_file_in_subdirectory
  assert_equal(categories(:sub_special_1).name, "A special category in a subdir file")
  assert_equal(categories(:sub_special_1).class, SpecialCategory)
end