ibm_db 3.0.5-x86-mingw32 → 5.0.5-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.
- checksums.yaml +5 -5
- data/CHANGES +4 -0
- data/LICENSE +1 -1
- data/ParameterizedQueries README +6 -6
- data/README +38 -55
- data/ext/Makefile +269 -0
- data/ext/extconf.rb +34 -3
- data/ext/gil_release_version +3 -0
- data/ext/ibm_db-i386-mingw32.def +2 -0
- data/ext/ibm_db.c +100 -108
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +110 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/ext/unicode_support_version +3 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
- data/lib/mswin32/ibm_db.rb +7 -39
- data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
- data/test/cases/adapter_test.rb +133 -58
- data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
- data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
- data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
- data/test/cases/adapters/mysql2/connection_test.rb +210 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
- data/test/cases/adapters/mysql2/enum_test.rb +26 -0
- data/test/cases/adapters/mysql2/explain_test.rb +21 -0
- data/test/cases/adapters/mysql2/json_test.rb +195 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
- data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
- data/test/cases/adapters/mysql2/schema_test.rb +126 -0
- data/test/cases/adapters/mysql2/sp_test.rb +36 -0
- data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
- data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
- data/test/cases/adapters/postgresql/array_test.rb +339 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
- data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
- data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
- data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
- data/test/cases/adapters/postgresql/citext_test.rb +78 -0
- data/test/cases/adapters/postgresql/collation_test.rb +53 -0
- data/test/cases/adapters/postgresql/composite_test.rb +132 -0
- data/test/cases/adapters/postgresql/connection_test.rb +257 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
- data/test/cases/adapters/postgresql/domain_test.rb +47 -0
- data/test/cases/adapters/postgresql/enum_test.rb +91 -0
- data/test/cases/adapters/postgresql/explain_test.rb +20 -0
- data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
- data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
- data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
- data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
- data/test/cases/adapters/postgresql/integer_test.rb +25 -0
- data/test/cases/adapters/postgresql/json_test.rb +237 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
- data/test/cases/adapters/postgresql/money_test.rb +96 -0
- data/test/cases/adapters/postgresql/network_test.rb +94 -0
- data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
- data/test/cases/adapters/postgresql/range_test.rb +343 -0
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
- data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
- data/test/cases/adapters/postgresql/schema_test.rb +597 -0
- data/test/cases/adapters/postgresql/serial_test.rb +154 -0
- data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
- data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
- data/test/cases/adapters/postgresql/utils_test.rb +62 -0
- data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
- data/test/cases/adapters/postgresql/xml_test.rb +54 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
- data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
- data/test/cases/aggregations_test.rb +11 -1
- data/test/cases/ar_schema_test.rb +35 -50
- data/test/cases/associations/association_scope_test.rb +1 -6
- data/test/cases/associations/belongs_to_associations_test.rb +122 -10
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
- data/test/cases/associations/callbacks_test.rb +5 -7
- data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
- data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
- data/test/cases/associations/eager_test.rb +158 -73
- data/test/cases/associations/extension_test.rb +7 -2
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
- data/test/cases/associations/has_many_associations_test.rb +362 -43
- data/test/cases/associations/has_many_through_associations_test.rb +108 -41
- data/test/cases/associations/has_one_associations_test.rb +105 -8
- data/test/cases/associations/has_one_through_associations_test.rb +6 -3
- data/test/cases/associations/inner_join_association_test.rb +3 -3
- data/test/cases/associations/inverse_associations_test.rb +38 -11
- data/test/cases/associations/join_model_test.rb +59 -36
- data/test/cases/associations/left_outer_join_association_test.rb +88 -0
- data/test/cases/associations/nested_through_associations_test.rb +2 -2
- data/test/cases/associations/required_test.rb +25 -5
- data/test/cases/associations_test.rb +39 -34
- data/test/cases/attribute_decorators_test.rb +9 -8
- data/test/cases/attribute_methods/read_test.rb +5 -5
- data/test/cases/attribute_methods_test.rb +97 -40
- data/test/cases/attribute_set_test.rb +64 -4
- data/test/cases/attribute_test.rb +84 -18
- data/test/cases/attributes_test.rb +151 -34
- data/test/cases/autosave_association_test.rb +149 -36
- data/test/cases/base_test.rb +290 -241
- data/test/cases/batches_test.rb +299 -22
- data/test/cases/binary_test.rb +2 -10
- data/test/cases/bind_parameter_test.rb +76 -66
- data/test/cases/cache_key_test.rb +26 -0
- data/test/cases/calculations_test.rb +167 -15
- data/test/cases/callbacks_test.rb +161 -68
- data/test/cases/coders/json_test.rb +15 -0
- data/test/cases/collection_cache_key_test.rb +115 -0
- data/test/cases/column_definition_test.rb +26 -57
- data/test/cases/comment_test.rb +145 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
- data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
- data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
- data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
- data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
- data/test/cases/connection_management_test.rb +46 -56
- data/test/cases/connection_pool_test.rb +195 -20
- data/test/cases/connection_specification/resolver_test.rb +15 -0
- data/test/cases/counter_cache_test.rb +10 -5
- data/test/cases/custom_locking_test.rb +1 -1
- data/test/cases/database_statements_test.rb +18 -3
- data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
- data/test/cases/date_time_precision_test.rb +107 -0
- data/test/cases/defaults_test.rb +85 -89
- data/test/cases/dirty_test.rb +30 -52
- data/test/cases/disconnected_test.rb +4 -2
- data/test/cases/enum_test.rb +178 -24
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_test.rb +32 -21
- data/test/cases/finder_test.rb +273 -148
- data/test/cases/fixture_set/file_test.rb +18 -0
- data/test/cases/fixtures_test.rb +112 -32
- data/test/cases/forbidden_attributes_protection_test.rb +69 -3
- data/test/cases/helper.rb +10 -16
- data/test/cases/hot_compatibility_test.rb +89 -1
- data/test/cases/inheritance_test.rb +284 -53
- data/test/cases/integration_test.rb +23 -7
- data/test/cases/invalid_connection_test.rb +4 -2
- data/test/cases/invertible_migration_test.rb +124 -32
- data/test/cases/json_serialization_test.rb +11 -2
- data/test/cases/locking_test.rb +22 -6
- data/test/cases/log_subscriber_test.rb +106 -17
- data/test/cases/migration/change_schema_test.rb +60 -114
- data/test/cases/migration/change_table_test.rb +34 -2
- data/test/cases/migration/column_attributes_test.rb +7 -23
- data/test/cases/migration/column_positioning_test.rb +8 -8
- data/test/cases/migration/columns_test.rb +17 -11
- data/test/cases/migration/command_recorder_test.rb +47 -2
- data/test/cases/migration/compatibility_test.rb +118 -0
- data/test/cases/migration/create_join_table_test.rb +21 -12
- data/test/cases/migration/foreign_key_test.rb +52 -18
- data/test/cases/migration/index_test.rb +14 -12
- data/test/cases/migration/logger_test.rb +1 -1
- data/test/cases/migration/pending_migrations_test.rb +0 -1
- data/test/cases/migration/references_foreign_key_test.rb +59 -7
- data/test/cases/migration/references_index_test.rb +4 -4
- data/test/cases/migration/references_statements_test.rb +26 -6
- data/test/cases/migration/rename_table_test.rb +25 -25
- data/test/cases/migration_test.rb +279 -81
- data/test/cases/migrator_test.rb +91 -8
- data/test/cases/mixin_test.rb +0 -2
- data/test/cases/modules_test.rb +3 -4
- data/test/cases/multiparameter_attributes_test.rb +24 -2
- data/test/cases/multiple_db_test.rb +11 -4
- data/test/cases/nested_attributes_test.rb +61 -33
- data/test/cases/persistence_test.rb +102 -10
- data/test/cases/pooled_connections_test.rb +3 -3
- data/test/cases/primary_keys_test.rb +170 -31
- data/test/cases/query_cache_test.rb +216 -96
- data/test/cases/quoting_test.rb +65 -19
- data/test/cases/readonly_test.rb +2 -1
- data/test/cases/reflection_test.rb +68 -22
- data/test/cases/relation/delegation_test.rb +3 -8
- data/test/cases/relation/merging_test.rb +10 -14
- data/test/cases/relation/mutation_test.rb +42 -24
- data/test/cases/relation/or_test.rb +92 -0
- data/test/cases/relation/predicate_builder_test.rb +4 -2
- data/test/cases/relation/record_fetch_warning_test.rb +40 -0
- data/test/cases/relation/where_chain_test.rb +23 -99
- data/test/cases/relation/where_clause_test.rb +182 -0
- data/test/cases/relation/where_test.rb +45 -23
- data/test/cases/relation_test.rb +67 -58
- data/test/cases/relations_test.rb +249 -38
- data/test/cases/result_test.rb +10 -0
- data/test/cases/sanitize_test.rb +108 -15
- data/test/cases/schema_dumper_test.rb +119 -125
- data/test/cases/schema_loading_test.rb +52 -0
- data/test/cases/scoping/default_scoping_test.rb +113 -39
- data/test/cases/scoping/named_scoping_test.rb +46 -9
- data/test/cases/scoping/relation_scoping_test.rb +47 -4
- data/test/cases/secure_token_test.rb +32 -0
- data/test/cases/serialization_test.rb +1 -1
- data/test/cases/serialized_attribute_test.rb +93 -6
- data/test/cases/statement_cache_test.rb +38 -0
- data/test/cases/store_test.rb +2 -1
- data/test/cases/suppressor_test.rb +63 -0
- data/test/cases/tasks/database_tasks_test.rb +73 -9
- data/test/cases/tasks/mysql_rake_test.rb +139 -118
- data/test/cases/tasks/postgresql_rake_test.rb +60 -6
- data/test/cases/tasks/sqlite_rake_test.rb +30 -3
- data/test/cases/test_case.rb +28 -20
- data/test/cases/test_fixtures_test.rb +36 -0
- data/test/cases/time_precision_test.rb +103 -0
- data/test/cases/timestamp_test.rb +44 -10
- data/test/cases/touch_later_test.rb +121 -0
- data/test/cases/transaction_callbacks_test.rb +128 -62
- data/test/cases/transaction_isolation_test.rb +2 -2
- data/test/cases/transactions_test.rb +61 -43
- data/test/cases/type/adapter_specific_registry_test.rb +133 -0
- data/test/cases/type/date_time_test.rb +14 -0
- data/test/cases/type/integer_test.rb +2 -96
- data/test/cases/type/string_test.rb +0 -14
- data/test/cases/type_test.rb +39 -0
- data/test/cases/types_test.rb +1 -118
- data/test/cases/unconnected_test.rb +1 -1
- data/test/cases/validations/absence_validation_test.rb +73 -0
- data/test/cases/validations/association_validation_test.rb +13 -2
- data/test/cases/validations/i18n_validation_test.rb +6 -10
- data/test/cases/validations/length_validation_test.rb +62 -30
- data/test/cases/validations/presence_validation_test.rb +36 -1
- data/test/cases/validations/uniqueness_validation_test.rb +128 -37
- data/test/cases/validations_repair_helper.rb +2 -6
- data/test/cases/validations_test.rb +36 -7
- data/test/cases/view_test.rb +102 -5
- data/test/cases/yaml_serialization_test.rb +21 -26
- data/test/config.example.yml +97 -0
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/books.yml +20 -0
- data/test/fixtures/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/live_parrots.yml +4 -0
- data/test/fixtures/naked/yml/parrots.yml +2 -0
- data/test/fixtures/naked/yml/trees.yml +3 -0
- data/test/fixtures/nodes.yml +29 -0
- data/test/fixtures/other_comments.yml +6 -0
- data/test/fixtures/other_dogs.yml +2 -0
- data/test/fixtures/other_posts.yml +7 -0
- data/test/fixtures/price_estimates.yml +10 -1
- data/test/fixtures/trees.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +1 -1
- data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
- data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
- data/test/migrations/missing/1_people_have_last_names.rb +2 -2
- data/test/migrations/missing/3_we_need_reminders.rb +2 -2
- data/test/migrations/missing/4_innocent_jointable.rb +2 -2
- data/test/migrations/rename/1_we_need_things.rb +2 -2
- data/test/migrations/rename/2_rename_things.rb +2 -2
- data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
- data/test/migrations/to_copy2/1_create_articles.rb +1 -1
- data/test/migrations/to_copy2/2_create_comments.rb +1 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
- data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
- data/test/migrations/valid/2_we_need_reminders.rb +2 -2
- data/test/migrations/valid/3_innocent_jointable.rb +2 -2
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
- data/test/models/admin/randomly_named_c1.rb +6 -2
- data/test/models/aircraft.rb +1 -0
- data/test/models/author.rb +4 -7
- data/test/models/bird.rb +1 -1
- data/test/models/book.rb +5 -0
- data/test/models/bulb.rb +2 -1
- data/test/models/car.rb +3 -0
- data/test/models/cat.rb +10 -0
- data/test/models/chef.rb +1 -0
- data/test/models/club.rb +2 -0
- data/test/models/comment.rb +17 -5
- data/test/models/company.rb +4 -2
- data/test/models/company_in_module.rb +1 -1
- data/test/models/contact.rb +1 -1
- data/test/models/content.rb +40 -0
- data/test/models/customer.rb +8 -2
- data/test/models/developer.rb +19 -0
- data/test/models/face.rb +1 -1
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +2 -0
- data/test/models/member.rb +1 -0
- data/test/models/member_detail.rb +4 -3
- data/test/models/mentor.rb +3 -0
- data/test/models/mocktail_designer.rb +2 -0
- data/test/models/node.rb +5 -0
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +3 -0
- data/test/models/other_dog.rb +5 -0
- data/test/models/owner.rb +4 -1
- data/test/models/parrot.rb +6 -7
- data/test/models/person.rb +0 -1
- data/test/models/pet.rb +3 -0
- data/test/models/pet_treasure.rb +6 -0
- data/test/models/pirate.rb +3 -3
- data/test/models/post.rb +18 -9
- data/test/models/project.rb +9 -0
- data/test/models/randomly_named_c1.rb +1 -1
- data/test/models/recipe.rb +3 -0
- data/test/models/ship.rb +8 -2
- data/test/models/tag.rb +6 -0
- data/test/models/topic.rb +2 -8
- data/test/models/tree.rb +3 -0
- data/test/models/tuning_peg.rb +4 -0
- data/test/models/user.rb +14 -0
- data/test/models/uuid_item.rb +6 -0
- data/test/schema/mysql2_specific_schema.rb +33 -23
- data/test/schema/oracle_specific_schema.rb +1 -4
- data/test/schema/postgresql_specific_schema.rb +36 -124
- data/test/schema/schema.rb +170 -65
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +1 -5
- data/test/support/connection.rb +1 -0
- data/test/support/schema_dumping_helper.rb +1 -1
- data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
- metadata +146 -30
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
- data/test/cases/attribute_methods/serialization_test.rb +0 -29
- data/test/cases/migration/change_schema_test - Copy.rb +0 -448
- data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
- data/test/cases/migration/table_and_index_test.rb +0 -24
- data/test/cases/relation/where_test2.rb +0 -36
- data/test/cases/type/decimal_test.rb +0 -56
- data/test/cases/type/unsigned_integer_test.rb +0 -18
- data/test/cases/xml_serialization_test.rb +0 -457
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/schema/mysql_specific_schema.rb +0 -70
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'cases/helper'
|
2
|
+
require 'active_record/tasks/database_tasks'
|
2
3
|
|
3
4
|
if current_adapter?(:PostgreSQLAdapter)
|
4
5
|
module ActiveRecord
|
@@ -12,6 +13,13 @@ module ActiveRecord
|
|
12
13
|
|
13
14
|
ActiveRecord::Base.stubs(:connection).returns(@connection)
|
14
15
|
ActiveRecord::Base.stubs(:establish_connection).returns(true)
|
16
|
+
|
17
|
+
$stdout, @original_stdout = StringIO.new, $stdout
|
18
|
+
$stderr, @original_stderr = StringIO.new, $stderr
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
$stdout, $stderr = @original_stdout, @original_stderr
|
15
23
|
end
|
16
24
|
|
17
25
|
def test_establishes_connection_to_postgresql_database
|
@@ -60,17 +68,23 @@ module ActiveRecord
|
|
60
68
|
$stderr.expects(:puts).
|
61
69
|
with("Couldn't create database for #{@configuration.inspect}")
|
62
70
|
|
71
|
+
assert_raises(Exception) { ActiveRecord::Tasks::DatabaseTasks.create @configuration }
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_when_database_created_successfully_outputs_info_to_stdout
|
63
75
|
ActiveRecord::Tasks::DatabaseTasks.create @configuration
|
76
|
+
|
77
|
+
assert_equal $stdout.string, "Created database 'my-app-db'\n"
|
64
78
|
end
|
65
79
|
|
66
80
|
def test_create_when_database_exists_outputs_info_to_stderr
|
67
|
-
$stderr.expects(:puts).with("my-app-db already exists").once
|
68
|
-
|
69
81
|
ActiveRecord::Base.connection.stubs(:create_database).raises(
|
70
|
-
ActiveRecord::
|
82
|
+
ActiveRecord::Tasks::DatabaseAlreadyExists
|
71
83
|
)
|
72
84
|
|
73
85
|
ActiveRecord::Tasks::DatabaseTasks.create @configuration
|
86
|
+
|
87
|
+
assert_equal $stderr.string, "Database 'my-app-db' already exists\n"
|
74
88
|
end
|
75
89
|
end
|
76
90
|
|
@@ -84,6 +98,13 @@ module ActiveRecord
|
|
84
98
|
|
85
99
|
ActiveRecord::Base.stubs(:connection).returns(@connection)
|
86
100
|
ActiveRecord::Base.stubs(:establish_connection).returns(true)
|
101
|
+
|
102
|
+
$stdout, @original_stdout = StringIO.new, $stdout
|
103
|
+
$stderr, @original_stderr = StringIO.new, $stderr
|
104
|
+
end
|
105
|
+
|
106
|
+
def teardown
|
107
|
+
$stdout, $stderr = @original_stdout, @original_stderr
|
87
108
|
end
|
88
109
|
|
89
110
|
def test_establishes_connection_to_postgresql_database
|
@@ -101,6 +122,12 @@ module ActiveRecord
|
|
101
122
|
|
102
123
|
ActiveRecord::Tasks::DatabaseTasks.drop @configuration
|
103
124
|
end
|
125
|
+
|
126
|
+
def test_when_database_dropped_successfully_outputs_info_to_stdout
|
127
|
+
ActiveRecord::Tasks::DatabaseTasks.drop @configuration
|
128
|
+
|
129
|
+
assert_equal $stdout.string, "Dropped database 'my-app-db'\n"
|
130
|
+
end
|
104
131
|
end
|
105
132
|
|
106
133
|
class PostgreSQLPurgeTest < ActiveRecord::TestCase
|
@@ -216,6 +243,34 @@ module ActiveRecord
|
|
216
243
|
|
217
244
|
ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
|
218
245
|
end
|
246
|
+
|
247
|
+
def test_structure_dump_with_schema_search_path_and_dump_schemas_all
|
248
|
+
@configuration['schema_search_path'] = 'foo,bar'
|
249
|
+
|
250
|
+
Kernel.expects(:system).with("pg_dump", '-s', '-x', '-O', '-f', @filename, 'my-app-db').returns(true)
|
251
|
+
|
252
|
+
with_dump_schemas(:all) do
|
253
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_structure_dump_with_dump_schemas_string
|
258
|
+
Kernel.expects(:system).with("pg_dump", '-s', '-x', '-O', '-f', @filename, '--schema=foo', '--schema=bar', "my-app-db").returns(true)
|
259
|
+
|
260
|
+
with_dump_schemas('foo,bar') do
|
261
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
private
|
266
|
+
|
267
|
+
def with_dump_schemas(value, &block)
|
268
|
+
old_dump_schemas = ActiveRecord::Base.dump_schemas
|
269
|
+
ActiveRecord::Base.dump_schemas = value
|
270
|
+
yield
|
271
|
+
ensure
|
272
|
+
ActiveRecord::Base.dump_schemas = old_dump_schemas
|
273
|
+
end
|
219
274
|
end
|
220
275
|
|
221
276
|
class PostgreSQLStructureLoadTest < ActiveRecord::TestCase
|
@@ -233,18 +288,17 @@ module ActiveRecord
|
|
233
288
|
|
234
289
|
def test_structure_load
|
235
290
|
filename = "awesome-file.sql"
|
236
|
-
Kernel.expects(:system).with('psql', '-q', '-f', filename, '
|
291
|
+
Kernel.expects(:system).with('psql', '-q', '-f', filename, @configuration['database']).returns(true)
|
237
292
|
|
238
293
|
ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
|
239
294
|
end
|
240
295
|
|
241
296
|
def test_structure_load_accepts_path_with_spaces
|
242
297
|
filename = "awesome file.sql"
|
243
|
-
Kernel.expects(:system).with('psql', '-q', '-f',
|
298
|
+
Kernel.expects(:system).with('psql', '-q', '-f', filename, @configuration['database']).returns(true)
|
244
299
|
|
245
300
|
ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
|
246
301
|
end
|
247
302
|
end
|
248
|
-
|
249
303
|
end
|
250
304
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'cases/helper'
|
2
|
+
require 'active_record/tasks/database_tasks'
|
2
3
|
require 'pathname'
|
3
4
|
|
4
5
|
if current_adapter?(:SQLite3Adapter)
|
@@ -15,6 +16,13 @@ module ActiveRecord
|
|
15
16
|
File.stubs(:exist?).returns(false)
|
16
17
|
ActiveRecord::Base.stubs(:connection).returns(@connection)
|
17
18
|
ActiveRecord::Base.stubs(:establish_connection).returns(true)
|
19
|
+
|
20
|
+
$stdout, @original_stdout = StringIO.new, $stdout
|
21
|
+
$stderr, @original_stderr = StringIO.new, $stderr
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
$stdout, $stderr = @original_stdout, @original_stderr
|
18
26
|
end
|
19
27
|
|
20
28
|
def test_db_checks_database_exists
|
@@ -23,12 +31,18 @@ module ActiveRecord
|
|
23
31
|
ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
|
24
32
|
end
|
25
33
|
|
34
|
+
def test_when_db_created_successfully_outputs_info_to_stdout
|
35
|
+
ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
|
36
|
+
|
37
|
+
assert_equal $stdout.string, "Created database '#{@database}'\n"
|
38
|
+
end
|
39
|
+
|
26
40
|
def test_db_create_when_file_exists
|
27
41
|
File.stubs(:exist?).returns(true)
|
28
42
|
|
29
|
-
$stderr.expects(:puts).with("#{@database} already exists")
|
30
|
-
|
31
43
|
ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
|
44
|
+
|
45
|
+
assert_equal $stderr.string, "Database '#{@database}' already exists\n"
|
32
46
|
end
|
33
47
|
|
34
48
|
def test_db_create_with_file_does_nothing
|
@@ -53,7 +67,7 @@ module ActiveRecord
|
|
53
67
|
$stderr.expects(:puts).
|
54
68
|
with("Couldn't create database for #{@configuration.inspect}")
|
55
69
|
|
56
|
-
ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
|
70
|
+
assert_raises(Exception) { ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root' }
|
57
71
|
end
|
58
72
|
end
|
59
73
|
|
@@ -69,6 +83,13 @@ module ActiveRecord
|
|
69
83
|
Pathname.stubs(:new).returns(@path)
|
70
84
|
File.stubs(:join).returns('/former/relative/path')
|
71
85
|
FileUtils.stubs(:rm).returns(true)
|
86
|
+
|
87
|
+
$stdout, @original_stdout = StringIO.new, $stdout
|
88
|
+
$stderr, @original_stderr = StringIO.new, $stderr
|
89
|
+
end
|
90
|
+
|
91
|
+
def teardown
|
92
|
+
$stdout, $stderr = @original_stdout, @original_stderr
|
72
93
|
end
|
73
94
|
|
74
95
|
def test_creates_path_from_database
|
@@ -103,6 +124,12 @@ module ActiveRecord
|
|
103
124
|
|
104
125
|
ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root'
|
105
126
|
end
|
127
|
+
|
128
|
+
def test_when_db_dropped_successfully_outputs_info_to_stdout
|
129
|
+
ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root'
|
130
|
+
|
131
|
+
assert_equal $stdout.string, "Dropped database '#{@database}'\n"
|
132
|
+
end
|
106
133
|
end
|
107
134
|
|
108
135
|
class SqliteDBCharsetTest < ActiveRecord::TestCase
|
data/test/cases/test_case.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'active_support/test_case'
|
2
|
+
require 'active_support/testing/stream'
|
2
3
|
|
3
4
|
module ActiveRecord
|
4
5
|
# = Active Record Test Case
|
5
6
|
#
|
6
7
|
# Defines some test assertions to test against SQL queries.
|
7
8
|
class TestCase < ActiveSupport::TestCase #:nodoc:
|
9
|
+
include ActiveSupport::Testing::Stream
|
10
|
+
|
8
11
|
def teardown
|
9
12
|
SQLCounter.clear_log
|
10
13
|
end
|
@@ -13,23 +16,6 @@ module ActiveRecord
|
|
13
16
|
assert_equal expected.to_s, actual.to_s, message
|
14
17
|
end
|
15
18
|
|
16
|
-
def capture(stream)
|
17
|
-
stream = stream.to_s
|
18
|
-
captured_stream = Tempfile.new(stream)
|
19
|
-
stream_io = eval("$#{stream}")
|
20
|
-
origin_stream = stream_io.dup
|
21
|
-
stream_io.reopen(captured_stream)
|
22
|
-
|
23
|
-
yield
|
24
|
-
|
25
|
-
stream_io.rewind
|
26
|
-
return captured_stream.read
|
27
|
-
ensure
|
28
|
-
captured_stream.close
|
29
|
-
captured_stream.unlink
|
30
|
-
stream_io.reopen(origin_stream)
|
31
|
-
end
|
32
|
-
|
33
19
|
def capture_sql
|
34
20
|
SQLCounter.clear_log
|
35
21
|
yield
|
@@ -43,7 +29,7 @@ module ActiveRecord
|
|
43
29
|
patterns_to_match.each do |pattern|
|
44
30
|
failed_patterns << pattern unless SQLCounter.log_all.any?{ |sql| pattern === sql }
|
45
31
|
end
|
46
|
-
assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map
|
32
|
+
assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map(&:inspect).join(', ')} not found.#{SQLCounter.log.size == 0 ? '' : "\nQueries:\n#{SQLCounter.log.join("\n")}"}"
|
47
33
|
end
|
48
34
|
|
49
35
|
def assert_queries(num = 1, options = {})
|
@@ -77,6 +63,28 @@ module ActiveRecord
|
|
77
63
|
model.reset_column_information
|
78
64
|
model.column_names.include?(column_name.to_s)
|
79
65
|
end
|
66
|
+
|
67
|
+
def frozen_error_class
|
68
|
+
Object.const_defined?(:FrozenError) ? FrozenError : RuntimeError
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class PostgreSQLTestCase < TestCase
|
73
|
+
def self.run(*args)
|
74
|
+
super if current_adapter?(:PostgreSQLAdapter)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class Mysql2TestCase < TestCase
|
79
|
+
def self.run(*args)
|
80
|
+
super if current_adapter?(:Mysql2Adapter)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class SQLite3TestCase < TestCase
|
85
|
+
def self.run(*args)
|
86
|
+
super if current_adapter?(:SQLite3Adapter)
|
87
|
+
end
|
80
88
|
end
|
81
89
|
|
82
90
|
class SQLCounter
|
@@ -93,9 +101,9 @@ module ActiveRecord
|
|
93
101
|
# ignored SQL, or better yet, use a different notification for the queries
|
94
102
|
# instead examining the SQL content.
|
95
103
|
oracle_ignored = [/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from all_triggers/im, /^\s*select .* from all_constraints/im, /^\s*select .* from all_tab_cols/im]
|
96
|
-
mysql_ignored = [/^SHOW TABLES/i, /^SHOW FULL FIELDS/, /^SHOW CREATE TABLE /i, /^SHOW VARIABLES /]
|
104
|
+
mysql_ignored = [/^SHOW FULL TABLES/i, /^SHOW FULL FIELDS/, /^SHOW CREATE TABLE /i, /^SHOW VARIABLES /, /^\s*SELECT (?:column_name|table_name)\b.*\bFROM information_schema\.(?:key_column_usage|tables)\b/im]
|
97
105
|
postgresql_ignored = [/^\s*select\b.*\bfrom\b.*pg_namespace\b/im, /^\s*select tablename\b.*from pg_tables\b/im, /^\s*select\b.*\battname\b.*\bfrom\b.*\bpg_attribute\b/im, /^SHOW search_path/i]
|
98
|
-
sqlite3_ignored = [/^\s*SELECT name\b.*\bFROM sqlite_master/im]
|
106
|
+
sqlite3_ignored = [/^\s*SELECT name\b.*\bFROM sqlite_master/im, /^\s*SELECT sql\b.*\bFROM sqlite_master/im]
|
99
107
|
|
100
108
|
[oracle_ignored, mysql_ignored, postgresql_ignored, sqlite3_ignored].each do |db_ignored_sql|
|
101
109
|
ignored_sql.concat db_ignored_sql
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
class TestFixturesTest < ActiveRecord::TestCase
|
4
|
+
setup do
|
5
|
+
@klass = Class.new
|
6
|
+
@klass.send(:include, ActiveRecord::TestFixtures)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_deprecated_use_transactional_fixtures=
|
10
|
+
assert_deprecated 'use use_transactional_tests= instead' do
|
11
|
+
@klass.use_transactional_fixtures = true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_use_transactional_tests_prefers_use_transactional_fixtures
|
16
|
+
ActiveSupport::Deprecation.silence do
|
17
|
+
@klass.use_transactional_fixtures = false
|
18
|
+
end
|
19
|
+
|
20
|
+
assert_equal false, @klass.use_transactional_tests
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_use_transactional_tests_defaults_to_true
|
24
|
+
ActiveSupport::Deprecation.silence do
|
25
|
+
@klass.use_transactional_fixtures = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_equal true, @klass.use_transactional_tests
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_use_transactional_tests_can_be_overridden
|
32
|
+
@klass.use_transactional_tests = "foobar"
|
33
|
+
|
34
|
+
assert_equal "foobar", @klass.use_transactional_tests
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'support/schema_dumping_helper'
|
3
|
+
|
4
|
+
if subsecond_precision_supported?
|
5
|
+
class TimePrecisionTest < ActiveRecord::TestCase
|
6
|
+
include SchemaDumpingHelper
|
7
|
+
self.use_transactional_tests = false
|
8
|
+
|
9
|
+
class Foo < ActiveRecord::Base; end
|
10
|
+
|
11
|
+
setup do
|
12
|
+
@connection = ActiveRecord::Base.connection
|
13
|
+
Foo.reset_column_information
|
14
|
+
end
|
15
|
+
|
16
|
+
teardown do
|
17
|
+
@connection.drop_table :foos
|
18
|
+
#, if_exists: true
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_time_data_type_with_precision
|
22
|
+
@connection.create_table(:foos, force: true)
|
23
|
+
@connection.add_column :foos, :start, :time, precision: 3
|
24
|
+
@connection.add_column :foos, :finish, :time, precision: 6
|
25
|
+
assert_equal 3, Foo.columns_hash['start'].precision
|
26
|
+
assert_equal 6, Foo.columns_hash['finish'].precision
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_time_precision_is_truncated_on_assignment
|
30
|
+
@connection.create_table(:foos, force: true)
|
31
|
+
@connection.add_column :foos, :start, :time, precision: 0
|
32
|
+
@connection.add_column :foos, :finish, :time, precision: 6
|
33
|
+
|
34
|
+
time = ::Time.now.change(nsec: 123456789)
|
35
|
+
foo = Foo.new(start: time, finish: time)
|
36
|
+
|
37
|
+
assert_equal 0, foo.start.nsec
|
38
|
+
assert_equal 123456000, foo.finish.nsec
|
39
|
+
|
40
|
+
foo.save!
|
41
|
+
foo.reload
|
42
|
+
|
43
|
+
assert_equal 0, foo.start.nsec
|
44
|
+
assert_equal 123456000, foo.finish.nsec
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_passing_precision_to_time_does_not_set_limit
|
48
|
+
@connection.create_table(:foos, force: true) do |t|
|
49
|
+
t.time :start, precision: 3
|
50
|
+
t.time :finish, precision: 6
|
51
|
+
end
|
52
|
+
assert_nil Foo.columns_hash['start'].limit
|
53
|
+
assert_nil Foo.columns_hash['finish'].limit
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_invalid_time_precision_raises_error
|
57
|
+
assert_raises ActiveRecord::ActiveRecordError do
|
58
|
+
@connection.create_table(:foos, force: true) do |t|
|
59
|
+
t.time :start, precision: 7
|
60
|
+
t.time :finish, precision: 7
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_formatting_time_according_to_precision
|
66
|
+
@connection.create_table(:foos, force: true) do |t|
|
67
|
+
t.time :start, precision: 0
|
68
|
+
t.time :finish, precision: 4
|
69
|
+
end
|
70
|
+
time = ::Time.utc(2000, 1, 1, 12, 30, 0, 999999)
|
71
|
+
Foo.create!(start: time, finish: time)
|
72
|
+
assert foo = Foo.find_by(start: time)
|
73
|
+
assert_equal 1, Foo.where(finish: time).count
|
74
|
+
assert_equal time.to_s, foo.start.to_s
|
75
|
+
assert_equal time.to_s, foo.finish.to_s
|
76
|
+
assert_equal 000000, foo.start.usec
|
77
|
+
assert_equal 999900, foo.finish.usec
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_schema_dump_includes_time_precision
|
81
|
+
@connection.create_table(:foos, force: true) do |t|
|
82
|
+
t.time :start, precision: 4
|
83
|
+
t.time :finish, precision: 6
|
84
|
+
end
|
85
|
+
output = dump_table_schema("foos")
|
86
|
+
assert_match %r{t\.time\s+"start",\s+precision: 4$}, output
|
87
|
+
assert_match %r{t\.time\s+"finish",\s+precision: 6$}, output
|
88
|
+
end
|
89
|
+
|
90
|
+
if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter)
|
91
|
+
def test_time_precision_with_zero_should_be_dumped
|
92
|
+
@connection.create_table(:foos, force: true) do |t|
|
93
|
+
t.time :start, precision: 0
|
94
|
+
t.time :finish, precision: 0
|
95
|
+
end
|
96
|
+
output = dump_table_schema("foos")
|
97
|
+
assert_match %r{t\.time\s+"start",\s+precision: 0$}, output
|
98
|
+
assert_match %r{t\.time\s+"finish",\s+precision: 0$}, output
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
@@ -73,9 +73,20 @@ class TimestampTest < ActiveRecord::TestCase
|
|
73
73
|
assert_equal @previously_updated_at, @developer.updated_at
|
74
74
|
end
|
75
75
|
|
76
|
+
def test_touching_updates_timestamp_with_given_time
|
77
|
+
previously_updated_at = @developer.updated_at
|
78
|
+
new_time = Time.utc(2015, 2, 16, 0, 0, 0)
|
79
|
+
@developer.touch(time: new_time)
|
80
|
+
|
81
|
+
assert_not_equal previously_updated_at, @developer.updated_at
|
82
|
+
assert_equal new_time, @developer.updated_at
|
83
|
+
end
|
84
|
+
|
76
85
|
def test_touching_an_attribute_updates_timestamp
|
77
86
|
previously_created_at = @developer.created_at
|
78
|
-
|
87
|
+
travel(1.second) do
|
88
|
+
@developer.touch(:created_at)
|
89
|
+
end
|
79
90
|
|
80
91
|
assert !@developer.created_at_changed? , 'created_at should not be changed'
|
81
92
|
assert !@developer.changed?, 'record should not be changed'
|
@@ -87,8 +98,23 @@ class TimestampTest < ActiveRecord::TestCase
|
|
87
98
|
task = Task.first
|
88
99
|
previous_value = task.ending
|
89
100
|
task.touch(:ending)
|
101
|
+
|
102
|
+
now = Time.now.change(usec: 0)
|
103
|
+
|
90
104
|
assert_not_equal previous_value, task.ending
|
91
|
-
assert_in_delta
|
105
|
+
assert_in_delta now, task.ending, 1
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_touching_an_attribute_updates_timestamp_with_given_time
|
109
|
+
previously_updated_at = @developer.updated_at
|
110
|
+
previously_created_at = @developer.created_at
|
111
|
+
new_time = Time.utc(2015, 2, 16, 4, 54, 0)
|
112
|
+
@developer.touch(:created_at, time: new_time)
|
113
|
+
|
114
|
+
assert_not_equal previously_created_at, @developer.created_at
|
115
|
+
assert_not_equal previously_updated_at, @developer.updated_at
|
116
|
+
assert_equal new_time, @developer.created_at
|
117
|
+
assert_equal new_time, @developer.updated_at
|
92
118
|
end
|
93
119
|
|
94
120
|
def test_touching_many_attributes_updates_them
|
@@ -97,10 +123,12 @@ class TimestampTest < ActiveRecord::TestCase
|
|
97
123
|
previous_ending = task.ending
|
98
124
|
task.touch(:starting, :ending)
|
99
125
|
|
126
|
+
now = Time.now.change(usec: 0)
|
127
|
+
|
100
128
|
assert_not_equal previous_starting, task.starting
|
101
129
|
assert_not_equal previous_ending, task.ending
|
102
|
-
assert_in_delta
|
103
|
-
assert_in_delta
|
130
|
+
assert_in_delta now, task.starting, 1
|
131
|
+
assert_in_delta now, task.ending, 1
|
104
132
|
end
|
105
133
|
|
106
134
|
def test_touching_a_record_without_timestamps_is_unexceptional
|
@@ -178,8 +206,10 @@ class TimestampTest < ActiveRecord::TestCase
|
|
178
206
|
owner = pet.owner
|
179
207
|
previously_owner_updated_at = owner.updated_at
|
180
208
|
|
181
|
-
|
182
|
-
|
209
|
+
travel(1.second) do
|
210
|
+
pet.name = "Fluffy the Third"
|
211
|
+
pet.save
|
212
|
+
end
|
183
213
|
|
184
214
|
assert_not_equal previously_owner_updated_at, pet.owner.updated_at
|
185
215
|
end
|
@@ -189,7 +219,9 @@ class TimestampTest < ActiveRecord::TestCase
|
|
189
219
|
owner = pet.owner
|
190
220
|
previously_owner_updated_at = owner.updated_at
|
191
221
|
|
192
|
-
|
222
|
+
travel(1.second) do
|
223
|
+
pet.destroy
|
224
|
+
end
|
193
225
|
|
194
226
|
assert_not_equal previously_owner_updated_at, pet.owner.updated_at
|
195
227
|
end
|
@@ -233,8 +265,10 @@ class TimestampTest < ActiveRecord::TestCase
|
|
233
265
|
owner.update_columns(happy_at: 3.days.ago)
|
234
266
|
previously_owner_updated_at = owner.updated_at
|
235
267
|
|
236
|
-
|
237
|
-
|
268
|
+
travel(1.second) do
|
269
|
+
pet.name = "I'm a parrot"
|
270
|
+
pet.save
|
271
|
+
end
|
238
272
|
|
239
273
|
assert_not_equal previously_owner_updated_at, pet.owner.updated_at
|
240
274
|
end
|
@@ -440,7 +474,7 @@ end
|
|
440
474
|
|
441
475
|
class TimestampsWithoutTransactionTest < ActiveRecord::TestCase
|
442
476
|
include DdlHelper
|
443
|
-
self.
|
477
|
+
self.use_transactional_tests = false
|
444
478
|
|
445
479
|
class TimestampAttributePost < ActiveRecord::Base
|
446
480
|
attr_accessor :created_at, :updated_at
|