ibm_db 2.5.9 → 2.5.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,9 +21,19 @@ require 'models/parrot'
21
21
  require 'models/person'
22
22
  require 'models/edge'
23
23
  require 'models/joke'
24
+ require 'models/bulb'
25
+ require 'models/bird'
24
26
  require 'rexml/document'
25
27
  require 'active_support/core_ext/exception'
28
+ require 'bcrypt'
26
29
 
30
+ class FirstAbstractClass < ActiveRecord::Base
31
+ self.abstract_class = true
32
+ end
33
+ class SecondAbstractClass < FirstAbstractClass
34
+ self.abstract_class = true
35
+ end
36
+ class Photo < SecondAbstractClass; end
27
37
  class Category < ActiveRecord::Base; end
28
38
  class Categorization < ActiveRecord::Base; end
29
39
  class Smarts < ActiveRecord::Base; end
@@ -53,9 +63,28 @@ class Weird < ActiveRecord::Base; end
53
63
 
54
64
  class Boolean < ActiveRecord::Base; end
55
65
 
66
+ class LintTest < ActiveRecord::TestCase
67
+ include ActiveModel::Lint::Tests
68
+
69
+ class LintModel < ActiveRecord::Base; end
70
+
71
+ def setup
72
+ @model = LintModel.new
73
+ end
74
+ end
75
+
56
76
  class BasicsTest < ActiveRecord::TestCase
57
77
  fixtures :topics, :companies, :developers, :projects, :computers, :accounts, :minimalistics, 'warehouse_things', :authors, :categorizations, :categories, :posts
58
78
 
79
+ def test_generated_methods_modules
80
+ modules = Computer.ancestors
81
+ assert modules.include?(Computer::GeneratedFeatureMethods)
82
+ assert_equal(Computer::GeneratedFeatureMethods, Computer.generated_feature_methods)
83
+ assert(modules.index(Computer.generated_attribute_methods) > modules.index(Computer.generated_feature_methods),
84
+ "generated_attribute_methods must be higher in inheritance hierarchy than generated_feature_methods")
85
+ assert_not_equal Computer.generated_feature_methods, Post.generated_feature_methods
86
+ end
87
+
59
88
  def test_column_names_are_escaped
60
89
  conn = ActiveRecord::Base.connection
61
90
  classname = conn.class.name[/[^:]*$/]
@@ -257,6 +286,41 @@ class BasicsTest < ActiveRecord::TestCase
257
286
  end
258
287
  end
259
288
 
289
+ def test_create_after_initialize_without_block
290
+ cb = CustomBulb.create(:name => 'Dude')
291
+ assert_equal('Dude', cb.name)
292
+ assert_equal(true, cb.frickinawesome)
293
+ end
294
+
295
+ def test_create_after_initialize_with_block
296
+ cb = CustomBulb.create {|c| c.name = 'Dude' }
297
+ assert_equal('Dude', cb.name)
298
+ assert_equal(true, cb.frickinawesome)
299
+ end
300
+
301
+ def test_first_or_create
302
+ parrot = Bird.first_or_create(:color => 'green', :name => 'parrot')
303
+ assert parrot.persisted?
304
+ the_same_parrot = Bird.first_or_create(:color => 'yellow', :name => 'macaw')
305
+ assert_equal parrot, the_same_parrot
306
+ end
307
+
308
+ def test_first_or_create_bang
309
+ assert_raises(ActiveRecord::RecordInvalid) { Bird.first_or_create! }
310
+ parrot = Bird.first_or_create!(:color => 'green', :name => 'parrot')
311
+ assert parrot.persisted?
312
+ the_same_parrot = Bird.first_or_create!(:color => 'yellow', :name => 'macaw')
313
+ assert_equal parrot, the_same_parrot
314
+ end
315
+
316
+ def test_first_or_initialize
317
+ parrot = Bird.first_or_initialize(:color => 'green', :name => 'parrot')
318
+ assert_kind_of Bird, parrot
319
+ assert !parrot.persisted?
320
+ assert parrot.new_record?
321
+ assert parrot.valid?
322
+ end
323
+
260
324
  def test_load
261
325
  topics = Topic.find(:all, :order => 'id')
262
326
  assert_equal(4, topics.size)
@@ -516,17 +580,12 @@ class BasicsTest < ActiveRecord::TestCase
516
580
  weird = Weird.create('a$b' => 'value')
517
581
  weird.reload
518
582
  assert_equal 'value', weird.send('a$b')
583
+ assert_equal 'value', weird.read_attribute('a$b')
519
584
 
520
585
  weird.update_column('a$b', 'value2')
521
586
  weird.reload
522
587
  assert_equal 'value2', weird.send('a$b')
523
- end
524
-
525
- def test_attributes_guard_protected_attributes_is_deprecated
526
- attributes = { "title" => "An amazing title" }
527
- post = ProtectedTitlePost.new
528
- assert_deprecated { post.send(:attributes=, attributes, false) }
529
- assert_equal "An amazing title", post.title
588
+ assert_equal 'value2', weird.read_attribute('a$b')
530
589
  end
531
590
 
532
591
  def test_multiparameter_attributes_on_date
@@ -544,7 +603,7 @@ class BasicsTest < ActiveRecord::TestCase
544
603
  topic.attributes = attributes
545
604
  # note that extra #to_date call allows test to pass for Oracle, which
546
605
  # treats dates/times the same
547
- assert_date_from_db Date.new(1, 6, 24), topic.last_read.to_date
606
+ assert_nil topic.last_read
548
607
  end
549
608
 
550
609
  def test_multiparameter_attributes_on_date_with_empty_month
@@ -553,7 +612,7 @@ class BasicsTest < ActiveRecord::TestCase
553
612
  topic.attributes = attributes
554
613
  # note that extra #to_date call allows test to pass for Oracle, which
555
614
  # treats dates/times the same
556
- assert_date_from_db Date.new(2004, 1, 24), topic.last_read.to_date
615
+ assert_nil topic.last_read
557
616
  end
558
617
 
559
618
  def test_multiparameter_attributes_on_date_with_empty_day
@@ -562,7 +621,7 @@ class BasicsTest < ActiveRecord::TestCase
562
621
  topic.attributes = attributes
563
622
  # note that extra #to_date call allows test to pass for Oracle, which
564
623
  # treats dates/times the same
565
- assert_date_from_db Date.new(2004, 6, 1), topic.last_read.to_date
624
+ assert_nil topic.last_read
566
625
  end
567
626
 
568
627
  def test_multiparameter_attributes_on_date_with_empty_day_and_year
@@ -571,7 +630,7 @@ class BasicsTest < ActiveRecord::TestCase
571
630
  topic.attributes = attributes
572
631
  # note that extra #to_date call allows test to pass for Oracle, which
573
632
  # treats dates/times the same
574
- assert_date_from_db Date.new(1, 6, 1), topic.last_read.to_date
633
+ assert_nil topic.last_read
575
634
  end
576
635
 
577
636
  def test_multiparameter_attributes_on_date_with_empty_day_and_month
@@ -580,7 +639,7 @@ class BasicsTest < ActiveRecord::TestCase
580
639
  topic.attributes = attributes
581
640
  # note that extra #to_date call allows test to pass for Oracle, which
582
641
  # treats dates/times the same
583
- assert_date_from_db Date.new(2004, 1, 1), topic.last_read.to_date
642
+ assert_nil topic.last_read
584
643
  end
585
644
 
586
645
  def test_multiparameter_attributes_on_date_with_empty_year_and_month
@@ -589,7 +648,7 @@ class BasicsTest < ActiveRecord::TestCase
589
648
  topic.attributes = attributes
590
649
  # note that extra #to_date call allows test to pass for Oracle, which
591
650
  # treats dates/times the same
592
- assert_date_from_db Date.new(1, 1, 24), topic.last_read.to_date
651
+ assert_nil topic.last_read
593
652
  end
594
653
 
595
654
  def test_multiparameter_attributes_on_date_with_all_empty
@@ -682,12 +741,7 @@ class BasicsTest < ActiveRecord::TestCase
682
741
  }
683
742
  topic = Topic.find(1)
684
743
  topic.attributes = attributes
685
- assert_equal 1, topic.written_on.year
686
- assert_equal 1, topic.written_on.month
687
- assert_equal 1, topic.written_on.day
688
- assert_equal 0, topic.written_on.hour
689
- assert_equal 12, topic.written_on.min
690
- assert_equal 2, topic.written_on.sec
744
+ assert_nil topic.written_on
691
745
  end
692
746
 
693
747
  def test_multiparameter_attributes_on_time_will_ignore_date_if_empty
@@ -697,12 +751,7 @@ class BasicsTest < ActiveRecord::TestCase
697
751
  }
698
752
  topic = Topic.find(1)
699
753
  topic.attributes = attributes
700
- assert_equal 1, topic.written_on.year
701
- assert_equal 1, topic.written_on.month
702
- assert_equal 1, topic.written_on.day
703
- assert_equal 16, topic.written_on.hour
704
- assert_equal 24, topic.written_on.min
705
- assert_equal 0, topic.written_on.sec
754
+ assert_nil topic.written_on
706
755
  end
707
756
  def test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty
708
757
  attributes = {
@@ -711,12 +760,7 @@ class BasicsTest < ActiveRecord::TestCase
711
760
  }
712
761
  topic = Topic.find(1)
713
762
  topic.attributes = attributes
714
- assert_equal 1, topic.written_on.year
715
- assert_equal 1, topic.written_on.month
716
- assert_equal 1, topic.written_on.day
717
- assert_equal 16, topic.written_on.hour
718
- assert_equal 12, topic.written_on.min
719
- assert_equal 02, topic.written_on.sec
763
+ assert_nil topic.written_on
720
764
  end
721
765
 
722
766
  def test_multiparameter_attributes_on_time_with_utc
@@ -1170,19 +1214,6 @@ class BasicsTest < ActiveRecord::TestCase
1170
1214
  assert(auto.id > 0)
1171
1215
  end
1172
1216
 
1173
- def quote_column_name(name)
1174
- "<#{name}>"
1175
- end
1176
-
1177
- def test_quote_keys
1178
- ar = AutoId.new
1179
- source = {"foo" => "bar", "baz" => "quux"}
1180
- actual = ar.send(:quote_columns, self, source)
1181
- inverted = actual.invert
1182
- assert_equal("<foo>", inverted["bar"])
1183
- assert_equal("<baz>", inverted["quux"])
1184
- end
1185
-
1186
1217
  def test_sql_injection_via_find
1187
1218
  assert_raise(ActiveRecord::RecordNotFound, ActiveRecord::StatementInvalid) do
1188
1219
  Topic.find("123456 OR id > 0")
@@ -1220,6 +1251,42 @@ class BasicsTest < ActiveRecord::TestCase
1220
1251
  assert_equal(myobj, topic.content)
1221
1252
  end
1222
1253
 
1254
+ def test_serialized_attribute_in_base_class
1255
+ Topic.serialize("content", Hash)
1256
+
1257
+ hash = { 'content1' => 'value1', 'content2' => 'value2' }
1258
+ important_topic = ImportantTopic.create("content" => hash)
1259
+ assert_equal(hash, important_topic.content)
1260
+
1261
+ important_topic.reload
1262
+ assert_equal(hash, important_topic.content)
1263
+ end
1264
+
1265
+ # This test was added to fix GH #4004. Obviously the value returned
1266
+ # is not really the value 'before type cast' so we should maybe think
1267
+ # about changing that in the future.
1268
+ def test_serialized_attribute_before_type_cast_returns_unserialized_value
1269
+ klass = Class.new(ActiveRecord::Base)
1270
+ klass.table_name = "topics"
1271
+ klass.serialize :content, Hash
1272
+
1273
+ t = klass.new(:content => { :foo => :bar })
1274
+ assert_equal({ :foo => :bar }, t.content_before_type_cast)
1275
+ t.save!
1276
+ t.reload
1277
+ assert_equal({ :foo => :bar }, t.content_before_type_cast)
1278
+ end
1279
+
1280
+ def test_serialized_attribute_declared_in_subclass
1281
+ hash = { 'important1' => 'value1', 'important2' => 'value2' }
1282
+ important_topic = ImportantTopic.create("important" => hash)
1283
+ assert_equal(hash, important_topic.important)
1284
+
1285
+ important_topic.reload
1286
+ assert_equal(hash, important_topic.important)
1287
+ assert_equal(hash, important_topic.read_attribute(:important))
1288
+ end
1289
+
1223
1290
  def test_serialized_time_attribute
1224
1291
  myobj = Time.local(2008,1,1,1,0)
1225
1292
  topic = Topic.create("content" => myobj).reload
@@ -1386,88 +1453,211 @@ class BasicsTest < ActiveRecord::TestCase
1386
1453
  assert_equal dev, dev.reload
1387
1454
  end
1388
1455
 
1389
- def test_define_attr_method_with_value
1390
- k = Class.new( ActiveRecord::Base )
1391
- k.send(:define_attr_method, :table_name, "foo")
1392
- assert_equal "foo", k.table_name
1393
- end
1394
-
1395
- def test_define_attr_method_with_block
1396
- k = Class.new( ActiveRecord::Base ) do
1397
- class << self
1398
- attr_accessor :foo_key
1399
- end
1400
- end
1401
- k.foo_key = "id"
1402
- k.send(:define_attr_method, :foo_key) { "sys_" + original_foo_key }
1403
- assert_equal "sys_id", k.foo_key
1404
- end
1405
-
1406
1456
  def test_set_table_name_with_value
1407
1457
  k = Class.new( ActiveRecord::Base )
1408
1458
  k.table_name = "foo"
1409
1459
  assert_equal "foo", k.table_name
1410
- k.set_table_name "bar"
1460
+
1461
+ assert_deprecated do
1462
+ k.set_table_name "bar"
1463
+ end
1411
1464
  assert_equal "bar", k.table_name
1412
1465
  end
1413
1466
 
1414
1467
  def test_switching_between_table_name
1415
1468
  assert_difference("GoodJoke.count") do
1416
- Joke.set_table_name "cold_jokes"
1469
+ Joke.table_name = "cold_jokes"
1417
1470
  Joke.create
1418
1471
 
1419
- Joke.set_table_name "funny_jokes"
1472
+ Joke.table_name = "funny_jokes"
1420
1473
  Joke.create
1421
1474
  end
1422
1475
  end
1423
1476
 
1477
+ def test_set_table_name_symbol_converted_to_string
1478
+ Joke.table_name = :cold_jokes
1479
+ assert_equal 'cold_jokes', Joke.table_name
1480
+ end
1481
+
1424
1482
  def test_quoted_table_name_after_set_table_name
1425
1483
  klass = Class.new(ActiveRecord::Base)
1426
1484
 
1427
- klass.set_table_name "foo"
1485
+ klass.table_name = "foo"
1428
1486
  assert_equal "foo", klass.table_name
1429
1487
  assert_equal klass.connection.quote_table_name("foo"), klass.quoted_table_name
1430
1488
 
1431
- klass.set_table_name "bar"
1489
+ klass.table_name = "bar"
1432
1490
  assert_equal "bar", klass.table_name
1433
1491
  assert_equal klass.connection.quote_table_name("bar"), klass.quoted_table_name
1434
1492
  end
1435
1493
 
1436
1494
  def test_set_table_name_with_block
1437
1495
  k = Class.new( ActiveRecord::Base )
1438
- k.set_table_name { "ks" }
1439
- assert_equal "ks", k.table_name
1496
+ assert_deprecated do
1497
+ k.set_table_name "foo"
1498
+ k.set_table_name do
1499
+ ActiveSupport::Deprecation.silence { original_table_name } + "ks"
1500
+ end
1501
+ end
1502
+ assert_equal "fooks", k.table_name
1503
+ end
1504
+
1505
+ def test_set_table_name_with_inheritance
1506
+ k = Class.new( ActiveRecord::Base )
1507
+ def k.name; "Foo"; end
1508
+ def k.table_name; super + "ks"; end
1509
+ assert_equal "foosks", k.table_name
1510
+ end
1511
+
1512
+ def test_original_table_name
1513
+ k = Class.new(ActiveRecord::Base)
1514
+ def k.name; "Foo"; end
1515
+ k.table_name = "bar"
1516
+
1517
+ assert_deprecated do
1518
+ assert_equal "foos", k.original_table_name
1519
+ end
1520
+
1521
+ k = Class.new(ActiveRecord::Base)
1522
+ k.table_name = "omg"
1523
+ k.table_name = "wtf"
1524
+
1525
+ assert_deprecated do
1526
+ assert_equal "omg", k.original_table_name
1527
+ end
1440
1528
  end
1441
1529
 
1442
1530
  def test_set_primary_key_with_value
1443
1531
  k = Class.new( ActiveRecord::Base )
1444
1532
  k.primary_key = "foo"
1445
1533
  assert_equal "foo", k.primary_key
1446
- k.set_primary_key "bar"
1534
+
1535
+ assert_deprecated do
1536
+ k.set_primary_key "bar"
1537
+ end
1447
1538
  assert_equal "bar", k.primary_key
1448
1539
  end
1449
1540
 
1450
1541
  def test_set_primary_key_with_block
1451
1542
  k = Class.new( ActiveRecord::Base )
1452
1543
  k.primary_key = 'id'
1453
- k.set_primary_key { "sys_" + original_primary_key }
1544
+
1545
+ assert_deprecated do
1546
+ k.set_primary_key do
1547
+ "sys_" + ActiveSupport::Deprecation.silence { original_primary_key }
1548
+ end
1549
+ end
1454
1550
  assert_equal "sys_id", k.primary_key
1455
1551
  end
1456
1552
 
1553
+ def test_original_primary_key
1554
+ k = Class.new(ActiveRecord::Base)
1555
+ def k.name; "Foo"; end
1556
+ k.table_name = "posts"
1557
+ k.primary_key = "bar"
1558
+
1559
+ assert_deprecated do
1560
+ assert_equal "id", k.original_primary_key
1561
+ end
1562
+
1563
+ k = Class.new(ActiveRecord::Base)
1564
+ k.primary_key = "omg"
1565
+ k.primary_key = "wtf"
1566
+
1567
+ assert_deprecated do
1568
+ assert_equal "omg", k.original_primary_key
1569
+ end
1570
+ end
1571
+
1457
1572
  def test_set_inheritance_column_with_value
1458
1573
  k = Class.new( ActiveRecord::Base )
1459
1574
  k.inheritance_column = "foo"
1460
1575
  assert_equal "foo", k.inheritance_column
1461
- k.set_inheritance_column "bar"
1576
+
1577
+ assert_deprecated do
1578
+ k.set_inheritance_column "bar"
1579
+ end
1462
1580
  assert_equal "bar", k.inheritance_column
1463
1581
  end
1464
1582
 
1465
1583
  def test_set_inheritance_column_with_block
1466
1584
  k = Class.new( ActiveRecord::Base )
1467
- k.set_inheritance_column { original_inheritance_column + "_id" }
1585
+ assert_deprecated do
1586
+ k.set_inheritance_column do
1587
+ ActiveSupport::Deprecation.silence { original_inheritance_column } + "_id"
1588
+ end
1589
+ end
1468
1590
  assert_equal "type_id", k.inheritance_column
1469
1591
  end
1470
1592
 
1593
+ def test_original_inheritance_column
1594
+ k = Class.new(ActiveRecord::Base)
1595
+ def k.name; "Foo"; end
1596
+ k.inheritance_column = "omg"
1597
+
1598
+ assert_deprecated do
1599
+ assert_equal "type", k.original_inheritance_column
1600
+ end
1601
+ end
1602
+
1603
+ def test_set_sequence_name_with_value
1604
+ k = Class.new( ActiveRecord::Base )
1605
+ k.sequence_name = "foo"
1606
+ assert_equal "foo", k.sequence_name
1607
+
1608
+ assert_deprecated do
1609
+ k.set_sequence_name "bar"
1610
+ end
1611
+ assert_equal "bar", k.sequence_name
1612
+ end
1613
+
1614
+ def test_set_sequence_name_with_block
1615
+ k = Class.new( ActiveRecord::Base )
1616
+ k.table_name = "projects"
1617
+ orig_name = k.sequence_name
1618
+ return skip "sequences not supported by db" unless orig_name
1619
+
1620
+ assert_deprecated do
1621
+ k.set_sequence_name do
1622
+ ActiveSupport::Deprecation.silence { original_sequence_name } + "_lol"
1623
+ end
1624
+ end
1625
+ assert_equal orig_name + "_lol", k.sequence_name
1626
+ end
1627
+
1628
+ def test_original_sequence_name
1629
+ k = Class.new(ActiveRecord::Base)
1630
+ k.table_name = "projects"
1631
+ orig_name = k.sequence_name
1632
+ return skip "sequences not supported by db" unless orig_name
1633
+
1634
+ k = Class.new(ActiveRecord::Base)
1635
+ k.table_name = "projects"
1636
+ k.sequence_name = "omg"
1637
+
1638
+ assert_deprecated do
1639
+ assert_equal orig_name, k.original_sequence_name
1640
+ end
1641
+
1642
+ k = Class.new(ActiveRecord::Base)
1643
+ k.table_name = "projects"
1644
+ k.sequence_name = "omg"
1645
+ k.sequence_name = "wtf"
1646
+ assert_deprecated do
1647
+ assert_equal "omg", k.original_sequence_name
1648
+ end
1649
+ end
1650
+
1651
+ def test_sequence_name_with_abstract_class
1652
+ ak = Class.new(ActiveRecord::Base)
1653
+ ak.abstract_class = true
1654
+ k = Class.new(ak)
1655
+ k.table_name = "projects"
1656
+ orig_name = k.sequence_name
1657
+ return skip "sequences not supported by db" unless orig_name
1658
+ assert_equal k.reset_sequence_name, orig_name
1659
+ end
1660
+
1471
1661
  def test_count_with_join
1472
1662
  res = Post.count_by_sql "SELECT COUNT(*) FROM posts LEFT JOIN comments ON posts.id=comments.post_id WHERE posts.#{QUOTED_TYPE} = 'Post'"
1473
1663
 
@@ -1717,7 +1907,7 @@ class BasicsTest < ActiveRecord::TestCase
1717
1907
 
1718
1908
  def test_inspect_instance
1719
1909
  topic = topics(:first)
1720
- assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "#{topic.written_on.to_s(:db)}", bonus_time: "#{topic.bonus_time.to_s(:db)}", last_read: "#{topic.last_read.to_s(:db)}", content: "Have a nice day", approved: false, replies_count: 1, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "#{topic.created_at.to_s(:db)}", updated_at: "#{topic.updated_at.to_s(:db)}">), topic.inspect
1910
+ assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "#{topic.written_on.to_s(:db)}", bonus_time: "#{topic.bonus_time.to_s(:db)}", last_read: "#{topic.last_read.to_s(:db)}", content: "Have a nice day", important: nil, approved: false, replies_count: 1, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "#{topic.created_at.to_s(:db)}", updated_at: "#{topic.updated_at.to_s(:db)}">), topic.inspect
1721
1911
  end
1722
1912
 
1723
1913
  def test_inspect_new_instance
@@ -1746,6 +1936,14 @@ class BasicsTest < ActiveRecord::TestCase
1746
1936
  assert_equal "The First Topic", topics(:first).becomes(Reply).title
1747
1937
  end
1748
1938
 
1939
+ def test_becomes_includes_errors
1940
+ company = Company.new(:name => nil)
1941
+ assert !company.valid?
1942
+ original_errors = company.errors
1943
+ client = company.becomes(Client)
1944
+ assert_equal original_errors, client.errors
1945
+ end
1946
+
1749
1947
  def test_silence_sets_log_level_to_error_in_block
1750
1948
  original_logger = ActiveRecord::Base.logger
1751
1949
  log = StringIO.new
@@ -1791,7 +1989,9 @@ class BasicsTest < ActiveRecord::TestCase
1791
1989
  original_logger = ActiveRecord::Base.logger
1792
1990
  log = StringIO.new
1793
1991
  ActiveRecord::Base.logger = Logger.new(log)
1794
- ActiveRecord::Base.benchmark("Logging", :level => :debug, :silence => true) { ActiveRecord::Base.logger.debug "Loud" }
1992
+ assert_deprecated do
1993
+ ActiveRecord::Base.benchmark("Logging", :level => :debug, :silence => true) { ActiveRecord::Base.logger.debug "Loud" }
1994
+ end
1795
1995
  ActiveRecord::Base.benchmark("Logging", :level => :debug, :silence => false) { ActiveRecord::Base.logger.debug "Quiet" }
1796
1996
  assert_no_match(/Loud/, log.string)
1797
1997
  assert_match(/Quiet/, log.string)
@@ -1825,9 +2025,9 @@ class BasicsTest < ActiveRecord::TestCase
1825
2025
 
1826
2026
  def test_clear_cache!
1827
2027
  # preheat cache
1828
- c1 = Post.columns
2028
+ c1 = Post.connection.schema_cache.columns['posts']
1829
2029
  ActiveRecord::Base.clear_cache!
1830
- c2 = Post.columns
2030
+ c2 = Post.connection.schema_cache.columns['posts']
1831
2031
  assert_not_equal c1, c2
1832
2032
  end
1833
2033
 
@@ -1844,6 +2044,11 @@ class BasicsTest < ActiveRecord::TestCase
1844
2044
  end
1845
2045
 
1846
2046
  def test_marshal_round_trip
2047
+ if ENV['TRAVIS'] && RUBY_VERSION == "1.8.7"
2048
+ return skip("Marshalling tests disabled for Ruby 1.8.7 on Travis CI due to what appears " \
2049
+ "to be a Ruby bug.")
2050
+ end
2051
+
1847
2052
  expected = posts(:welcome)
1848
2053
  marshalled = Marshal.dump(expected)
1849
2054
  actual = Marshal.load(marshalled)
@@ -1852,6 +2057,11 @@ class BasicsTest < ActiveRecord::TestCase
1852
2057
  end
1853
2058
 
1854
2059
  def test_marshal_new_record_round_trip
2060
+ if ENV['TRAVIS'] && RUBY_VERSION == "1.8.7"
2061
+ return skip("Marshalling tests disabled for Ruby 1.8.7 on Travis CI due to what appears " \
2062
+ "to be a Ruby bug.")
2063
+ end
2064
+
1855
2065
  marshalled = Marshal.dump(Post.new)
1856
2066
  post = Marshal.load(marshalled)
1857
2067
 
@@ -1859,6 +2069,11 @@ class BasicsTest < ActiveRecord::TestCase
1859
2069
  end
1860
2070
 
1861
2071
  def test_marshalling_with_associations
2072
+ if ENV['TRAVIS'] && RUBY_VERSION == "1.8.7"
2073
+ return skip("Marshalling tests disabled for Ruby 1.8.7 on Travis CI due to what appears " \
2074
+ "to be a Ruby bug.")
2075
+ end
2076
+
1862
2077
  post = Post.new
1863
2078
  post.comments.build
1864
2079
 
@@ -1903,6 +2118,16 @@ class BasicsTest < ActiveRecord::TestCase
1903
2118
  def test_cache_key_format_for_existing_record_with_nil_updated_at
1904
2119
  dev = Developer.first
1905
2120
  dev.update_attribute(:updated_at, nil)
1906
- assert_match /\/#{dev.id}$/, dev.cache_key
2121
+ assert_match(/\/#{dev.id}$/, dev.cache_key)
2122
+ end
2123
+
2124
+ def test_uniq_delegates_to_scoped
2125
+ scope = stub
2126
+ Bird.stubs(:scoped).returns(mock(:uniq => scope))
2127
+ assert_equal scope, Bird.uniq
2128
+ end
2129
+
2130
+ def test_table_name_with_2_abstract_subclasses
2131
+ assert_equal "photos", Photo.table_name
1907
2132
  end
1908
2133
  end