ibm_db 3.0.4 → 5.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGES +8 -1
- data/LICENSE +1 -1
- data/ParameterizedQueries README +6 -6
- data/README +38 -55
- data/ext/Makefile +266 -0
- data/ext/extconf.rb +34 -3
- data/ext/gil_release_version +3 -0
- data/ext/ibm_db.c +106 -111
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +103 -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 +911 -527
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
- data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
- data/test/cases/adapter_test.rb +148 -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 +176 -73
- data/test/cases/associations/extension_test.rb +7 -2
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +104 -32
- data/test/cases/associations/has_many_associations_test.rb +382 -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 +51 -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 +74 -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 +311 -236
- 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 +32 -44
- 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 +279 -151
- data/test/cases/fixture_set/file_test.rb +18 -0
- data/test/cases/fixtures_test.rb +123 -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 +118 -132
- 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 +68 -66
- 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 +114 -107
- 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 +18 -11
- data/test/cases/nested_attributes_test.rb +74 -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 +77 -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 +89 -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 +74 -8
- data/test/cases/tasks/mysql_rake_test.rb +143 -109
- data/test/cases/tasks/postgresql_rake_test.rb +71 -12
- 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 +47 -14
- 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 +150 -36
- data/test/cases/validations_repair_helper.rb +2 -6
- data/test/cases/validations_test.rb +36 -7
- data/test/cases/view_test.rb +108 -5
- data/test/cases/yaml_serialization_test.rb +36 -1
- 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 +5 -0
- data/test/models/club.rb +2 -0
- data/test/models/comment.rb +17 -5
- data/test/models/company.rb +7 -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 +22 -0
- data/test/models/face.rb +1 -1
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +5 -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 +11 -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 +183 -64
- 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 +145 -26
- 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 -51
- 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
data/test/cases/migrator_test.rb
CHANGED
@@ -2,11 +2,11 @@ require "cases/helper"
|
|
2
2
|
require "cases/migration/helper"
|
3
3
|
|
4
4
|
class MigratorTest < ActiveRecord::TestCase
|
5
|
-
self.
|
5
|
+
self.use_transactional_tests = false
|
6
6
|
|
7
7
|
# Use this class to sense if migrations have gone
|
8
8
|
# up or down.
|
9
|
-
class Sensor < ActiveRecord::Migration
|
9
|
+
class Sensor < ActiveRecord::Migration::Current
|
10
10
|
attr_reader :went_up, :went_down
|
11
11
|
|
12
12
|
def initialize name = self.class.name, version = nil
|
@@ -123,6 +123,67 @@ class MigratorTest < ActiveRecord::TestCase
|
|
123
123
|
assert_equal migration_list.last, migrations.first
|
124
124
|
end
|
125
125
|
|
126
|
+
def test_migrations_status
|
127
|
+
path = MIGRATIONS_ROOT + "/valid"
|
128
|
+
|
129
|
+
ActiveRecord::SchemaMigration.create(version: 2)
|
130
|
+
ActiveRecord::SchemaMigration.create(version: 10)
|
131
|
+
|
132
|
+
assert_equal [
|
133
|
+
["down", "001", "Valid people have last names"],
|
134
|
+
["up", "002", "We need reminders"],
|
135
|
+
["down", "003", "Innocent jointable"],
|
136
|
+
["up", "010", "********** NO FILE **********"],
|
137
|
+
], ActiveRecord::Migrator.migrations_status(path)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_migrations_status_in_subdirectories
|
141
|
+
path = MIGRATIONS_ROOT + "/valid_with_subdirectories"
|
142
|
+
|
143
|
+
ActiveRecord::SchemaMigration.create(version: 2)
|
144
|
+
ActiveRecord::SchemaMigration.create(version: 10)
|
145
|
+
|
146
|
+
assert_equal [
|
147
|
+
["down", "001", "Valid people have last names"],
|
148
|
+
["up", "002", "We need reminders"],
|
149
|
+
["down", "003", "Innocent jointable"],
|
150
|
+
["up", "010", "********** NO FILE **********"],
|
151
|
+
], ActiveRecord::Migrator.migrations_status(path)
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_migrations_status_with_schema_define_in_subdirectories
|
155
|
+
path = MIGRATIONS_ROOT + "/valid_with_subdirectories"
|
156
|
+
prev_paths = ActiveRecord::Migrator.migrations_paths
|
157
|
+
ActiveRecord::Migrator.migrations_paths = path
|
158
|
+
|
159
|
+
ActiveRecord::Schema.define(version: 3) do
|
160
|
+
end
|
161
|
+
|
162
|
+
assert_equal [
|
163
|
+
["up", "001", "Valid people have last names"],
|
164
|
+
["up", "002", "We need reminders"],
|
165
|
+
["up", "003", "Innocent jointable"],
|
166
|
+
], ActiveRecord::Migrator.migrations_status(path)
|
167
|
+
ensure
|
168
|
+
ActiveRecord::Migrator.migrations_paths = prev_paths
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_migrations_status_from_two_directories
|
172
|
+
paths = [MIGRATIONS_ROOT + "/valid_with_timestamps", MIGRATIONS_ROOT + "/to_copy_with_timestamps"]
|
173
|
+
|
174
|
+
ActiveRecord::SchemaMigration.create(version: "20100101010101")
|
175
|
+
ActiveRecord::SchemaMigration.create(version: "20160528010101")
|
176
|
+
|
177
|
+
assert_equal [
|
178
|
+
["down", "20090101010101", "People have hobbies"],
|
179
|
+
["down", "20090101010202", "People have descriptions"],
|
180
|
+
["up", "20100101010101", "Valid with timestamps people have last names"],
|
181
|
+
["down", "20100201010101", "Valid with timestamps we need reminders"],
|
182
|
+
["down", "20100301010101", "Valid with timestamps innocent jointable"],
|
183
|
+
["up", "20160528010101", "********** NO FILE **********"],
|
184
|
+
], ActiveRecord::Migrator.migrations_status(paths)
|
185
|
+
end
|
186
|
+
|
126
187
|
def test_migrator_interleaved_migrations
|
127
188
|
pass_one = [Sensor.new('One', 1)]
|
128
189
|
|
@@ -149,7 +210,7 @@ class MigratorTest < ActiveRecord::TestCase
|
|
149
210
|
def test_up_calls_up
|
150
211
|
migrations = [Sensor.new(nil, 0), Sensor.new(nil, 1), Sensor.new(nil, 2)]
|
151
212
|
ActiveRecord::Migrator.new(:up, migrations).migrate
|
152
|
-
assert migrations.all?
|
213
|
+
assert migrations.all?(&:went_up)
|
153
214
|
assert migrations.all? { |m| !m.went_down }
|
154
215
|
assert_equal 2, ActiveRecord::Migrator.current_version
|
155
216
|
end
|
@@ -160,7 +221,7 @@ class MigratorTest < ActiveRecord::TestCase
|
|
160
221
|
migrations = [Sensor.new(nil, 0), Sensor.new(nil, 1), Sensor.new(nil, 2)]
|
161
222
|
ActiveRecord::Migrator.new(:down, migrations).migrate
|
162
223
|
assert migrations.all? { |m| !m.went_up }
|
163
|
-
assert migrations.all?
|
224
|
+
assert migrations.all?(&:went_down)
|
164
225
|
assert_equal 0, ActiveRecord::Migrator.current_version
|
165
226
|
end
|
166
227
|
|
@@ -237,6 +298,7 @@ class MigratorTest < ActiveRecord::TestCase
|
|
237
298
|
def test_migrator_verbosity
|
238
299
|
_, migrations = sensors(3)
|
239
300
|
|
301
|
+
ActiveRecord::Migration.verbose = true
|
240
302
|
ActiveRecord::Migrator.new(:up, migrations, 1).migrate
|
241
303
|
assert_not_equal 0, ActiveRecord::Migration.message_count
|
242
304
|
|
@@ -249,7 +311,6 @@ class MigratorTest < ActiveRecord::TestCase
|
|
249
311
|
def test_migrator_verbosity_off
|
250
312
|
_, migrations = sensors(3)
|
251
313
|
|
252
|
-
ActiveRecord::Migration.message_count = 0
|
253
314
|
ActiveRecord::Migration.verbose = false
|
254
315
|
ActiveRecord::Migrator.new(:up, migrations, 1).migrate
|
255
316
|
assert_equal 0, ActiveRecord::Migration.message_count
|
@@ -290,6 +351,27 @@ class MigratorTest < ActiveRecord::TestCase
|
|
290
351
|
assert_equal [[:up, 1], [:up, 2], [:up, 3]], calls
|
291
352
|
end
|
292
353
|
|
354
|
+
def test_migrator_output_when_running_multiple_migrations
|
355
|
+
_, migrator = migrator_class(3)
|
356
|
+
|
357
|
+
result = migrator.migrate("valid")
|
358
|
+
assert_equal(3, result.count)
|
359
|
+
|
360
|
+
# Nothing migrated from duplicate run
|
361
|
+
result = migrator.migrate("valid")
|
362
|
+
assert_equal(0, result.count)
|
363
|
+
|
364
|
+
result = migrator.rollback("valid")
|
365
|
+
assert_equal(1, result.count)
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_migrator_output_when_running_single_migration
|
369
|
+
_, migrator = migrator_class(1)
|
370
|
+
result = migrator.run(:up, "valid", 1)
|
371
|
+
|
372
|
+
assert_equal(1, result.version)
|
373
|
+
end
|
374
|
+
|
293
375
|
def test_migrator_rollback
|
294
376
|
_, migrator = migrator_class(3)
|
295
377
|
|
@@ -312,10 +394,11 @@ class MigratorTest < ActiveRecord::TestCase
|
|
312
394
|
def test_migrator_db_has_no_schema_migrations_table
|
313
395
|
_, migrator = migrator_class(3)
|
314
396
|
|
315
|
-
ActiveRecord::Base.connection.
|
316
|
-
|
397
|
+
ActiveRecord::Base.connection.drop_table "schema_migrations"
|
398
|
+
#, if_exists: true
|
399
|
+
ActiveSupport::Deprecation.silence { assert_not ActiveRecord::Base.connection.table_exists?('schema_migrations') }
|
317
400
|
migrator.migrate("valid", 1)
|
318
|
-
assert ActiveRecord::Base.connection.table_exists?('schema_migrations')
|
401
|
+
ActiveSupport::Deprecation.silence { assert ActiveRecord::Base.connection.table_exists?('schema_migrations') }
|
319
402
|
end
|
320
403
|
|
321
404
|
def test_migrator_forward
|
data/test/cases/mixin_test.rb
CHANGED
@@ -61,8 +61,6 @@ class TouchTest < ActiveRecord::TestCase
|
|
61
61
|
|
62
62
|
# Make sure Mixin.record_timestamps gets reset, even if this test fails,
|
63
63
|
# so that other tests do not fail because Mixin.record_timestamps == false
|
64
|
-
rescue Exception => e
|
65
|
-
raise e
|
66
64
|
ensure
|
67
65
|
Mixin.record_timestamps = true
|
68
66
|
end
|
data/test/cases/modules_test.rb
CHANGED
@@ -63,17 +63,16 @@ class ModulesTest < ActiveRecord::TestCase
|
|
63
63
|
def test_assign_ids
|
64
64
|
firm = MyApplication::Business::Firm.first
|
65
65
|
|
66
|
-
assert_nothing_raised
|
66
|
+
assert_nothing_raised do
|
67
67
|
firm.client_ids = [MyApplication::Business::Client.first.id]
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
#
|
72
|
-
# the old join model, to test that. See http://dev.rubyonrails.org/ticket/9640
|
71
|
+
# An eager loading condition to force the eager loading model into the old join model.
|
73
72
|
def test_eager_loading_in_modules
|
74
73
|
clients = []
|
75
74
|
|
76
|
-
assert_nothing_raised
|
75
|
+
assert_nothing_raised do
|
77
76
|
clients << MyApplication::Business::Client.references(:accounts).merge!(:includes => {:firm => :account}, :where => 'accounts.id IS NOT NULL').find(3)
|
78
77
|
clients << MyApplication::Business::Client.includes(:firm => :account).find(3)
|
79
78
|
end
|
@@ -199,6 +199,7 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
199
199
|
|
200
200
|
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes
|
201
201
|
with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
|
202
|
+
Topic.reset_column_information
|
202
203
|
attributes = {
|
203
204
|
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
204
205
|
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
@@ -209,6 +210,22 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
209
210
|
assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
|
210
211
|
assert_equal Time.zone, topic.written_on.time_zone
|
211
212
|
end
|
213
|
+
ensure
|
214
|
+
Topic.reset_column_information
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_and_invalid_time_params
|
218
|
+
with_timezone_config aware_attributes: true do
|
219
|
+
Topic.reset_column_information
|
220
|
+
attributes = {
|
221
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "", "written_on(3i)" => ""
|
222
|
+
}
|
223
|
+
topic = Topic.find(1)
|
224
|
+
topic.attributes = attributes
|
225
|
+
assert_nil topic.written_on
|
226
|
+
end
|
227
|
+
ensure
|
228
|
+
Topic.reset_column_information
|
212
229
|
end
|
213
230
|
|
214
231
|
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
|
@@ -227,6 +244,7 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
227
244
|
def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
|
228
245
|
with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
|
229
246
|
Topic.skip_time_zone_conversion_for_attributes = [:written_on]
|
247
|
+
Topic.reset_column_information
|
230
248
|
attributes = {
|
231
249
|
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
232
250
|
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
@@ -238,21 +256,25 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
238
256
|
end
|
239
257
|
ensure
|
240
258
|
Topic.skip_time_zone_conversion_for_attributes = []
|
259
|
+
Topic.reset_column_information
|
241
260
|
end
|
242
261
|
|
243
262
|
# Oracle does not have a TIME datatype.
|
244
263
|
unless current_adapter?(:OracleAdapter)
|
245
264
|
def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
|
246
265
|
with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
|
266
|
+
Topic.reset_column_information
|
247
267
|
attributes = {
|
248
268
|
"bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
|
249
269
|
"bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
|
250
270
|
}
|
251
271
|
topic = Topic.find(1)
|
252
272
|
topic.attributes = attributes
|
253
|
-
assert_equal Time.
|
254
|
-
|
273
|
+
assert_equal Time.zone.local(2000, 1, 1, 16, 24, 0), topic.bonus_time
|
274
|
+
assert_not topic.bonus_time.utc?
|
255
275
|
end
|
276
|
+
ensure
|
277
|
+
Topic.reset_column_information
|
256
278
|
end
|
257
279
|
end
|
258
280
|
|
@@ -4,7 +4,7 @@ require 'models/bird'
|
|
4
4
|
require 'models/course'
|
5
5
|
|
6
6
|
class MultipleDbTest < ActiveRecord::TestCase
|
7
|
-
self.
|
7
|
+
self.use_transactional_tests = false
|
8
8
|
|
9
9
|
def setup
|
10
10
|
@courses = create_fixtures("courses") { Course.retrieve_connection }
|
@@ -24,6 +24,13 @@ class MultipleDbTest < ActiveRecord::TestCase
|
|
24
24
|
assert_equal(ActiveRecord::Base.connection, Entrant.connection)
|
25
25
|
end
|
26
26
|
|
27
|
+
def test_swapping_the_connection
|
28
|
+
old_spec_name, Course.connection_specification_name = Course.connection_specification_name, "primary"
|
29
|
+
assert_equal(Entrant.connection, Course.connection)
|
30
|
+
ensure
|
31
|
+
Course.connection_specification_name = old_spec_name
|
32
|
+
end
|
33
|
+
|
27
34
|
def test_find
|
28
35
|
c1 = Course.find(1)
|
29
36
|
assert_equal "Ruby Development", c1.name
|
@@ -89,22 +96,22 @@ class MultipleDbTest < ActiveRecord::TestCase
|
|
89
96
|
end
|
90
97
|
|
91
98
|
def test_connection
|
92
|
-
assert_equal Entrant.arel_engine.connection, Bird.arel_engine.connection
|
93
|
-
assert_not_equal Entrant.arel_engine.connection, Course.arel_engine.connection
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_count_on_custom_connection
|
97
|
-
ActiveRecord::Base.remove_connection
|
98
|
-
assert_equal 1, College.count
|
99
|
-
ensure
|
100
|
-
ActiveRecord::Base.establish_connection :arunit
|
99
|
+
assert_equal Entrant.arel_engine.connection.object_id, Bird.arel_engine.connection.object_id
|
100
|
+
assert_not_equal Entrant.arel_engine.connection.object_id, Course.arel_engine.connection.object_id
|
101
101
|
end
|
102
102
|
|
103
103
|
unless in_memory_db?
|
104
|
+
def test_count_on_custom_connection
|
105
|
+
ActiveRecord::Base.remove_connection
|
106
|
+
assert_equal 1, College.count
|
107
|
+
ensure
|
108
|
+
ActiveRecord::Base.establish_connection :arunit
|
109
|
+
end
|
110
|
+
|
104
111
|
def test_associations_should_work_when_model_has_no_connection
|
105
112
|
begin
|
106
113
|
ActiveRecord::Base.remove_connection
|
107
|
-
assert_nothing_raised
|
114
|
+
assert_nothing_raised do
|
108
115
|
College.first.courses.first
|
109
116
|
end
|
110
117
|
ensure
|
@@ -13,7 +13,7 @@ require 'active_support/hash_with_indifferent_access'
|
|
13
13
|
|
14
14
|
class TestNestedAttributesInGeneral < ActiveRecord::TestCase
|
15
15
|
teardown do
|
16
|
-
Pirate.accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc
|
16
|
+
Pirate.accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc(&:empty?)
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_base_should_have_an_empty_nested_attributes_options
|
@@ -61,6 +61,13 @@ class TestNestedAttributesInGeneral < ActiveRecord::TestCase
|
|
61
61
|
assert_equal "No association found for name `honesty'. Has it been defined yet?", exception.message
|
62
62
|
end
|
63
63
|
|
64
|
+
def test_should_raise_an_UnknownAttributeError_for_non_existing_nested_attributes
|
65
|
+
exception = assert_raise ActiveModel::UnknownAttributeError do
|
66
|
+
Pirate.new(:ship_attributes => { :sail => true })
|
67
|
+
end
|
68
|
+
assert_equal "unknown attribute 'sail' for Ship.", exception.message
|
69
|
+
end
|
70
|
+
|
64
71
|
def test_should_disable_allow_destroy_by_default
|
65
72
|
Pirate.accepts_nested_attributes_for :ship
|
66
73
|
|
@@ -69,7 +76,7 @@ class TestNestedAttributesInGeneral < ActiveRecord::TestCase
|
|
69
76
|
|
70
77
|
pirate.update(ship_attributes: { '_destroy' => true, :id => ship.id })
|
71
78
|
|
72
|
-
assert_nothing_raised
|
79
|
+
assert_nothing_raised { pirate.ship.reload }
|
73
80
|
end
|
74
81
|
|
75
82
|
def test_a_model_should_respond_to_underscore_destroy_and_return_if_it_is_marked_for_destruction
|
@@ -146,6 +153,19 @@ class TestNestedAttributesInGeneral < ActiveRecord::TestCase
|
|
146
153
|
assert man.reload.interests.empty?
|
147
154
|
end
|
148
155
|
|
156
|
+
def test_reject_if_is_not_short_circuited_if_allow_destroy_is_false
|
157
|
+
Pirate.accepts_nested_attributes_for :ship, reject_if: ->(a) { a[:name] == "The Golden Hind" }, allow_destroy: false
|
158
|
+
|
159
|
+
pirate = Pirate.create!(catchphrase: "Stop wastin' me time", ship_attributes: { name: "White Pearl", _destroy: "1" })
|
160
|
+
assert_equal "White Pearl", pirate.reload.ship.name
|
161
|
+
|
162
|
+
pirate.update!(ship_attributes: { id: pirate.ship.id, name: "The Golden Hind", _destroy: "1" })
|
163
|
+
assert_equal "White Pearl", pirate.reload.ship.name
|
164
|
+
|
165
|
+
pirate.update!(ship_attributes: { id: pirate.ship.id, name: "Black Pearl", _destroy: "1" })
|
166
|
+
assert_equal "Black Pearl", pirate.reload.ship.name
|
167
|
+
end
|
168
|
+
|
149
169
|
def test_has_many_association_updating_a_single_record
|
150
170
|
Man.accepts_nested_attributes_for(:interests)
|
151
171
|
man = Man.create(name: 'John')
|
@@ -160,7 +180,7 @@ class TestNestedAttributesInGeneral < ActiveRecord::TestCase
|
|
160
180
|
|
161
181
|
pirate = Pirate.new(:catchphrase => "Stop wastin' me time")
|
162
182
|
pirate.ship_attributes = { :id => "" }
|
163
|
-
assert_nothing_raised
|
183
|
+
assert_nothing_raised { pirate.save! }
|
164
184
|
end
|
165
185
|
|
166
186
|
def test_first_and_array_index_zero_methods_return_the_same_value_when_nested_attributes_are_set_to_update_existing_record
|
@@ -273,10 +293,11 @@ class TestNestedAttributesOnAHasOneAssociation < ActiveRecord::TestCase
|
|
273
293
|
end
|
274
294
|
|
275
295
|
def test_should_modify_an_existing_record_if_there_is_a_matching_composite_id
|
276
|
-
@ship.
|
277
|
-
|
296
|
+
@ship.stub(:id, 'ABC1X') do
|
297
|
+
@pirate.ship_attributes = { :id => @ship.id, :name => 'Davy Jones Gold Dagger' }
|
278
298
|
|
279
|
-
|
299
|
+
assert_equal 'Davy Jones Gold Dagger', @pirate.ship.name
|
300
|
+
end
|
280
301
|
end
|
281
302
|
|
282
303
|
def test_should_destroy_an_existing_record_if_there_is_a_matching_id_and_destroy_is_truthy
|
@@ -300,13 +321,13 @@ class TestNestedAttributesOnAHasOneAssociation < ActiveRecord::TestCase
|
|
300
321
|
end
|
301
322
|
|
302
323
|
def test_should_not_destroy_an_existing_record_if_allow_destroy_is_false
|
303
|
-
Pirate.accepts_nested_attributes_for :ship, :allow_destroy => false, :reject_if => proc
|
324
|
+
Pirate.accepts_nested_attributes_for :ship, :allow_destroy => false, :reject_if => proc(&:empty?)
|
304
325
|
|
305
326
|
@pirate.update(ship_attributes: { id: @pirate.ship.id, _destroy: '1' })
|
306
327
|
|
307
328
|
assert_equal @ship, @pirate.reload.ship
|
308
329
|
|
309
|
-
Pirate.accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc
|
330
|
+
Pirate.accepts_nested_attributes_for :ship, :allow_destroy => true, :reject_if => proc(&:empty?)
|
310
331
|
end
|
311
332
|
|
312
333
|
def test_should_also_work_with_a_HashWithIndifferentAccess
|
@@ -457,10 +478,11 @@ class TestNestedAttributesOnABelongsToAssociation < ActiveRecord::TestCase
|
|
457
478
|
end
|
458
479
|
|
459
480
|
def test_should_modify_an_existing_record_if_there_is_a_matching_composite_id
|
460
|
-
@pirate.
|
461
|
-
|
481
|
+
@pirate.stub(:id, 'ABC1X') do
|
482
|
+
@ship.pirate_attributes = { :id => @pirate.id, :catchphrase => 'Arr' }
|
462
483
|
|
463
|
-
|
484
|
+
assert_equal 'Arr', @ship.pirate.catchphrase
|
485
|
+
end
|
464
486
|
end
|
465
487
|
|
466
488
|
def test_should_destroy_an_existing_record_if_there_is_a_matching_id_and_destroy_is_truthy
|
@@ -489,17 +511,17 @@ class TestNestedAttributesOnABelongsToAssociation < ActiveRecord::TestCase
|
|
489
511
|
def test_should_not_destroy_an_existing_record_if_destroy_is_not_truthy
|
490
512
|
[nil, '0', 0, 'false', false].each do |not_truth|
|
491
513
|
@ship.update(pirate_attributes: { id: @ship.pirate.id, _destroy: not_truth })
|
492
|
-
assert_nothing_raised
|
514
|
+
assert_nothing_raised { @ship.pirate.reload }
|
493
515
|
end
|
494
516
|
end
|
495
517
|
|
496
518
|
def test_should_not_destroy_an_existing_record_if_allow_destroy_is_false
|
497
|
-
Ship.accepts_nested_attributes_for :pirate, :allow_destroy => false, :reject_if => proc
|
519
|
+
Ship.accepts_nested_attributes_for :pirate, :allow_destroy => false, :reject_if => proc(&:empty?)
|
498
520
|
|
499
521
|
@ship.update(pirate_attributes: { id: @ship.pirate.id, _destroy: '1' })
|
500
|
-
assert_nothing_raised
|
522
|
+
assert_nothing_raised { @ship.pirate.reload }
|
501
523
|
ensure
|
502
|
-
Ship.accepts_nested_attributes_for :pirate, :allow_destroy => true, :reject_if => proc
|
524
|
+
Ship.accepts_nested_attributes_for :pirate, :allow_destroy => true, :reject_if => proc(&:empty?)
|
503
525
|
end
|
504
526
|
|
505
527
|
def test_should_work_with_update_as_well
|
@@ -514,7 +536,7 @@ class TestNestedAttributesOnABelongsToAssociation < ActiveRecord::TestCase
|
|
514
536
|
pirate = @ship.pirate
|
515
537
|
|
516
538
|
@ship.attributes = { :pirate_attributes => { :id => pirate.id, '_destroy' => true } }
|
517
|
-
assert_nothing_raised
|
539
|
+
assert_nothing_raised { Pirate.find(pirate.id) }
|
518
540
|
@ship.save
|
519
541
|
assert_raise(ActiveRecord::RecordNotFound) { Pirate.find(pirate.id) }
|
520
542
|
end
|
@@ -567,6 +589,13 @@ module NestedAttributesOnACollectionAssociationTests
|
|
567
589
|
assert_respond_to @pirate, association_setter
|
568
590
|
end
|
569
591
|
|
592
|
+
def test_should_raise_an_UnknownAttributeError_for_non_existing_nested_attributes_for_has_many
|
593
|
+
exception = assert_raise ActiveModel::UnknownAttributeError do
|
594
|
+
@pirate.parrots_attributes = [{ peg_leg: true }]
|
595
|
+
end
|
596
|
+
assert_equal "unknown attribute 'peg_leg' for Parrot.", exception.message
|
597
|
+
end
|
598
|
+
|
570
599
|
def test_should_save_only_one_association_on_create
|
571
600
|
pirate = Pirate.create!({
|
572
601
|
:catchphrase => 'Arr',
|
@@ -638,17 +667,19 @@ module NestedAttributesOnACollectionAssociationTests
|
|
638
667
|
end
|
639
668
|
|
640
669
|
def test_should_take_a_hash_with_composite_id_keys_and_assign_the_attributes_to_the_associated_models
|
641
|
-
@child_1.
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
670
|
+
@child_1.stub(:id, 'ABC1X') do
|
671
|
+
@child_2.stub(:id, 'ABC2X') do
|
672
|
+
|
673
|
+
@pirate.attributes = {
|
674
|
+
association_getter => [
|
675
|
+
{ :id => @child_1.id, :name => 'Grace OMalley' },
|
676
|
+
{ :id => @child_2.id, :name => 'Privateers Greed' }
|
677
|
+
]
|
678
|
+
}
|
650
679
|
|
651
|
-
|
680
|
+
assert_equal ['Grace OMalley', 'Privateers Greed'], [@child_1.name, @child_2.name]
|
681
|
+
end
|
682
|
+
end
|
652
683
|
end
|
653
684
|
|
654
685
|
def test_should_raise_RecordNotFound_if_an_id_is_given_but_doesnt_return_a_record
|
@@ -658,6 +689,16 @@ module NestedAttributesOnACollectionAssociationTests
|
|
658
689
|
assert_equal "Couldn't find #{@child_1.class.name} with ID=1234567890 for Pirate with ID=#{@pirate.id}", exception.message
|
659
690
|
end
|
660
691
|
|
692
|
+
def test_should_raise_RecordNotFound_if_an_id_belonging_to_a_different_record_is_given
|
693
|
+
other_pirate = Pirate.create! catchphrase: 'Ahoy!'
|
694
|
+
other_child = other_pirate.send(@association_name).create! name: 'Buccaneers Servant'
|
695
|
+
|
696
|
+
exception = assert_raise ActiveRecord::RecordNotFound do
|
697
|
+
@pirate.attributes = { association_getter => [{ id: other_child.id }] }
|
698
|
+
end
|
699
|
+
assert_equal "Couldn't find #{@child_1.class.name} with ID=#{other_child.id} for Pirate with ID=#{@pirate.id}", exception.message
|
700
|
+
end
|
701
|
+
|
661
702
|
def test_should_automatically_build_new_associated_models_for_each_entry_in_a_hash_where_the_id_is_missing
|
662
703
|
@pirate.send(@association_name).destroy_all
|
663
704
|
@pirate.reload.attributes = {
|
@@ -672,7 +713,7 @@ module NestedAttributesOnACollectionAssociationTests
|
|
672
713
|
end
|
673
714
|
|
674
715
|
def test_should_not_assign_destroy_key_to_a_record
|
675
|
-
assert_nothing_raised
|
716
|
+
assert_nothing_raised do
|
676
717
|
@pirate.send(association_setter, { 'foo' => { '_destroy' => '0' }})
|
677
718
|
end
|
678
719
|
end
|
@@ -707,8 +748,8 @@ module NestedAttributesOnACollectionAssociationTests
|
|
707
748
|
end
|
708
749
|
|
709
750
|
def test_should_raise_an_argument_error_if_something_else_than_a_hash_is_passed
|
710
|
-
assert_nothing_raised
|
711
|
-
assert_nothing_raised
|
751
|
+
assert_nothing_raised { @pirate.send(association_setter, {}) }
|
752
|
+
assert_nothing_raised { @pirate.send(association_setter, Hash.new) }
|
712
753
|
|
713
754
|
exception = assert_raise ArgumentError do
|
714
755
|
@pirate.send(association_setter, "foo")
|
@@ -783,7 +824,7 @@ module NestedAttributesOnACollectionAssociationTests
|
|
783
824
|
|
784
825
|
def test_can_use_symbols_as_object_identifier
|
785
826
|
@pirate.attributes = { :parrots_attributes => { :foo => { :name => 'Lovely Day' }, :bar => { :name => 'Blown Away' } } }
|
786
|
-
assert_nothing_raised
|
827
|
+
assert_nothing_raised { @pirate.save! }
|
787
828
|
end
|
788
829
|
|
789
830
|
def test_numeric_column_changes_from_zero_to_no_empty_string
|
@@ -855,7 +896,7 @@ end
|
|
855
896
|
|
856
897
|
module NestedAttributesLimitTests
|
857
898
|
def teardown
|
858
|
-
Pirate.accepts_nested_attributes_for :parrots, :allow_destroy => true, :reject_if => proc
|
899
|
+
Pirate.accepts_nested_attributes_for :parrots, :allow_destroy => true, :reject_if => proc(&:empty?)
|
859
900
|
end
|
860
901
|
|
861
902
|
def test_limit_with_less_records
|
@@ -943,7 +984,7 @@ class TestNestedAttributesWithNonStandardPrimaryKeys < ActiveRecord::TestCase
|
|
943
984
|
end
|
944
985
|
|
945
986
|
class TestHasOneAutosaveAssociationWhichItselfHasAutosaveAssociations < ActiveRecord::TestCase
|
946
|
-
self.
|
987
|
+
self.use_transactional_tests = false unless supports_savepoints?
|
947
988
|
|
948
989
|
def setup
|
949
990
|
@pirate = Pirate.create!(:catchphrase => "My baby takes tha mornin' train!")
|
@@ -983,7 +1024,7 @@ class TestHasOneAutosaveAssociationWhichItselfHasAutosaveAssociations < ActiveRe
|
|
983
1024
|
end
|
984
1025
|
|
985
1026
|
class TestHasManyAutosaveAssociationWhichItselfHasAutosaveAssociations < ActiveRecord::TestCase
|
986
|
-
self.
|
1027
|
+
self.use_transactional_tests = false unless supports_savepoints?
|
987
1028
|
|
988
1029
|
def setup
|
989
1030
|
@ship = Ship.create!(:name => "The good ship Dollypop")
|