ibm_db 2.5.9-x86-mingw32 → 2.5.10-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +7 -0
- data/README +79 -141
- data/ext/extconf.rb +74 -13
- data/ext/ibm_db.c +20 -5
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +45 -8
- data/lib/mswin32/rb18x/ibm_db.so +0 -0
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- data/test/cases/adapter_test.rb +162 -160
- data/test/cases/associations/belongs_to_associations_test.rb +23 -0
- data/test/cases/associations/cascaded_eager_loading_test.rb +3 -7
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +40 -10
- data/test/cases/associations/join_model_test.rb +4 -4
- data/test/cases/attribute_methods_test.rb +169 -33
- data/test/cases/base_test.rb +302 -77
- data/test/cases/calculations_test.rb +37 -1
- data/test/cases/migration_test.rb +183 -115
- data/test/cases/persistence_test.rb +17 -11
- data/test/cases/query_cache_test.rb +18 -3
- data/test/cases/relations_test.rb +178 -15
- data/test/cases/schema_dumper_test.rb +5 -1
- data/test/cases/transaction_callbacks_test.rb +2 -2
- data/test/cases/xml_serialization_test.rb +133 -1
- data/test/schema/schema.rb +22 -3
- metadata +36 -55
data/test/cases/base_test.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
1469
|
+
Joke.table_name = "cold_jokes"
|
1417
1470
|
Joke.create
|
1418
1471
|
|
1419
|
-
Joke.
|
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.
|
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.
|
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
|
-
|
1439
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|