class MultiParameterAttributeTest

Public Instance Methods

test_create_with_multiparameter_attributes_setting_date_and_time_attribute() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 324
def test_create_with_multiparameter_attributes_setting_date_and_time_attribute
  topic = Topic.create_with(
    "written_on(1i)" => "1952",
    "written_on(2i)" => "3",
    "written_on(3i)" => "11",
    "written_on(4i)" => "13",
    "written_on(5i)" => "55").new
  assert_equal 1952, topic.written_on.year
  assert_equal 3, topic.written_on.month
  assert_equal 11, topic.written_on.day
  assert_equal 13, topic.written_on.hour
  assert_equal 55, topic.written_on.min
end
test_create_with_multiparameter_attributes_setting_date_attribute() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 303
def test_create_with_multiparameter_attributes_setting_date_attribute
  topic = Topic.create_with("written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11").new
  assert_equal 1952, topic.written_on.year
  assert_equal 3, topic.written_on.month
  assert_equal 11, topic.written_on.day
end
test_multiparameter_assigned_attributes_did_not_come_from_user() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 389
def test_multiparameter_assigned_attributes_did_not_come_from_user
  topic = Topic.new(
    "written_on(1i)" => "1952",
    "written_on(2i)" => "3",
    "written_on(3i)" => "11",
    "written_on(4i)" => "13",
    "written_on(5i)" => "55",
  )
  refute_predicate topic, :written_on_came_from_user?
end
test_multiparameter_assignment_of_aggregation() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 344
def test_multiparameter_assignment_of_aggregation
  customer = Customer.new
  address = Address.new("The Street", "The City", "The Country")
  attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
  customer.attributes = attributes
  assert_equal address, customer.address
end
test_multiparameter_assignment_of_aggregation_out_of_order() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 352
def test_multiparameter_assignment_of_aggregation_out_of_order
  customer = Customer.new
  address = Address.new("The Street", "The City", "The Country")
  attributes = { "address(3)" => address.country, "address(2)" => address.city, "address(1)" => address.street }
  customer.attributes = attributes
  assert_equal address, customer.address
end
test_multiparameter_assignment_of_aggregation_with_blank_values() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 370
def test_multiparameter_assignment_of_aggregation_with_blank_values
  customer = Customer.new
  address = Address.new("The Street", "The City", "The Country")
  attributes = { "address(1)" => "", "address(2)" => address.city, "address(3)" => address.country }
  customer.attributes = attributes
  assert_equal Address.new(nil, "The City", "The Country"), customer.address
end
test_multiparameter_assignment_of_aggregation_with_large_index() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 378
def test_multiparameter_assignment_of_aggregation_with_large_index
  ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    customer = Customer.new
    address = Address.new("The Street", "The City", "The Country")
    attributes = { "address(1)" => "The Street", "address(2)" => address.city, "address(3000)" => address.country }
    customer.attributes = attributes
  end

  assert_equal("address", ex.errors[0].attribute)
end
test_multiparameter_assignment_of_aggregation_with_missing_values() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 360
def test_multiparameter_assignment_of_aggregation_with_missing_values
  ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    customer = Customer.new
    address = Address.new("The Street", "The City", "The Country")
    attributes = { "address(2)" => address.city, "address(3)" => address.country }
    customer.attributes = attributes
  end
  assert_equal("address", ex.errors[0].attribute)
end
test_multiparameter_attributes_on_date() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 10
def test_multiparameter_attributes_on_date
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "24" }
  topic = Topic.find(1)
  topic.attributes = attributes
  # note that extra #to_date call allows test to pass for Oracle, which
  # treats dates/times the same
  assert_equal Date.new(2004, 6, 24), topic.last_read.to_date
end
test_multiparameter_attributes_on_date_with_all_empty() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 61
def test_multiparameter_attributes_on_date_with_all_empty
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_date_with_empty_day() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 33
def test_multiparameter_attributes_on_date_with_empty_day
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_date_with_empty_day_and_month() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 47
def test_multiparameter_attributes_on_date_with_empty_day_and_month
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_date_with_empty_day_and_year() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 40
def test_multiparameter_attributes_on_date_with_empty_day_and_year
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_date_with_empty_month() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 26
def test_multiparameter_attributes_on_date_with_empty_month
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "24" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_date_with_empty_year() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 19
def test_multiparameter_attributes_on_date_with_empty_year
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "24" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_date_with_empty_year_and_month() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 54
def test_multiparameter_attributes_on_date_with_empty_year_and_month
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "24" }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.last_read
end
test_multiparameter_attributes_on_time() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 68
def test_multiparameter_attributes_on_time
  with_timezone_config default: :local do
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
  end
end
test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 254
def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
  with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
    Topic.reset_column_information
    attributes = {
      "bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
      "bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.zone.local(2000, 1, 1, 16, 24, 0), topic.bonus_time
    assert_not topic.bonus_time.utc?

    attributes = {
      "written_on(1i)" => "2000", "written_on(2i)" => "", "written_on(3i)" => "",
      "written_on(4i)" => "", "written_on(5i)" => ""
    }
    topic.attributes = attributes
    assert_nil topic.written_on
  end
ensure
  Topic.reset_column_information
end
test_multiparameter_attributes_on_time_will_ignore_date_if_empty() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 158
def test_multiparameter_attributes_on_time_will_ignore_date_if_empty
  attributes = {
    "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
    "written_on(4i)" => "16", "written_on(5i)" => "24"
  }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.written_on
end
test_multiparameter_attributes_on_time_will_ignore_hour_if_blank() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 148
def test_multiparameter_attributes_on_time_will_ignore_hour_if_blank
  attributes = {
    "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
    "written_on(4i)" => "", "written_on(5i)" => "12", "written_on(6i)" => "02"
  }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.written_on
end
test_multiparameter_attributes_on_time_will_ignore_hour_if_missing() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 136
def test_multiparameter_attributes_on_time_will_ignore_hour_if_missing
  with_timezone_config default: :local do
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "12", "written_on(3i)" => "12",
      "written_on(5i)" => "12", "written_on(6i)" => "02"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.local(2004, 12, 12, 0, 12, 2), topic.written_on
  end
end
test_multiparameter_attributes_on_time_will_raise_on_big_time_if_missing_date_parts() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 114
def test_multiparameter_attributes_on_time_will_raise_on_big_time_if_missing_date_parts
  ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    attributes = {
      "written_on(4i)" => "16", "written_on(5i)" => "24"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
  end
  assert_equal("written_on", ex.errors[0].attribute)
end
test_multiparameter_attributes_on_time_with_empty_seconds() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 284
def test_multiparameter_attributes_on_time_with_empty_seconds
  with_timezone_config default: :local do
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
  end
end
test_multiparameter_attributes_on_time_with_invalid_time_params() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 91
def test_multiparameter_attributes_on_time_with_invalid_time_params
  ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "2004", "written_on(5i)" => "36", "written_on(6i)" => "64",
    }
    topic = Topic.find(1)
    topic.attributes = attributes
  end
  assert_equal("written_on", ex.errors[0].attribute)
end
test_multiparameter_attributes_on_time_with_no_date() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 80
def test_multiparameter_attributes_on_time_with_no_date
  ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    attributes = {
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
  end
  assert_equal("written_on", ex.errors[0].attribute)
end
test_multiparameter_attributes_on_time_with_old_date() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 103
def test_multiparameter_attributes_on_time_with_old_date
  attributes = {
    "written_on(1i)" => "1850", "written_on(2i)" => "6", "written_on(3i)" => "24",
    "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
  }
  topic = Topic.find(1)
  topic.attributes = attributes
  # testing against to_s(:db) representation because either a Time or a DateTime might be returned, depending on platform
  assert_equal "1850-06-24 16:24:00", topic.written_on.to_s(:db)
end
test_multiparameter_attributes_on_time_with_raise_on_small_time_if_missing_date_parts() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 125
def test_multiparameter_attributes_on_time_with_raise_on_small_time_if_missing_date_parts
  ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    attributes = {
      "written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
  end
  assert_equal("written_on", ex.errors[0].attribute)
end
test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 168
def test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty
  attributes = {
    "written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
    "written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
  }
  topic = Topic.find(1)
  topic.attributes = attributes
  assert_nil topic.written_on
end
test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 234
def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
  with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
    Topic.skip_time_zone_conversion_for_attributes = [:written_on]
    Topic.reset_column_information
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
    assert_equal false, topic.written_on.respond_to?(:time_zone)
  end
ensure
  Topic.skip_time_zone_conversion_for_attributes = []
  Topic.reset_column_information
end
test_multiparameter_attributes_on_time_with_time_zone_aware_attributes() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 190
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes
  with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
    Topic.reset_column_information
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.utc(2004, 6, 24, 23, 24, 0), topic.written_on
    assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
    assert_equal Time.zone, topic.written_on.time_zone
  end
ensure
  Topic.reset_column_information
end
test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_and_invalid_time_params() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 207
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_and_invalid_time_params
  with_timezone_config aware_attributes: true do
    Topic.reset_column_information
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "", "written_on(3i)" => ""
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_nil topic.written_on
  end
ensure
  Topic.reset_column_information
end
test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 221
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
  with_timezone_config default: :local, aware_attributes: false, zone: -28800 do
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
    assert_equal false, topic.written_on.respond_to?(:time_zone)
  end
end
test_multiparameter_attributes_on_time_with_utc() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 178
def test_multiparameter_attributes_on_time_with_utc
  with_timezone_config default: :utc do
    attributes = {
      "written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
      "written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
    }
    topic = Topic.find(1)
    topic.attributes = attributes
    assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
  end
end
test_multiparameter_attributes_setting_date_and_time_attribute() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 310
def test_multiparameter_attributes_setting_date_and_time_attribute
  topic = Topic.new(
    "written_on(1i)" => "1952",
    "written_on(2i)" => "3",
    "written_on(3i)" => "11",
    "written_on(4i)" => "13",
    "written_on(5i)" => "55")
  assert_equal 1952, topic.written_on.year
  assert_equal 3, topic.written_on.month
  assert_equal 11, topic.written_on.day
  assert_equal 13, topic.written_on.hour
  assert_equal 55, topic.written_on.min
end
test_multiparameter_attributes_setting_date_attribute() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 296
def test_multiparameter_attributes_setting_date_attribute
  topic = Topic.new("written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11")
  assert_equal 1952, topic.written_on.year
  assert_equal 3, topic.written_on.month
  assert_equal 11, topic.written_on.day
end
test_multiparameter_attributes_setting_time_attribute() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 277
def test_multiparameter_attributes_setting_time_attribute
  topic = Topic.new("bonus_time(4i)" => "01", "bonus_time(5i)" => "05")
  assert_equal 1, topic.bonus_time.hour
  assert_equal 5, topic.bonus_time.min
end
test_multiparameter_attributes_setting_time_but_not_date_on_date_field() click to toggle source
# File activerecord/test/cases/multiparameter_attributes_test.rb, line 338
def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
  assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
    Topic.new("written_on(4i)" => "13", "written_on(5i)" => "55")
  end
end