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
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'models/content'
|
3
|
+
|
4
|
+
class BidirectionalDestroyDependenciesTest < ActiveRecord::TestCase
|
5
|
+
fixtures :content, :content_positions
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Content.destroyed_ids.clear
|
9
|
+
ContentPosition.destroyed_ids.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_bidirectional_dependence_when_destroying_item_with_belongs_to_association
|
13
|
+
content_position = ContentPosition.find(1)
|
14
|
+
content = content_position.content
|
15
|
+
assert_not_nil content
|
16
|
+
|
17
|
+
content_position.destroy
|
18
|
+
|
19
|
+
assert_equal [content_position.id], ContentPosition.destroyed_ids
|
20
|
+
assert_equal [content.id], Content.destroyed_ids
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_bidirectional_dependence_when_destroying_item_with_has_one_association
|
24
|
+
content = Content.find(1)
|
25
|
+
content_position = content.content_position
|
26
|
+
assert_not_nil content_position
|
27
|
+
|
28
|
+
content.destroy
|
29
|
+
|
30
|
+
assert_equal [content.id], Content.destroyed_ids
|
31
|
+
assert_equal [content_position.id], ContentPosition.destroyed_ids
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_bidirectional_dependence_when_destroying_item_with_has_one_association_fails_first_time
|
35
|
+
content = ContentWhichRequiresTwoDestroyCalls.find(1)
|
36
|
+
|
37
|
+
2.times { content.destroy }
|
38
|
+
|
39
|
+
assert_equal content.destroyed?, true
|
40
|
+
end
|
41
|
+
end
|
@@ -7,7 +7,7 @@ require 'models/computer'
|
|
7
7
|
require 'models/company'
|
8
8
|
|
9
9
|
class AssociationCallbacksTest < ActiveRecord::TestCase
|
10
|
-
fixtures :posts, :authors, :projects, :developers
|
10
|
+
fixtures :posts, :authors, :projects, :developers
|
11
11
|
|
12
12
|
def setup
|
13
13
|
@david = authors(:david)
|
@@ -15,7 +15,6 @@ class AssociationCallbacksTest < ActiveRecord::TestCase
|
|
15
15
|
@authorless = posts(:authorless)
|
16
16
|
assert @david.post_log.empty?
|
17
17
|
end
|
18
|
-
|
19
18
|
|
20
19
|
def test_adding_macro_callbacks
|
21
20
|
@david.posts_with_callbacks << @thinking
|
@@ -25,7 +24,6 @@ class AssociationCallbacksTest < ActiveRecord::TestCase
|
|
25
24
|
"after_adding#{@thinking.id}"], @david.post_log
|
26
25
|
end
|
27
26
|
|
28
|
-
|
29
27
|
def test_adding_with_proc_callbacks
|
30
28
|
@david.posts_with_proc_callbacks << @thinking
|
31
29
|
assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
|
@@ -179,14 +177,14 @@ class AssociationCallbacksTest < ActiveRecord::TestCase
|
|
179
177
|
end
|
180
178
|
|
181
179
|
def test_dont_add_if_before_callback_raises_exception
|
182
|
-
assert !@david.
|
180
|
+
assert !@david.unchangeable_posts.include?(@authorless)
|
183
181
|
begin
|
184
|
-
@david.
|
182
|
+
@david.unchangeable_posts << @authorless
|
185
183
|
rescue Exception
|
186
184
|
end
|
187
185
|
assert @david.post_log.empty?
|
188
|
-
assert !@david.
|
186
|
+
assert !@david.unchangeable_posts.include?(@authorless)
|
189
187
|
@david.reload
|
190
|
-
assert !@david.
|
188
|
+
assert !@david.unchangeable_posts.include?(@authorless)
|
191
189
|
end
|
192
190
|
end
|
@@ -13,7 +13,7 @@ require 'models/edge'
|
|
13
13
|
|
14
14
|
class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
15
15
|
fixtures :authors, :mixins, :companies, :posts, :topics, :accounts, :comments,
|
16
|
-
:categorizations, :people, :categories, :edges, :vertices
|
16
|
+
:categorizations, :people, :categories, :edges, :vertices
|
17
17
|
|
18
18
|
def test_eager_association_loading_with_cascaded_two_levels
|
19
19
|
authors = Author.all.merge!(:includes=>{:posts=>:comments}, :order=>"authors.id").to_a
|
@@ -70,9 +70,7 @@ class EagerLoadPolyAssocsTest < ActiveRecord::TestCase
|
|
70
70
|
|
71
71
|
teardown do
|
72
72
|
[Circle, Square, Triangle, PaintColor, PaintTexture,
|
73
|
-
ShapeExpression, NonPolyOne, NonPolyTwo].each
|
74
|
-
c.delete_all
|
75
|
-
end
|
73
|
+
ShapeExpression, NonPolyOne, NonPolyTwo].each(&:delete_all)
|
76
74
|
end
|
77
75
|
|
78
76
|
def generate_test_object_graphs
|
@@ -24,6 +24,8 @@ require 'models/membership'
|
|
24
24
|
require 'models/club'
|
25
25
|
require 'models/categorization'
|
26
26
|
require 'models/sponsor'
|
27
|
+
require 'models/mentor'
|
28
|
+
require 'models/contract'
|
27
29
|
|
28
30
|
class EagerAssociationTest < ActiveRecord::TestCase
|
29
31
|
fixtures :posts, :comments, :authors, :essays, :author_addresses, :categories, :categories_posts,
|
@@ -66,6 +68,10 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
66
68
|
"expected to find only david's posts"
|
67
69
|
end
|
68
70
|
|
71
|
+
def test_loading_with_scope_including_joins
|
72
|
+
assert_equal clubs(:boring_club), Member.preload(:general_club).find(1).general_club
|
73
|
+
end
|
74
|
+
|
69
75
|
def test_with_ordering
|
70
76
|
list = Post.all.merge!(:includes => :comments, :order => "posts.id DESC").to_a
|
71
77
|
[:other_by_mary, :other_by_bob, :misc_by_mary, :misc_by_bob, :eager_other,
|
@@ -108,53 +114,57 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
108
114
|
end
|
109
115
|
|
110
116
|
def test_preloading_has_many_in_multiple_queries_with_more_ids_than_database_can_handle
|
111
|
-
Comment.connection
|
112
|
-
|
113
|
-
|
117
|
+
assert_called(Comment.connection, :in_clause_length, returns: 5) do
|
118
|
+
posts = Post.all.merge!(:includes=>:comments).to_a
|
119
|
+
assert_equal 11, posts.size
|
120
|
+
end
|
114
121
|
end
|
115
122
|
|
116
123
|
def test_preloading_has_many_in_one_queries_when_database_has_no_limit_on_ids_it_can_handle
|
117
|
-
Comment.connection
|
118
|
-
|
119
|
-
|
124
|
+
assert_called(Comment.connection, :in_clause_length, returns: nil) do
|
125
|
+
posts = Post.all.merge!(:includes=>:comments).to_a
|
126
|
+
assert_equal 11, posts.size
|
127
|
+
end
|
120
128
|
end
|
121
129
|
|
122
130
|
def test_preloading_habtm_in_multiple_queries_with_more_ids_than_database_can_handle
|
123
|
-
Comment.connection
|
124
|
-
|
125
|
-
|
131
|
+
assert_called(Comment.connection, :in_clause_length, times: 2, returns: 5) do
|
132
|
+
posts = Post.all.merge!(:includes=>:categories).to_a
|
133
|
+
assert_equal 11, posts.size
|
134
|
+
end
|
126
135
|
end
|
127
136
|
|
128
137
|
def test_preloading_habtm_in_one_queries_when_database_has_no_limit_on_ids_it_can_handle
|
129
|
-
Comment.connection
|
130
|
-
|
131
|
-
|
138
|
+
assert_called(Comment.connection, :in_clause_length, times: 2, returns: nil) do
|
139
|
+
posts = Post.all.merge!(:includes=>:categories).to_a
|
140
|
+
assert_equal 11, posts.size
|
141
|
+
end
|
132
142
|
end
|
133
143
|
|
134
144
|
def test_load_associated_records_in_one_query_when_adapter_has_no_limit
|
135
|
-
Comment.connection
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
145
|
+
assert_called(Comment.connection, :in_clause_length, returns: nil) do
|
146
|
+
post = posts(:welcome)
|
147
|
+
assert_queries(2) do
|
148
|
+
Post.includes(:comments).where(:id => post.id).to_a
|
149
|
+
end
|
140
150
|
end
|
141
151
|
end
|
142
152
|
|
143
153
|
def test_load_associated_records_in_several_queries_when_many_ids_passed
|
144
|
-
Comment.connection
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
154
|
+
assert_called(Comment.connection, :in_clause_length, returns: 1) do
|
155
|
+
post1, post2 = posts(:welcome), posts(:thinking)
|
156
|
+
assert_queries(3) do
|
157
|
+
Post.includes(:comments).where(:id => [post1.id, post2.id]).to_a
|
158
|
+
end
|
149
159
|
end
|
150
160
|
end
|
151
161
|
|
152
162
|
def test_load_associated_records_in_one_query_when_a_few_ids_passed
|
153
|
-
Comment.connection
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
163
|
+
assert_called(Comment.connection, :in_clause_length, returns: 3) do
|
164
|
+
post = posts(:welcome)
|
165
|
+
assert_queries(2) do
|
166
|
+
Post.includes(:comments).where(:id => post.id).to_a
|
167
|
+
end
|
158
168
|
end
|
159
169
|
end
|
160
170
|
|
@@ -346,31 +356,31 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
346
356
|
def test_eager_association_loading_with_belongs_to_and_limit
|
347
357
|
comments = Comment.all.merge!(:includes => :post, :limit => 5, :order => 'comments.id').to_a
|
348
358
|
assert_equal 5, comments.length
|
349
|
-
assert_equal [1,2,3,5,6], comments.collect
|
359
|
+
assert_equal [1,2,3,5,6], comments.collect(&:id)
|
350
360
|
end
|
351
361
|
|
352
362
|
def test_eager_association_loading_with_belongs_to_and_limit_and_conditions
|
353
363
|
comments = Comment.all.merge!(:includes => :post, :where => 'post_id = 4', :limit => 3, :order => 'comments.id').to_a
|
354
364
|
assert_equal 3, comments.length
|
355
|
-
assert_equal [5,6,7], comments.collect
|
365
|
+
assert_equal [5,6,7], comments.collect(&:id)
|
356
366
|
end
|
357
367
|
|
358
368
|
def test_eager_association_loading_with_belongs_to_and_limit_and_offset
|
359
369
|
comments = Comment.all.merge!(:includes => :post, :limit => 3, :offset => 2, :order => 'comments.id').to_a
|
360
370
|
assert_equal 3, comments.length
|
361
|
-
assert_equal [3,5,6], comments.collect
|
371
|
+
assert_equal [3,5,6], comments.collect(&:id)
|
362
372
|
end
|
363
373
|
|
364
374
|
def test_eager_association_loading_with_belongs_to_and_limit_and_offset_and_conditions
|
365
375
|
comments = Comment.all.merge!(:includes => :post, :where => 'post_id = 4', :limit => 3, :offset => 1, :order => 'comments.id').to_a
|
366
376
|
assert_equal 3, comments.length
|
367
|
-
assert_equal [6,7,8], comments.collect
|
377
|
+
assert_equal [6,7,8], comments.collect(&:id)
|
368
378
|
end
|
369
379
|
|
370
380
|
def test_eager_association_loading_with_belongs_to_and_limit_and_offset_and_conditions_array
|
371
381
|
comments = Comment.all.merge!(:includes => :post, :where => ['post_id = ?',4], :limit => 3, :offset => 1, :order => 'comments.id').to_a
|
372
382
|
assert_equal 3, comments.length
|
373
|
-
assert_equal [6,7,8], comments.collect
|
383
|
+
assert_equal [6,7,8], comments.collect(&:id)
|
374
384
|
end
|
375
385
|
|
376
386
|
def test_eager_association_loading_with_belongs_to_and_conditions_string_with_unquoted_table_name
|
@@ -385,7 +395,7 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
385
395
|
comments = Comment.all.merge!(:includes => :post, :where => {:posts => {:id => 4}}, :limit => 3, :order => 'comments.id').to_a
|
386
396
|
end
|
387
397
|
assert_equal 3, comments.length
|
388
|
-
assert_equal [5,6,7], comments.collect
|
398
|
+
assert_equal [5,6,7], comments.collect(&:id)
|
389
399
|
assert_no_queries do
|
390
400
|
comments.first.post
|
391
401
|
end
|
@@ -414,13 +424,13 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
414
424
|
def test_eager_association_loading_with_belongs_to_and_limit_and_multiple_associations
|
415
425
|
posts = Post.all.merge!(:includes => [:author, :very_special_comment], :limit => 1, :order => 'posts.id').to_a
|
416
426
|
assert_equal 1, posts.length
|
417
|
-
assert_equal [1], posts.collect
|
427
|
+
assert_equal [1], posts.collect(&:id)
|
418
428
|
end
|
419
429
|
|
420
430
|
def test_eager_association_loading_with_belongs_to_and_limit_and_offset_and_multiple_associations
|
421
431
|
posts = Post.all.merge!(:includes => [:author, :very_special_comment], :limit => 1, :offset => 1, :order => 'posts.id').to_a
|
422
432
|
assert_equal 1, posts.length
|
423
|
-
assert_equal [2], posts.collect
|
433
|
+
assert_equal [2], posts.collect(&:id)
|
424
434
|
end
|
425
435
|
|
426
436
|
def test_eager_association_loading_with_belongs_to_inferred_foreign_key_from_association_name
|
@@ -511,8 +521,8 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
511
521
|
end
|
512
522
|
|
513
523
|
def test_eager_with_has_many_through_an_sti_join_model_with_conditions_on_both
|
514
|
-
author = Author.all.merge!(:includes => :
|
515
|
-
assert_equal [], author.
|
524
|
+
author = Author.all.merge!(:includes => :special_nonexistent_post_comments, :order => 'authors.id').first
|
525
|
+
assert_equal [], author.special_nonexistent_post_comments
|
516
526
|
end
|
517
527
|
|
518
528
|
def test_eager_with_has_many_through_join_model_with_conditions
|
@@ -553,13 +563,13 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
553
563
|
def test_eager_with_has_many_and_limit_and_conditions
|
554
564
|
posts = Post.all.merge!(:includes => [ :author, :comments ], :limit => 2, :where => "posts.body = 'hello'", :order => "posts.id").to_a
|
555
565
|
assert_equal 2, posts.size
|
556
|
-
assert_equal [4,5], posts.collect
|
566
|
+
assert_equal [4,5], posts.collect(&:id)
|
557
567
|
end
|
558
568
|
|
559
569
|
def test_eager_with_has_many_and_limit_and_conditions_array
|
560
570
|
posts = Post.all.merge!(:includes => [ :author, :comments ], :limit => 2, :where => [ "posts.body = ?", 'hello' ], :order => "posts.id").to_a
|
561
571
|
assert_equal 2, posts.size
|
562
|
-
assert_equal [4,5], posts.collect
|
572
|
+
assert_equal [4,5], posts.collect(&:id)
|
563
573
|
end
|
564
574
|
|
565
575
|
def test_eager_with_has_many_and_limit_and_conditions_array_on_the_eagers
|
@@ -743,6 +753,38 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
743
753
|
}
|
744
754
|
end
|
745
755
|
|
756
|
+
def test_eager_has_many_through_with_order
|
757
|
+
tag = OrderedTag.create(name: 'Foo')
|
758
|
+
post1 = Post.create!(title: 'Beaches', body: "I like beaches!")
|
759
|
+
post2 = Post.create!(title: 'Pools', body: "I like pools!")
|
760
|
+
|
761
|
+
Tagging.create!(taggable_type: 'Post', taggable_id: post1.id, tag: tag)
|
762
|
+
Tagging.create!(taggable_type: 'Post', taggable_id: post2.id, tag: tag)
|
763
|
+
|
764
|
+
tag_with_includes = OrderedTag.includes(:tagged_posts).find(tag.id)
|
765
|
+
assert_equal(tag_with_includes.taggings.map(&:taggable).map(&:title), tag_with_includes.tagged_posts.map(&:title))
|
766
|
+
end
|
767
|
+
|
768
|
+
def test_eager_has_many_through_multiple_with_order
|
769
|
+
tag1 = OrderedTag.create!(name: 'Bar')
|
770
|
+
tag2 = OrderedTag.create!(name: 'Foo')
|
771
|
+
|
772
|
+
post1 = Post.create!(title: 'Beaches', body: "I like beaches!")
|
773
|
+
post2 = Post.create!(title: 'Pools', body: "I like pools!")
|
774
|
+
|
775
|
+
Tagging.create!(taggable: post1, tag: tag1)
|
776
|
+
Tagging.create!(taggable: post2, tag: tag1)
|
777
|
+
Tagging.create!(taggable: post2, tag: tag2)
|
778
|
+
Tagging.create!(taggable: post1, tag: tag2)
|
779
|
+
|
780
|
+
tags_with_includes = OrderedTag.where(id: [tag1, tag2].map(&:id)).includes(:tagged_posts).order(:id).to_a
|
781
|
+
tag1_with_includes = tags_with_includes.first
|
782
|
+
tag2_with_includes = tags_with_includes.last
|
783
|
+
|
784
|
+
assert_equal([post2, post1].map(&:title), tag1_with_includes.tagged_posts.map(&:title))
|
785
|
+
assert_equal([post1, post2].map(&:title), tag2_with_includes.tagged_posts.map(&:title))
|
786
|
+
end
|
787
|
+
|
746
788
|
def test_eager_with_default_scope
|
747
789
|
developer = EagerDeveloperWithDefaultScope.where(:name => 'David').first
|
748
790
|
projects = Project.order(:id).to_a
|
@@ -759,6 +801,23 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
759
801
|
end
|
760
802
|
end
|
761
803
|
|
804
|
+
def test_eager_with_default_scope_as_class_method_using_find_method
|
805
|
+
david = developers(:david)
|
806
|
+
developer = EagerDeveloperWithClassMethodDefaultScope.find(david.id)
|
807
|
+
projects = Project.order(:id).to_a
|
808
|
+
assert_no_queries do
|
809
|
+
assert_equal(projects, developer.projects)
|
810
|
+
end
|
811
|
+
end
|
812
|
+
|
813
|
+
def test_eager_with_default_scope_as_class_method_using_find_by_method
|
814
|
+
developer = EagerDeveloperWithClassMethodDefaultScope.find_by(name: 'David')
|
815
|
+
projects = Project.order(:id).to_a
|
816
|
+
assert_no_queries do
|
817
|
+
assert_equal(projects, developer.projects)
|
818
|
+
end
|
819
|
+
end
|
820
|
+
|
762
821
|
def test_eager_with_default_scope_as_lambda
|
763
822
|
developer = EagerDeveloperWithLambdaDefaultScope.where(:name => 'David').first
|
764
823
|
projects = Project.order(:id).to_a
|
@@ -868,18 +927,6 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
868
927
|
)
|
869
928
|
end
|
870
929
|
|
871
|
-
def test_preload_with_interpolation
|
872
|
-
assert_deprecated do
|
873
|
-
post = Post.includes(:comments_with_interpolated_conditions).find(posts(:welcome).id)
|
874
|
-
assert_equal [comments(:greetings)], post.comments_with_interpolated_conditions
|
875
|
-
end
|
876
|
-
|
877
|
-
assert_deprecated do
|
878
|
-
post = Post.joins(:comments_with_interpolated_conditions).find(posts(:welcome).id)
|
879
|
-
assert_equal [comments(:greetings)], post.comments_with_interpolated_conditions
|
880
|
-
end
|
881
|
-
end
|
882
|
-
|
883
930
|
def test_polymorphic_type_condition
|
884
931
|
post = Post.all.merge!(:includes => :taggings).find(posts(:thinking).id)
|
885
932
|
assert post.taggings.include?(taggings(:thinking_general))
|
@@ -1199,7 +1246,7 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1199
1246
|
assert_no_queries { assert client.accounts.empty? }
|
1200
1247
|
end
|
1201
1248
|
|
1202
|
-
def
|
1249
|
+
def test_preloading_has_many_through_with_distinct
|
1203
1250
|
mary = Author.includes(:unique_categorized_posts).where(:id => authors(:mary).id).first
|
1204
1251
|
assert_equal 1, mary.unique_categorized_posts.length
|
1205
1252
|
assert_equal 1, mary.unique_categorized_post_ids.length
|
@@ -1242,17 +1289,11 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1242
1289
|
end
|
1243
1290
|
|
1244
1291
|
def test_join_eager_with_empty_order_should_generate_valid_sql
|
1245
|
-
assert_nothing_raised
|
1292
|
+
assert_nothing_raised do
|
1246
1293
|
Post.includes(:comments).order("").where(:comments => {:body => "Thank you for the welcome"}).first
|
1247
1294
|
end
|
1248
1295
|
end
|
1249
1296
|
|
1250
|
-
def test_join_eager_with_nil_order_should_generate_valid_sql
|
1251
|
-
assert_nothing_raised(ActiveRecord::StatementInvalid) do
|
1252
|
-
Post.includes(:comments).order(nil).where(:comments => {:body => "Thank you for the welcome"}).first
|
1253
|
-
end
|
1254
|
-
end
|
1255
|
-
|
1256
1297
|
def test_deep_including_through_habtm
|
1257
1298
|
# warm up habtm cache
|
1258
1299
|
posts = Post.all.merge!(:includes => {:categories => :categorizations}, :order => "posts.id").to_a
|
@@ -1264,6 +1305,16 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1264
1305
|
assert_no_queries { assert_equal 2, posts[1].categories[0].categorizations.length }
|
1265
1306
|
end
|
1266
1307
|
|
1308
|
+
def test_eager_load_multiple_associations_with_references
|
1309
|
+
mentor = Mentor.create!(name: "Barış Can DAYLIK")
|
1310
|
+
developer = Developer.create!(name: "Mehmet Emin İNAÇ", mentor: mentor)
|
1311
|
+
Contract.create!(developer: developer)
|
1312
|
+
project = Project.create!(name: "VNGRS", mentor: mentor)
|
1313
|
+
project.developers << developer
|
1314
|
+
projects = Project.references(:mentors).includes(mentor: { developers: :contracts }, developers: :contracts)
|
1315
|
+
assert_equal projects.last.mentor.developers.first.contracts, projects.last.developers.last.contracts
|
1316
|
+
end
|
1317
|
+
|
1267
1318
|
test "scoping with a circular preload" do
|
1268
1319
|
assert_equal Comment.find(1), Comment.preload(:post => :comments).scoping { Comment.find(1) }
|
1269
1320
|
end
|
@@ -1357,35 +1408,42 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1357
1408
|
assert_equal pets(:parrot), Owner.including_last_pet.first.last_pet
|
1358
1409
|
end
|
1359
1410
|
|
1360
|
-
test "
|
1411
|
+
test "preloading and eager loading of instance dependent associations is not supported" do
|
1361
1412
|
message = "association scope 'posts_with_signature' is"
|
1362
|
-
|
1363
|
-
|
1364
|
-
Author.includes(:posts_with_signature).to_a
|
1365
|
-
rescue NoMethodError
|
1366
|
-
# it's expected that preloading of this association fails
|
1367
|
-
end
|
1413
|
+
error = assert_raises(ArgumentError) do
|
1414
|
+
Author.includes(:posts_with_signature).to_a
|
1368
1415
|
end
|
1416
|
+
assert_match message, error.message
|
1369
1417
|
|
1370
|
-
|
1371
|
-
Author.preload(:posts_with_signature).to_a
|
1418
|
+
error = assert_raises(ArgumentError) do
|
1419
|
+
Author.preload(:posts_with_signature).to_a
|
1372
1420
|
end
|
1421
|
+
assert_match message, error.message
|
1373
1422
|
|
1374
|
-
|
1423
|
+
error = assert_raises(ArgumentError) do
|
1375
1424
|
Author.eager_load(:posts_with_signature).to_a
|
1376
1425
|
end
|
1426
|
+
assert_match message, error.message
|
1427
|
+
end
|
1428
|
+
|
1429
|
+
test "preload with invalid argument" do
|
1430
|
+
exception = assert_raises(ArgumentError) do
|
1431
|
+
Author.preload(10).to_a
|
1432
|
+
end
|
1433
|
+
assert_equal('10 was not recognized for preload', exception.message)
|
1377
1434
|
end
|
1378
1435
|
|
1379
1436
|
test "associations with extensions are not instance dependent" do
|
1380
|
-
|
1437
|
+
assert_nothing_raised do
|
1381
1438
|
Author.includes(:posts_with_extension).to_a
|
1382
1439
|
end
|
1383
1440
|
end
|
1384
1441
|
|
1385
|
-
test "including associations with extensions and an instance dependent scope is
|
1386
|
-
|
1442
|
+
test "including associations with extensions and an instance dependent scope is not supported" do
|
1443
|
+
e = assert_raises(ArgumentError) do
|
1387
1444
|
Author.includes(:posts_with_extension_and_instance).to_a
|
1388
1445
|
end
|
1446
|
+
assert_match(/Preloading instance dependent scopes is not supported/, e.message)
|
1389
1447
|
end
|
1390
1448
|
|
1391
1449
|
test "preloading readonly association" do
|
@@ -1402,8 +1460,25 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1402
1460
|
assert david.readonly_comments.first.readonly?
|
1403
1461
|
end
|
1404
1462
|
|
1463
|
+
test "eager-loading non-readonly association" do
|
1464
|
+
# has_one
|
1465
|
+
firm = Firm.where(id: "1").eager_load(:account).first!
|
1466
|
+
assert_not firm.account.readonly?
|
1467
|
+
|
1468
|
+
# has_and_belongs_to_many
|
1469
|
+
project = Project.where(id: "2").eager_load(:developers).first!
|
1470
|
+
assert_not project.developers.first.readonly?
|
1471
|
+
|
1472
|
+
# has_many :through
|
1473
|
+
david = Author.where(id: "1").eager_load(:comments).first!
|
1474
|
+
assert_not david.comments.first.readonly?
|
1475
|
+
|
1476
|
+
# belongs_to
|
1477
|
+
post = Post.where(id: "1").eager_load(:author).first!
|
1478
|
+
assert_not post.author.readonly?
|
1479
|
+
end
|
1480
|
+
|
1405
1481
|
test "eager-loading readonly association" do
|
1406
|
-
skip "eager_load does not yet preserve readonly associations"
|
1407
1482
|
# has-one
|
1408
1483
|
firm = Firm.where(id: "1").eager_load(:readonly_account).first!
|
1409
1484
|
assert firm.readonly_account.readonly?
|
@@ -1415,6 +1490,10 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1415
1490
|
# has-many :through
|
1416
1491
|
david = Author.where(id: "1").eager_load(:readonly_comments).first!
|
1417
1492
|
assert david.readonly_comments.first.readonly?
|
1493
|
+
|
1494
|
+
# belongs_to
|
1495
|
+
post = Post.where(id: "1").eager_load(:readonly_author).first!
|
1496
|
+
assert post.readonly_author.readonly?
|
1418
1497
|
end
|
1419
1498
|
|
1420
1499
|
test "preloading a polymorphic association with references to the associated table" do
|
@@ -1426,4 +1505,10 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|
1426
1505
|
post = Post.eager_load(:tags).where('tags.name = ?', 'General').first
|
1427
1506
|
assert_equal posts(:welcome), post
|
1428
1507
|
end
|
1508
|
+
|
1509
|
+
# CollectionProxy#reader is expensive, so the preloader avoids calling it.
|
1510
|
+
test "preloading has_many_through association avoids calling association.reader" do
|
1511
|
+
ActiveRecord::Associations::HasManyAssociation.any_instance.expects(:reader).never
|
1512
|
+
Author.preload(:readonly_comments).first!
|
1513
|
+
end
|
1429
1514
|
end
|