ibm_db 5.2.0-x86-mingw32 → 5.3.2-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 +4 -4
- data/CHANGES +9 -0
- data/LICENSE +55 -18
- data/ext/Makefile +15 -13
- data/ext/ibm_db.c +62 -57
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +26 -24
- data/ext/ruby_ibm_db_cli.c +1 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
- data/test/activejob/destroy_association_async_test.rb +305 -0
- data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
- data/test/activejob/helper.rb +15 -0
- data/test/assets/schema_dump_5_1.yml +345 -0
- data/test/cases/adapter_prevent_writes_test.rb +334 -0
- data/test/cases/adapter_test.rb +432 -218
- data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
- data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
- data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
- data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
- data/test/cases/adapters/mysql2/connection_test.rb +48 -50
- data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
- data/test/cases/adapters/mysql2/enum_test.rb +32 -11
- data/test/cases/adapters/mysql2/explain_test.rb +13 -11
- data/test/cases/adapters/mysql2/json_test.rb +17 -188
- data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
- data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
- data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
- data/test/cases/adapters/mysql2/schema_test.rb +24 -22
- data/test/cases/adapters/mysql2/set_test.rb +32 -0
- data/test/cases/adapters/mysql2/sp_test.rb +10 -8
- data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
- data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
- data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
- data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
- data/test/cases/adapters/postgresql/array_test.rb +118 -63
- data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
- data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
- data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
- data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
- data/test/cases/adapters/postgresql/citext_test.rb +58 -58
- data/test/cases/adapters/postgresql/collation_test.rb +17 -15
- data/test/cases/adapters/postgresql/composite_test.rb +25 -23
- data/test/cases/adapters/postgresql/connection_test.rb +73 -85
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
- data/test/cases/adapters/postgresql/date_test.rb +42 -0
- data/test/cases/adapters/postgresql/domain_test.rb +9 -7
- data/test/cases/adapters/postgresql/enum_test.rb +12 -10
- data/test/cases/adapters/postgresql/explain_test.rb +10 -8
- data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
- data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
- data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
- data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
- data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
- data/test/cases/adapters/postgresql/integer_test.rb +2 -0
- data/test/cases/adapters/postgresql/interval_test.rb +99 -0
- data/test/cases/adapters/postgresql/json_test.rb +16 -201
- data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
- data/test/cases/adapters/postgresql/money_test.rb +47 -16
- data/test/cases/adapters/postgresql/network_test.rb +36 -28
- data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
- data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
- data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
- data/test/cases/adapters/postgresql/range_test.rb +406 -292
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
- data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
- data/test/cases/adapters/postgresql/schema_test.rb +207 -91
- data/test/cases/adapters/postgresql/serial_test.rb +9 -7
- data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
- data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
- data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
- data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
- data/test/cases/adapters/postgresql/utils_test.rb +11 -9
- data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
- data/test/cases/adapters/postgresql/xml_test.rb +10 -14
- data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
- data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
- data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
- data/test/cases/adapters/sqlite3/json_test.rb +29 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
- data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
- data/test/cases/aggregations_test.rb +14 -12
- data/test/cases/annotate_test.rb +46 -0
- data/test/cases/ar_schema_test.rb +153 -86
- data/test/cases/arel/attributes/attribute_test.rb +1145 -0
- data/test/cases/arel/attributes/math_test.rb +83 -0
- data/test/cases/arel/attributes_test.rb +27 -0
- data/test/cases/arel/collectors/bind_test.rb +40 -0
- data/test/cases/arel/collectors/composite_test.rb +47 -0
- data/test/cases/arel/collectors/sql_string_test.rb +41 -0
- data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
- data/test/cases/arel/crud_test.rb +65 -0
- data/test/cases/arel/delete_manager_test.rb +53 -0
- data/test/cases/arel/factory_methods_test.rb +46 -0
- data/test/cases/arel/helper.rb +45 -0
- data/test/cases/arel/insert_manager_test.rb +241 -0
- data/test/cases/arel/nodes/and_test.rb +30 -0
- data/test/cases/arel/nodes/as_test.rb +36 -0
- data/test/cases/arel/nodes/ascending_test.rb +46 -0
- data/test/cases/arel/nodes/bin_test.rb +35 -0
- data/test/cases/arel/nodes/binary_test.rb +29 -0
- data/test/cases/arel/nodes/bind_param_test.rb +22 -0
- data/test/cases/arel/nodes/case_test.rb +96 -0
- data/test/cases/arel/nodes/casted_test.rb +18 -0
- data/test/cases/arel/nodes/comment_test.rb +22 -0
- data/test/cases/arel/nodes/count_test.rb +35 -0
- data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
- data/test/cases/arel/nodes/descending_test.rb +46 -0
- data/test/cases/arel/nodes/distinct_test.rb +21 -0
- data/test/cases/arel/nodes/equality_test.rb +62 -0
- data/test/cases/arel/nodes/extract_test.rb +43 -0
- data/test/cases/arel/nodes/false_test.rb +21 -0
- data/test/cases/arel/nodes/grouping_test.rb +26 -0
- data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
- data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
- data/test/cases/arel/nodes/named_function_test.rb +48 -0
- data/test/cases/arel/nodes/node_test.rb +22 -0
- data/test/cases/arel/nodes/not_test.rb +31 -0
- data/test/cases/arel/nodes/or_test.rb +36 -0
- data/test/cases/arel/nodes/over_test.rb +69 -0
- data/test/cases/arel/nodes/select_core_test.rb +79 -0
- data/test/cases/arel/nodes/select_statement_test.rb +51 -0
- data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
- data/test/cases/arel/nodes/sum_test.rb +35 -0
- data/test/cases/arel/nodes/table_alias_test.rb +29 -0
- data/test/cases/arel/nodes/true_test.rb +21 -0
- data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
- data/test/cases/arel/nodes/update_statement_test.rb +60 -0
- data/test/cases/arel/nodes/window_test.rb +81 -0
- data/test/cases/arel/nodes_test.rb +34 -0
- data/test/cases/arel/select_manager_test.rb +1238 -0
- data/test/cases/arel/support/fake_record.rb +135 -0
- data/test/cases/arel/table_test.rb +216 -0
- data/test/cases/arel/update_manager_test.rb +126 -0
- data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
- data/test/cases/arel/visitors/dot_test.rb +90 -0
- data/test/cases/arel/visitors/mysql_test.rb +157 -0
- data/test/cases/arel/visitors/postgres_test.rb +366 -0
- data/test/cases/arel/visitors/sqlite_test.rb +75 -0
- data/test/cases/arel/visitors/to_sql_test.rb +750 -0
- data/test/cases/associations/belongs_to_associations_test.rb +510 -158
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
- data/test/cases/associations/callbacks_test.rb +56 -38
- data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
- data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
- data/test/cases/associations/eager_singularization_test.rb +21 -21
- data/test/cases/associations/eager_test.rb +559 -415
- data/test/cases/associations/extension_test.rb +18 -12
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
- data/test/cases/associations/has_many_associations_test.rb +1038 -465
- data/test/cases/associations/has_many_through_associations_test.rb +558 -249
- data/test/cases/associations/has_one_associations_test.rb +294 -129
- data/test/cases/associations/has_one_through_associations_test.rb +121 -75
- data/test/cases/associations/inner_join_association_test.rb +114 -38
- data/test/cases/associations/inverse_associations_test.rb +606 -398
- data/test/cases/associations/join_model_test.rb +158 -148
- data/test/cases/associations/left_outer_join_association_test.rb +59 -24
- data/test/cases/associations/nested_through_associations_test.rb +166 -109
- data/test/cases/associations/required_test.rb +35 -10
- data/test/cases/associations_test.rb +241 -110
- data/test/cases/attribute_methods/read_test.rb +11 -11
- data/test/cases/attribute_methods_test.rb +413 -298
- data/test/cases/attributes_test.rb +145 -27
- data/test/cases/autosave_association_test.rb +681 -436
- data/test/cases/base_prevent_writes_test.rb +229 -0
- data/test/cases/base_test.rb +599 -542
- data/test/cases/batches_test.rb +288 -82
- data/test/cases/binary_test.rb +26 -31
- data/test/cases/bind_parameter_test.rb +194 -21
- data/test/cases/boolean_test.rb +52 -0
- data/test/cases/cache_key_test.rb +110 -5
- data/test/cases/calculations_test.rb +740 -177
- data/test/cases/callbacks_test.rb +74 -207
- data/test/cases/clone_test.rb +15 -10
- data/test/cases/coders/json_test.rb +2 -0
- data/test/cases/coders/yaml_column_test.rb +16 -13
- data/test/cases/collection_cache_key_test.rb +177 -20
- data/test/cases/column_alias_test.rb +9 -7
- data/test/cases/column_definition_test.rb +10 -68
- data/test/cases/comment_test.rb +166 -107
- data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
- data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
- data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
- data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
- data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
- data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
- data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
- data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
- data/test/cases/connection_management_test.rb +13 -11
- data/test/cases/connection_pool_test.rb +316 -83
- data/test/cases/core_test.rb +82 -58
- data/test/cases/counter_cache_test.rb +204 -50
- data/test/cases/custom_locking_test.rb +5 -3
- data/test/cases/database_configurations/hash_config_test.rb +74 -0
- data/test/cases/database_configurations/resolver_test.rb +150 -0
- data/test/cases/database_configurations_test.rb +145 -0
- data/test/cases/database_selector_test.rb +296 -0
- data/test/cases/database_statements_test.rb +18 -16
- data/test/cases/date_test.rb +8 -16
- data/test/cases/date_time_precision_test.rb +100 -78
- data/test/cases/date_time_test.rb +23 -8
- data/test/cases/defaults_test.rb +106 -71
- data/test/cases/delegated_type_test.rb +57 -0
- data/test/cases/dirty_test.rb +419 -223
- data/test/cases/disconnected_test.rb +6 -6
- data/test/cases/dup_test.rb +54 -27
- data/test/cases/enum_test.rb +461 -82
- data/test/cases/errors_test.rb +7 -7
- data/test/cases/explain_subscriber_test.rb +17 -15
- data/test/cases/explain_test.rb +11 -19
- data/test/cases/filter_attributes_test.rb +153 -0
- data/test/cases/finder_respond_to_test.rb +14 -14
- data/test/cases/finder_test.rb +669 -287
- data/test/cases/fixture_set/file_test.rb +34 -38
- data/test/cases/fixtures_test.rb +833 -176
- data/test/cases/forbidden_attributes_protection_test.rb +32 -67
- data/test/cases/habtm_destroy_order_test.rb +25 -25
- data/test/cases/helper.rb +78 -49
- data/test/cases/hot_compatibility_test.rb +33 -32
- data/test/cases/i18n_test.rb +18 -17
- data/test/cases/inheritance_test.rb +180 -115
- data/test/cases/insert_all_test.rb +489 -0
- data/test/cases/instrumentation_test.rb +101 -0
- data/test/cases/integration_test.rb +119 -31
- data/test/cases/invalid_connection_test.rb +18 -16
- data/test/cases/invertible_migration_test.rb +183 -43
- data/test/cases/json_attribute_test.rb +35 -0
- data/test/cases/json_serialization_test.rb +57 -58
- data/test/cases/json_shared_test_cases.rb +290 -0
- data/test/cases/locking_test.rb +413 -119
- data/test/cases/log_subscriber_test.rb +68 -26
- data/test/cases/marshal_serialization_test.rb +39 -0
- data/test/cases/migration/change_schema_test.rb +118 -72
- data/test/cases/migration/change_table_test.rb +138 -30
- data/test/cases/migration/check_constraint_test.rb +162 -0
- data/test/cases/migration/column_attributes_test.rb +45 -35
- data/test/cases/migration/column_positioning_test.rb +18 -6
- data/test/cases/migration/columns_test.rb +93 -77
- data/test/cases/migration/command_recorder_test.rb +121 -34
- data/test/cases/migration/compatibility_test.rb +578 -23
- data/test/cases/migration/create_join_table_test.rb +35 -25
- data/test/cases/migration/foreign_key_test.rb +503 -284
- data/test/cases/migration/helper.rb +4 -3
- data/test/cases/migration/index_test.rb +119 -70
- data/test/cases/migration/logger_test.rb +9 -6
- data/test/cases/migration/pending_migrations_test.rb +88 -34
- data/test/cases/migration/references_foreign_key_test.rb +164 -150
- data/test/cases/migration/references_index_test.rb +38 -19
- data/test/cases/migration/references_statements_test.rb +15 -14
- data/test/cases/migration/rename_table_test.rb +53 -30
- data/test/cases/migration_test.rb +637 -269
- data/test/cases/migrator_test.rb +191 -135
- data/test/cases/mixin_test.rb +7 -11
- data/test/cases/modules_test.rb +36 -34
- data/test/cases/multi_db_migrator_test.rb +223 -0
- data/test/cases/multiparameter_attributes_test.rb +60 -33
- data/test/cases/multiple_db_test.rb +16 -22
- data/test/cases/nested_attributes_test.rb +341 -320
- data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
- data/test/cases/null_relation_test.rb +84 -0
- data/test/cases/numeric_data_test.rb +93 -0
- data/test/cases/persistence_test.rb +361 -269
- data/test/cases/pooled_connections_test.rb +18 -26
- data/test/cases/prepared_statement_status_test.rb +48 -0
- data/test/cases/primary_keys_test.rb +210 -104
- data/test/cases/query_cache_test.rb +610 -141
- data/test/cases/quoting_test.rb +132 -31
- data/test/cases/readonly_test.rb +49 -48
- data/test/cases/reaper_test.rb +146 -32
- data/test/cases/reflection_test.rb +167 -156
- data/test/cases/relation/delegation_test.rb +49 -36
- data/test/cases/relation/delete_all_test.rb +117 -0
- data/test/cases/relation/merging_test.rb +319 -42
- data/test/cases/relation/mutation_test.rb +55 -93
- data/test/cases/relation/or_test.rb +129 -29
- data/test/cases/relation/predicate_builder_test.rb +21 -6
- data/test/cases/relation/record_fetch_warning_test.rb +5 -3
- data/test/cases/relation/select_test.rb +67 -0
- data/test/cases/relation/update_all_test.rb +317 -0
- data/test/cases/relation/where_chain_test.rb +68 -32
- data/test/cases/relation/where_clause_test.rb +136 -61
- data/test/cases/relation/where_test.rb +155 -48
- data/test/cases/relation_test.rb +266 -112
- data/test/cases/relations_test.rb +969 -744
- data/test/cases/reload_models_test.rb +13 -9
- data/test/cases/reserved_word_test.rb +141 -0
- data/test/cases/result_test.rb +68 -17
- data/test/cases/sanitize_test.rb +87 -71
- data/test/cases/schema_dumper_test.rb +221 -128
- data/test/cases/schema_loading_test.rb +3 -2
- data/test/cases/scoping/default_scoping_test.rb +185 -144
- data/test/cases/scoping/named_scoping_test.rb +177 -89
- data/test/cases/scoping/relation_scoping_test.rb +197 -75
- data/test/cases/secure_token_test.rb +18 -3
- data/test/cases/serialization_test.rb +30 -28
- data/test/cases/serialized_attribute_test.rb +133 -42
- data/test/cases/signed_id_test.rb +168 -0
- data/test/cases/statement_cache_test.rb +41 -24
- data/test/cases/statement_invalid_test.rb +42 -0
- data/test/cases/store_test.rb +180 -55
- data/test/cases/strict_loading_test.rb +473 -0
- data/test/cases/suppressor_test.rb +26 -12
- data/test/cases/tasks/database_tasks_test.rb +1258 -194
- data/test/cases/tasks/mysql_rake_test.rb +370 -298
- data/test/cases/tasks/postgresql_rake_test.rb +481 -251
- data/test/cases/tasks/sqlite_rake_test.rb +225 -178
- data/test/cases/test_case.rb +51 -40
- data/test/cases/test_databases_test.rb +79 -0
- data/test/cases/test_fixtures_test.rb +79 -19
- data/test/cases/time_precision_test.rb +98 -76
- data/test/cases/timestamp_test.rb +102 -99
- data/test/cases/touch_later_test.rb +12 -10
- data/test/cases/transaction_callbacks_test.rb +344 -90
- data/test/cases/transaction_isolation_test.rb +12 -12
- data/test/cases/transactions_test.rb +612 -162
- data/test/cases/type/adapter_specific_registry_test.rb +14 -2
- data/test/cases/type/date_time_test.rb +4 -2
- data/test/cases/type/integer_test.rb +4 -2
- data/test/cases/type/string_test.rb +10 -8
- data/test/cases/type/time_test.rb +28 -0
- data/test/cases/type/type_map_test.rb +29 -28
- data/test/cases/type/unsigned_integer_test.rb +19 -0
- data/test/cases/type_test.rb +2 -0
- data/test/cases/types_test.rb +3 -1
- data/test/cases/unconnected_test.rb +14 -1
- data/test/cases/unsafe_raw_sql_test.rb +274 -0
- data/test/cases/validations/absence_validation_test.rb +19 -17
- data/test/cases/validations/association_validation_test.rb +30 -28
- data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
- data/test/cases/validations/i18n_validation_test.rb +22 -21
- data/test/cases/validations/length_validation_test.rb +34 -33
- data/test/cases/validations/numericality_validation_test.rb +181 -0
- data/test/cases/validations/presence_validation_test.rb +21 -19
- data/test/cases/validations/uniqueness_validation_test.rb +156 -86
- data/test/cases/validations_repair_helper.rb +2 -0
- data/test/cases/validations_test.rb +61 -26
- data/test/cases/view_test.rb +122 -116
- data/test/cases/yaml_serialization_test.rb +79 -34
- data/test/config.example.yml +19 -19
- data/test/config.rb +3 -1
- data/test/config.yml +16 -6
- data/test/fixtures/all/namespaced/accounts.yml +2 -0
- data/test/fixtures/author_addresses.yml +1 -8
- data/test/fixtures/authors.yml +1 -7
- data/test/fixtures/binaries.yml +4 -0
- data/test/fixtures/books.yml +9 -2
- data/test/fixtures/categories_posts.yml +3 -0
- data/test/fixtures/citations.yml +5 -0
- data/test/fixtures/comments.yml +7 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/computers.yml +2 -0
- data/test/fixtures/customers.yml +10 -1
- data/test/fixtures/developers.yml +1 -1
- data/test/fixtures/essays.yml +10 -0
- data/test/fixtures/faces.yml +3 -3
- data/test/fixtures/humans.yml +5 -0
- data/test/fixtures/interests.yml +7 -7
- data/test/fixtures/memberships.yml +7 -0
- data/test/fixtures/minimalistics.yml +3 -0
- data/test/fixtures/mixed_case_monkeys.yml +2 -2
- data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
- data/test/fixtures/naked/yml/parrots.yml +1 -0
- data/test/fixtures/other_books.yml +26 -0
- data/test/fixtures/other_posts.yml +1 -0
- data/test/fixtures/parrots.yml +7 -1
- data/test/fixtures/pirates.yml +3 -0
- data/test/fixtures/posts.yml +11 -3
- data/test/fixtures/readers.yml +6 -0
- data/test/fixtures/reserved_words/values.yml +2 -2
- data/test/fixtures/sponsors.yml +3 -0
- data/test/fixtures/strict_zines.yml +2 -0
- data/test/fixtures/subscribers.yml +1 -1
- data/test/fixtures/tasks.yml +1 -1
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +2 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
- data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
- data/test/migrations/missing/1_people_have_last_names.rb +2 -0
- data/test/migrations/missing/3_we_need_reminders.rb +2 -0
- data/test/migrations/missing/4_innocent_jointable.rb +3 -1
- data/test/migrations/rename/1_we_need_things.rb +2 -0
- data/test/migrations/rename/2_rename_things.rb +2 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy2/1_create_articles.rb +2 -0
- data/test/migrations/to_copy2/2_create_comments.rb +3 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
- data/test/models/account.rb +46 -0
- data/test/models/admin/account.rb +3 -1
- data/test/models/admin/randomly_named_c1.rb +2 -0
- data/test/models/admin/user.rb +16 -8
- data/test/models/admin.rb +4 -2
- data/test/models/aircraft.rb +3 -1
- data/test/models/arunit2_model.rb +2 -0
- data/test/models/author.rb +153 -102
- data/test/models/auto_id.rb +2 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +3 -1
- data/test/models/binary_field.rb +6 -0
- data/test/models/bird.rb +13 -1
- data/test/models/book.rb +14 -4
- data/test/models/book_destroy_async.rb +24 -0
- data/test/models/boolean.rb +5 -0
- data/test/models/bulb.rb +13 -4
- data/test/models/cake_designer.rb +2 -0
- data/test/models/car.rb +17 -10
- data/test/models/carrier.rb +2 -0
- data/test/models/cart.rb +5 -0
- data/test/models/cat.rb +2 -0
- data/test/models/categorization.rb +8 -6
- data/test/models/category.rb +28 -16
- data/test/models/chef.rb +2 -0
- data/test/models/citation.rb +5 -1
- data/test/models/club.rb +13 -10
- data/test/models/college.rb +4 -2
- data/test/models/column.rb +2 -0
- data/test/models/column_name.rb +2 -0
- data/test/models/comment.rb +32 -10
- data/test/models/company.rb +102 -106
- data/test/models/company_in_module.rb +27 -26
- data/test/models/computer.rb +3 -1
- data/test/models/contact.rb +15 -13
- data/test/models/content.rb +5 -3
- data/test/models/contract.rb +21 -3
- data/test/models/country.rb +2 -4
- data/test/models/course.rb +3 -1
- data/test/models/customer.rb +10 -8
- data/test/models/customer_carrier.rb +2 -0
- data/test/models/dashboard.rb +2 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +2 -0
- data/test/models/destroy_async_parent.rb +15 -0
- data/test/models/destroy_async_parent_soft_delete.rb +20 -0
- data/test/models/developer.rb +152 -85
- data/test/models/dl_keyed_belongs_to.rb +13 -0
- data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
- data/test/models/dl_keyed_has_many.rb +5 -0
- data/test/models/dl_keyed_has_many_through.rb +5 -0
- data/test/models/dl_keyed_has_one.rb +5 -0
- data/test/models/dl_keyed_join.rb +10 -0
- data/test/models/dog.rb +2 -0
- data/test/models/dog_lover.rb +2 -0
- data/test/models/doubloon.rb +3 -1
- data/test/models/drink_designer.rb +17 -0
- data/test/models/edge.rb +4 -2
- data/test/models/electron.rb +2 -0
- data/test/models/engine.rb +3 -2
- data/test/models/entrant.rb +2 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +6 -3
- data/test/models/essay_destroy_async.rb +12 -0
- data/test/models/event.rb +3 -1
- data/test/models/eye.rb +5 -3
- data/test/models/face.rb +14 -6
- data/test/models/family.rb +6 -0
- data/test/models/family_tree.rb +6 -0
- data/test/models/friendship.rb +5 -3
- data/test/models/frog.rb +8 -0
- data/test/models/guid.rb +3 -1
- data/test/models/guitar.rb +2 -0
- data/test/models/hotel.rb +5 -3
- data/test/models/human.rb +39 -0
- data/test/models/image.rb +3 -1
- data/test/models/interest.rb +14 -3
- data/test/models/invoice.rb +4 -2
- data/test/models/item.rb +3 -1
- data/test/models/job.rb +5 -3
- data/test/models/joke.rb +4 -2
- data/test/models/keyboard.rb +3 -1
- data/test/models/legacy_thing.rb +2 -0
- data/test/models/lesson.rb +2 -0
- data/test/models/line_item.rb +3 -1
- data/test/models/liquid.rb +2 -0
- data/test/models/matey.rb +3 -1
- data/test/models/measurement.rb +4 -0
- data/test/models/member.rb +23 -20
- data/test/models/member_detail.rb +3 -0
- data/test/models/member_type.rb +2 -0
- data/test/models/membership.rb +4 -1
- data/test/models/mentor.rb +3 -1
- data/test/models/message.rb +5 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +3 -2
- data/test/models/mixed_case_monkey.rb +3 -1
- data/test/models/molecule.rb +2 -0
- data/test/models/mouse.rb +6 -0
- data/test/models/movie.rb +2 -0
- data/test/models/node.rb +4 -2
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +2 -0
- data/test/models/numeric_data.rb +12 -0
- data/test/models/order.rb +4 -2
- data/test/models/organization.rb +9 -7
- data/test/models/other_dog.rb +3 -1
- data/test/models/owner.rb +6 -4
- data/test/models/parrot.rb +12 -4
- data/test/models/person.rb +59 -54
- data/test/models/personal_legacy_thing.rb +3 -1
- data/test/models/pet.rb +4 -2
- data/test/models/pet_treasure.rb +2 -0
- data/test/models/pirate.rb +67 -43
- data/test/models/possession.rb +3 -1
- data/test/models/post.rb +184 -86
- data/test/models/price_estimate.rb +11 -1
- data/test/models/professor.rb +3 -1
- data/test/models/project.rb +14 -12
- data/test/models/publisher/article.rb +2 -0
- data/test/models/publisher/magazine.rb +2 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/randomly_named_c1.rb +2 -0
- data/test/models/rating.rb +5 -1
- data/test/models/reader.rb +7 -5
- data/test/models/recipe.rb +2 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +6 -3
- data/test/models/reply.rb +39 -21
- data/test/models/room.rb +6 -0
- data/test/models/section.rb +6 -0
- data/test/models/seminar.rb +6 -0
- data/test/models/session.rb +6 -0
- data/test/models/ship.rb +12 -9
- data/test/models/ship_part.rb +5 -3
- data/test/models/shop.rb +4 -2
- data/test/models/shop_account.rb +2 -0
- data/test/models/speedometer.rb +2 -0
- data/test/models/sponsor.rb +8 -5
- data/test/models/squeak.rb +6 -0
- data/test/models/strict_zine.rb +7 -0
- data/test/models/string_key_object.rb +2 -0
- data/test/models/student.rb +2 -0
- data/test/models/subscriber.rb +4 -2
- data/test/models/subscription.rb +5 -1
- data/test/models/tag.rb +6 -3
- data/test/models/tagging.rb +13 -6
- data/test/models/task.rb +2 -0
- data/test/models/topic.rb +54 -19
- data/test/models/toy.rb +4 -0
- data/test/models/traffic_light.rb +2 -0
- data/test/models/treasure.rb +5 -3
- data/test/models/treaty.rb +2 -4
- data/test/models/tree.rb +2 -0
- data/test/models/tuning_peg.rb +2 -0
- data/test/models/tyre.rb +2 -0
- data/test/models/user.rb +12 -4
- data/test/models/uuid_child.rb +2 -0
- data/test/models/uuid_item.rb +2 -0
- data/test/models/uuid_parent.rb +2 -0
- data/test/models/vegetables.rb +12 -3
- data/test/models/vertex.rb +6 -4
- data/test/models/warehouse_thing.rb +2 -0
- data/test/models/wheel.rb +3 -1
- data/test/models/without_table.rb +3 -1
- data/test/models/zine.rb +3 -1
- data/test/schema/mysql2_specific_schema.rb +49 -35
- data/test/schema/oracle_specific_schema.rb +13 -15
- data/test/schema/postgresql_specific_schema.rb +51 -40
- data/test/schema/schema.rb +334 -154
- data/test/schema/sqlite_specific_schema.rb +9 -16
- data/test/support/config.rb +26 -26
- data/test/support/connection.rb +14 -8
- data/test/support/connection_helper.rb +3 -1
- data/test/support/ddl_helper.rb +2 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
- data/test/support/schema_dumping_helper.rb +2 -0
- data/test/support/stubs/strong_parameters.rb +40 -0
- data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
- data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
- metadata +190 -14
@@ -1,38 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
4
|
+
require "models/tag"
|
5
|
+
require "models/tagging"
|
6
|
+
require "models/post"
|
7
|
+
require "models/rating"
|
8
|
+
require "models/item"
|
9
|
+
require "models/comment"
|
10
|
+
require "models/author"
|
11
|
+
require "models/category"
|
12
|
+
require "models/categorization"
|
13
|
+
require "models/vertex"
|
14
|
+
require "models/edge"
|
15
|
+
require "models/book"
|
16
|
+
require "models/citation"
|
17
|
+
require "models/aircraft"
|
18
|
+
require "models/engine"
|
19
|
+
require "models/car"
|
18
20
|
|
19
21
|
class AssociationsJoinModelTest < ActiveRecord::TestCase
|
20
22
|
self.use_transactional_tests = false unless supports_savepoints?
|
21
23
|
|
22
|
-
fixtures :posts, :authors, :categories, :categorizations, :comments, :tags, :taggings, :author_favorites, :vertices, :items, :books,
|
24
|
+
fixtures :posts, :authors, :author_addresses, :categories, :categorizations, :comments, :tags, :taggings, :author_favorites, :vertices, :items, :books,
|
23
25
|
# Reload edges table from fixtures as otherwise repeated test was failing
|
24
26
|
:edges
|
25
27
|
|
26
28
|
def test_has_many
|
27
|
-
|
29
|
+
assert_includes authors(:david).categories, categories(:general)
|
28
30
|
end
|
29
31
|
|
30
32
|
def test_has_many_inherited
|
31
|
-
|
33
|
+
assert_includes authors(:mary).categories, categories(:sti_test)
|
32
34
|
end
|
33
35
|
|
34
36
|
def test_inherited_has_many
|
35
|
-
|
37
|
+
assert_includes categories(:sti_test).authors, authors(:mary)
|
36
38
|
end
|
37
39
|
|
38
40
|
def test_has_many_distinct_through_join_model
|
@@ -42,11 +44,11 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
42
44
|
|
43
45
|
def test_has_many_distinct_through_count
|
44
46
|
author = authors(:mary)
|
45
|
-
|
47
|
+
assert_not_predicate authors(:mary).unique_categorized_posts, :loaded?
|
46
48
|
assert_queries(1) { assert_equal 1, author.unique_categorized_posts.count }
|
47
49
|
assert_queries(1) { assert_equal 1, author.unique_categorized_posts.count(:title) }
|
48
50
|
assert_queries(1) { assert_equal 0, author.unique_categorized_posts.where(title: nil).count(:title) }
|
49
|
-
|
51
|
+
assert_not_predicate authors(:mary).unique_categorized_posts, :loaded?
|
50
52
|
end
|
51
53
|
|
52
54
|
def test_has_many_distinct_through_find
|
@@ -97,11 +99,11 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
97
99
|
end
|
98
100
|
|
99
101
|
def test_polymorphic_has_many_create_model_with_inheritance_and_custom_base_class
|
100
|
-
post =
|
101
|
-
assert_instance_of
|
102
|
+
post = SubAbstractStiPost.create title: "SubAbstractStiPost", body: "SubAbstractStiPost body"
|
103
|
+
assert_instance_of SubAbstractStiPost, post
|
102
104
|
|
103
|
-
tagging = tags(:misc).taggings.create(:
|
104
|
-
assert_equal "
|
105
|
+
tagging = tags(:misc).taggings.create(taggable: post)
|
106
|
+
assert_equal "SubAbstractStiPost", tagging.taggable_type
|
105
107
|
end
|
106
108
|
|
107
109
|
def test_polymorphic_has_many_going_through_join_model_with_inheritance
|
@@ -116,12 +118,12 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
116
118
|
post = posts(:thinking)
|
117
119
|
assert_instance_of SpecialPost, post
|
118
120
|
|
119
|
-
tagging = tags(:misc).taggings.create(:
|
121
|
+
tagging = tags(:misc).taggings.create(taggable: post)
|
120
122
|
assert_equal "Post", tagging.taggable_type
|
121
123
|
end
|
122
124
|
|
123
125
|
def test_polymorphic_has_one_create_model_with_inheritance
|
124
|
-
tagging = tags(:misc).create_tagging(:
|
126
|
+
tagging = tags(:misc).create_tagging(taggable: posts(:thinking))
|
125
127
|
assert_equal "Post", tagging.taggable_type
|
126
128
|
end
|
127
129
|
|
@@ -142,7 +144,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
142
144
|
|
143
145
|
def test_set_polymorphic_has_one_on_new_record
|
144
146
|
tagging = tags(:misc).taggings.create
|
145
|
-
post = Post.new :
|
147
|
+
post = Post.new title: "foo", body: "bar"
|
146
148
|
post.tagging = tagging
|
147
149
|
post.save!
|
148
150
|
|
@@ -153,50 +155,50 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
153
155
|
|
154
156
|
def test_create_polymorphic_has_many_with_scope
|
155
157
|
old_count = posts(:welcome).taggings.count
|
156
|
-
tagging = posts(:welcome).taggings.create(:
|
158
|
+
tagging = posts(:welcome).taggings.create(tag: tags(:misc))
|
157
159
|
assert_equal "Post", tagging.taggable_type
|
158
|
-
assert_equal old_count+1, posts(:welcome).taggings.count
|
160
|
+
assert_equal old_count + 1, posts(:welcome).taggings.count
|
159
161
|
end
|
160
162
|
|
161
163
|
def test_create_bang_polymorphic_with_has_many_scope
|
162
164
|
old_count = posts(:welcome).taggings.count
|
163
|
-
tagging = posts(:welcome).taggings.create!(:
|
165
|
+
tagging = posts(:welcome).taggings.create!(tag: tags(:misc))
|
164
166
|
assert_equal "Post", tagging.taggable_type
|
165
|
-
assert_equal old_count+1, posts(:welcome).taggings.count
|
167
|
+
assert_equal old_count + 1, posts(:welcome).taggings.count
|
166
168
|
end
|
167
169
|
|
168
170
|
def test_create_polymorphic_has_one_with_scope
|
169
171
|
old_count = Tagging.count
|
170
|
-
tagging = posts(:welcome).create_tagging(:
|
172
|
+
tagging = posts(:welcome).create_tagging(tag: tags(:misc))
|
171
173
|
assert_equal "Post", tagging.taggable_type
|
172
|
-
assert_equal old_count+1, Tagging.count
|
174
|
+
assert_equal old_count + 1, Tagging.count
|
173
175
|
end
|
174
176
|
|
175
177
|
def test_delete_polymorphic_has_many_with_delete_all
|
176
178
|
assert_equal 1, posts(:welcome).taggings.count
|
177
|
-
posts(:welcome).taggings.first.update_columns taggable_type:
|
179
|
+
posts(:welcome).taggings.first.update_columns taggable_type: "PostWithHasManyDeleteAll"
|
178
180
|
post = find_post_with_dependency(1, :has_many, :taggings, :delete_all)
|
179
181
|
|
180
182
|
old_count = Tagging.count
|
181
183
|
post.destroy
|
182
|
-
assert_equal old_count-1, Tagging.count
|
184
|
+
assert_equal old_count - 1, Tagging.count
|
183
185
|
assert_equal 0, posts(:welcome).taggings.count
|
184
186
|
end
|
185
187
|
|
186
188
|
def test_delete_polymorphic_has_many_with_destroy
|
187
189
|
assert_equal 1, posts(:welcome).taggings.count
|
188
|
-
posts(:welcome).taggings.first.update_columns taggable_type:
|
190
|
+
posts(:welcome).taggings.first.update_columns taggable_type: "PostWithHasManyDestroy"
|
189
191
|
post = find_post_with_dependency(1, :has_many, :taggings, :destroy)
|
190
192
|
|
191
193
|
old_count = Tagging.count
|
192
194
|
post.destroy
|
193
|
-
assert_equal old_count-1, Tagging.count
|
195
|
+
assert_equal old_count - 1, Tagging.count
|
194
196
|
assert_equal 0, posts(:welcome).taggings.count
|
195
197
|
end
|
196
198
|
|
197
199
|
def test_delete_polymorphic_has_many_with_nullify
|
198
200
|
assert_equal 1, posts(:welcome).taggings.count
|
199
|
-
posts(:welcome).taggings.first.update_columns taggable_type:
|
201
|
+
posts(:welcome).taggings.first.update_columns taggable_type: "PostWithHasManyNullify"
|
200
202
|
post = find_post_with_dependency(1, :has_many, :taggings, :nullify)
|
201
203
|
|
202
204
|
old_count = Tagging.count
|
@@ -207,19 +209,19 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
207
209
|
|
208
210
|
def test_delete_polymorphic_has_one_with_destroy
|
209
211
|
assert posts(:welcome).tagging
|
210
|
-
posts(:welcome).tagging.update_columns taggable_type:
|
212
|
+
posts(:welcome).tagging.update_columns taggable_type: "PostWithHasOneDestroy"
|
211
213
|
post = find_post_with_dependency(1, :has_one, :tagging, :destroy)
|
212
214
|
|
213
215
|
old_count = Tagging.count
|
214
216
|
post.destroy
|
215
|
-
assert_equal old_count-1, Tagging.count
|
217
|
+
assert_equal old_count - 1, Tagging.count
|
216
218
|
posts(:welcome).association(:tagging).reload
|
217
219
|
assert_nil posts(:welcome).tagging
|
218
220
|
end
|
219
221
|
|
220
222
|
def test_delete_polymorphic_has_one_with_nullify
|
221
223
|
assert posts(:welcome).tagging
|
222
|
-
posts(:welcome).tagging.update_columns taggable_type:
|
224
|
+
posts(:welcome).tagging.update_columns taggable_type: "PostWithHasOneNullify"
|
223
225
|
post = find_post_with_dependency(1, :has_one, :tagging, :nullify)
|
224
226
|
|
225
227
|
old_count = Tagging.count
|
@@ -235,15 +237,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
235
237
|
|
236
238
|
def test_create_through_has_many_with_piggyback
|
237
239
|
category = categories(:sti_test)
|
238
|
-
ernie = category.authors_with_select.create(:
|
240
|
+
ernie = category.authors_with_select.create(name: "Ernie")
|
239
241
|
assert_nothing_raised do
|
240
|
-
assert_equal ernie, category.authors_with_select.detect {|a| a.name ==
|
242
|
+
assert_equal ernie, category.authors_with_select.detect { |a| a.name == "Ernie" }
|
241
243
|
end
|
242
244
|
end
|
243
245
|
|
244
246
|
def test_include_has_many_through
|
245
|
-
posts = Post.all.merge!(:
|
246
|
-
posts_with_authors = Post.all.merge!(:
|
247
|
+
posts = Post.all.merge!(order: "posts.id").to_a
|
248
|
+
posts_with_authors = Post.all.merge!(includes: :authors, order: "posts.id").to_a
|
247
249
|
assert_equal posts.length, posts_with_authors.length
|
248
250
|
posts.length.times do |i|
|
249
251
|
assert_equal posts[i].authors.length, assert_no_queries { posts_with_authors[i].authors.length }
|
@@ -267,8 +269,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
267
269
|
end
|
268
270
|
|
269
271
|
def test_include_polymorphic_has_many_through
|
270
|
-
posts = Post.all.merge!(:
|
271
|
-
posts_with_tags = Post.all.merge!(:
|
272
|
+
posts = Post.all.merge!(order: "posts.id").to_a
|
273
|
+
posts_with_tags = Post.all.merge!(includes: :tags, order: "posts.id").to_a
|
272
274
|
assert_equal posts.length, posts_with_tags.length
|
273
275
|
posts.length.times do |i|
|
274
276
|
assert_equal posts[i].tags.length, assert_no_queries { posts_with_tags[i].tags.length }
|
@@ -276,8 +278,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
276
278
|
end
|
277
279
|
|
278
280
|
def test_include_polymorphic_has_many
|
279
|
-
posts = Post.all.merge!(:
|
280
|
-
posts_with_taggings = Post.all.merge!(:
|
281
|
+
posts = Post.all.merge!(order: "posts.id").to_a
|
282
|
+
posts_with_taggings = Post.all.merge!(includes: :taggings, order: "posts.id").to_a
|
281
283
|
assert_equal posts.length, posts_with_taggings.length
|
282
284
|
posts.length.times do |i|
|
283
285
|
assert_equal posts[i].taggings.length, assert_no_queries { posts_with_taggings[i].taggings.length }
|
@@ -302,7 +304,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
302
304
|
end
|
303
305
|
|
304
306
|
def test_has_many_array_methods_called_by_method_missing
|
305
|
-
assert authors(:david).categories.any? { |category| category.name ==
|
307
|
+
assert authors(:david).categories.any? { |category| category.name == "General" }
|
306
308
|
assert_nothing_raised { authors(:david).categories.sort }
|
307
309
|
end
|
308
310
|
|
@@ -324,12 +326,12 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
324
326
|
end
|
325
327
|
|
326
328
|
def test_has_many_through_with_custom_primary_key_on_has_many_source
|
327
|
-
assert_equal [authors(:david), authors(:bob)], posts(:thinking).authors_using_custom_pk.order(
|
329
|
+
assert_equal [authors(:david), authors(:bob)], posts(:thinking).authors_using_custom_pk.order("authors.id")
|
328
330
|
end
|
329
331
|
|
330
332
|
def test_belongs_to_polymorphic_with_counter_cache
|
331
333
|
assert_equal 1, posts(:welcome)[:tags_count]
|
332
|
-
tagging = posts(:welcome).taggings.create(:
|
334
|
+
tagging = posts(:welcome).taggings.create(tag: tags(:general))
|
333
335
|
assert_equal 2, posts(:welcome, :reload)[:tags_count]
|
334
336
|
tagging.destroy
|
335
337
|
assert_equal 1, posts(:welcome, :reload)[:tags_count]
|
@@ -339,6 +341,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
339
341
|
assert_raise(ActiveRecord::HasManyThroughAssociationNotFoundError) { authors(:david).nothings }
|
340
342
|
end
|
341
343
|
|
344
|
+
if defined?(DidYouMean) && DidYouMean.respond_to?(:correct_error)
|
345
|
+
def test_exceptions_have_suggestions_for_fix
|
346
|
+
error = assert_raise(ActiveRecord::HasManyThroughAssociationNotFoundError) {
|
347
|
+
authors(:david).nothings
|
348
|
+
}
|
349
|
+
assert_match "Did you mean?", error.message
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
342
353
|
def test_has_many_through_join_model_with_conditions
|
343
354
|
assert_equal [], posts(:welcome).invalid_taggings
|
344
355
|
assert_equal [], posts(:welcome).invalid_tags
|
@@ -354,7 +365,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
354
365
|
end
|
355
366
|
|
356
367
|
assert_raise ActiveRecord::EagerLoadPolymorphicError do
|
357
|
-
tags(:general).taggings.includes(:taggable).where(
|
368
|
+
tags(:general).taggings.includes(:taggable).where("bogus_table.column = 1").references(:bogus_table).to_a
|
358
369
|
end
|
359
370
|
end
|
360
371
|
|
@@ -365,13 +376,13 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
365
376
|
|
366
377
|
def test_has_many_polymorphic_associations_merges_through_scope
|
367
378
|
Tag.has_many :null_taggings, -> { none }, class_name: :Tagging
|
368
|
-
Tag.has_many :null_tagged_posts, :
|
379
|
+
Tag.has_many :null_tagged_posts, through: :null_taggings, source: "taggable", source_type: "Post"
|
369
380
|
assert_equal [], tags(:general).null_tagged_posts
|
370
|
-
|
381
|
+
assert_not_equal [], tags(:general).tagged_posts
|
371
382
|
end
|
372
383
|
|
373
384
|
def test_eager_has_many_polymorphic_with_source_type
|
374
|
-
tag_with_include = Tag.all.merge!(:
|
385
|
+
tag_with_include = Tag.all.merge!(includes: :tagged_posts).find(tags(:general).id)
|
375
386
|
desired = posts(:welcome, :thinking)
|
376
387
|
assert_no_queries do
|
377
388
|
# added sort by ID as otherwise test using JRuby was failing as array elements were in different order
|
@@ -381,19 +392,19 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
381
392
|
end
|
382
393
|
|
383
394
|
def test_has_many_through_has_many_find_all
|
384
|
-
assert_equal comments(:greetings), authors(:david).comments.order(
|
395
|
+
assert_equal comments(:greetings), authors(:david).comments.order("comments.id").to_a.first
|
385
396
|
end
|
386
397
|
|
387
398
|
def test_has_many_through_has_many_find_all_with_custom_class
|
388
|
-
assert_equal comments(:greetings), authors(:david).funky_comments.order(
|
399
|
+
assert_equal comments(:greetings), authors(:david).funky_comments.order("comments.id").to_a.first
|
389
400
|
end
|
390
401
|
|
391
402
|
def test_has_many_through_has_many_find_first
|
392
|
-
assert_equal comments(:greetings), authors(:david).comments.order(
|
403
|
+
assert_equal comments(:greetings), authors(:david).comments.order("comments.id").first
|
393
404
|
end
|
394
405
|
|
395
406
|
def test_has_many_through_has_many_find_conditions
|
396
|
-
options = { :
|
407
|
+
options = { where: "comments.#{QUOTED_TYPE}='SpecialComment'", order: "comments.id" }
|
397
408
|
assert_equal comments(:does_it_hurt), authors(:david).comments.merge(options).first
|
398
409
|
end
|
399
410
|
|
@@ -402,7 +413,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
402
413
|
end
|
403
414
|
|
404
415
|
def test_has_many_through_polymorphic_has_one
|
405
|
-
assert_equal Tagging.find(1,2).sort_by(&:id), authors(:david).taggings_2
|
416
|
+
assert_equal Tagging.find(1, 2).sort_by(&:id), authors(:david).taggings_2.sort_by(&:id)
|
406
417
|
end
|
407
418
|
|
408
419
|
def test_has_many_through_polymorphic_has_many
|
@@ -413,20 +424,20 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
413
424
|
author = Author.includes(:taggings).find authors(:david).id
|
414
425
|
expected_taggings = taggings(:welcome_general, :thinking_general)
|
415
426
|
assert_no_queries do
|
416
|
-
assert_equal expected_taggings, author.taggings.
|
427
|
+
assert_equal expected_taggings, author.taggings.uniq.sort_by(&:id)
|
417
428
|
end
|
418
429
|
end
|
419
430
|
|
420
431
|
def test_eager_load_has_many_through_has_many
|
421
|
-
author = Author.all.merge!(:
|
432
|
+
author = Author.all.merge!(where: ["name = ?", "David"], includes: :comments, order: "comments.id").first
|
422
433
|
SpecialComment.new; VerySpecialComment.new
|
423
434
|
assert_no_queries do
|
424
|
-
assert_equal [1,2,3,5,6,7,8,9,10,12], author.comments.collect(&:id)
|
435
|
+
assert_equal [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13], author.comments.collect(&:id)
|
425
436
|
end
|
426
437
|
end
|
427
438
|
|
428
439
|
def test_eager_load_has_many_through_has_many_with_conditions
|
429
|
-
post = Post.all.merge!(:
|
440
|
+
post = Post.all.merge!(includes: :invalid_tags).first
|
430
441
|
assert_no_queries do
|
431
442
|
post.invalid_tags
|
432
443
|
end
|
@@ -434,8 +445,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
434
445
|
|
435
446
|
def test_eager_belongs_to_and_has_one_not_singularized
|
436
447
|
assert_nothing_raised do
|
437
|
-
Author.all.merge!(:
|
438
|
-
AuthorAddress.all.merge!(:
|
448
|
+
Author.all.merge!(includes: :author_address).first
|
449
|
+
AuthorAddress.all.merge!(includes: :author).first
|
439
450
|
end
|
440
451
|
end
|
441
452
|
|
@@ -445,15 +456,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
445
456
|
end
|
446
457
|
|
447
458
|
def test_add_to_self_referential_has_many_through
|
448
|
-
new_author = Author.create(:
|
449
|
-
authors(:david).author_favorites.create :
|
459
|
+
new_author = Author.create(name: "Bob")
|
460
|
+
authors(:david).author_favorites.create favorite_author: new_author
|
450
461
|
assert_equal new_author, authors(:david).reload.favorite_authors.first
|
451
462
|
end
|
452
463
|
|
453
464
|
def test_has_many_through_uses_conditions_specified_on_the_has_many_association
|
454
465
|
author = Author.first
|
455
|
-
|
456
|
-
|
466
|
+
assert_predicate author.comments, :present?
|
467
|
+
assert_predicate author.nonexistent_comments, :blank?
|
457
468
|
end
|
458
469
|
|
459
470
|
def test_has_many_through_uses_correct_attributes
|
@@ -462,58 +473,57 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
462
473
|
|
463
474
|
def test_associating_unsaved_records_with_has_many_through
|
464
475
|
saved_post = posts(:thinking)
|
465
|
-
new_tag = Tag.new(:
|
476
|
+
new_tag = Tag.new(name: "new")
|
466
477
|
|
467
478
|
saved_post.tags << new_tag
|
468
|
-
assert new_tag.persisted? #consistent with habtm!
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
assert new_tag.persisted?
|
473
|
-
assert saved_post.reload.tags.reload.include?(new_tag)
|
479
|
+
assert new_tag.persisted? # consistent with habtm!
|
480
|
+
assert_predicate saved_post, :persisted?
|
481
|
+
assert_includes saved_post.tags, new_tag
|
474
482
|
|
483
|
+
assert_predicate new_tag, :persisted?
|
484
|
+
assert_includes saved_post.reload.tags.reload, new_tag
|
475
485
|
|
476
|
-
new_post = Post.new(:
|
486
|
+
new_post = Post.new(title: "Association replacement works!", body: "You best believe it.")
|
477
487
|
saved_tag = tags(:general)
|
478
488
|
|
479
489
|
new_post.tags << saved_tag
|
480
|
-
|
481
|
-
|
482
|
-
|
490
|
+
assert_not_predicate new_post, :persisted?
|
491
|
+
assert_predicate saved_tag, :persisted?
|
492
|
+
assert_includes new_post.tags, saved_tag
|
483
493
|
|
484
494
|
new_post.save!
|
485
|
-
|
486
|
-
|
495
|
+
assert_predicate new_post, :persisted?
|
496
|
+
assert_includes new_post.reload.tags.reload, saved_tag
|
487
497
|
|
488
|
-
|
489
|
-
|
498
|
+
assert_not_predicate posts(:thinking).tags.build, :persisted?
|
499
|
+
assert_not_predicate posts(:thinking).tags.new, :persisted?
|
490
500
|
end
|
491
501
|
|
492
502
|
def test_create_associate_when_adding_to_has_many_through
|
493
503
|
count = posts(:thinking).tags.count
|
494
|
-
push = Tag.create!(:
|
504
|
+
push = Tag.create!(name: "pushme")
|
495
505
|
post_thinking = posts(:thinking)
|
496
506
|
assert_nothing_raised { post_thinking.tags << push }
|
497
|
-
assert_nil(
|
498
|
-
|
499
|
-
assert_nil(
|
500
|
-
|
507
|
+
assert_nil(wrong = post_thinking.tags.detect { |t| t.class != Tag },
|
508
|
+
"Expected a Tag in tags collection, got #{wrong.class}.")
|
509
|
+
assert_nil(wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
|
510
|
+
"Expected a Tagging in taggings collection, got #{wrong.class}.")
|
501
511
|
assert_equal(count + 1, post_thinking.reload.tags.size)
|
502
512
|
assert_equal(count + 1, post_thinking.tags.reload.size)
|
503
513
|
|
504
|
-
assert_kind_of Tag, post_thinking.tags.create!(:
|
505
|
-
assert_nil(
|
506
|
-
|
507
|
-
assert_nil(
|
508
|
-
|
514
|
+
assert_kind_of Tag, post_thinking.tags.create!(name: "foo")
|
515
|
+
assert_nil(wrong = post_thinking.tags.detect { |t| t.class != Tag },
|
516
|
+
"Expected a Tag in tags collection, got #{wrong.class}.")
|
517
|
+
assert_nil(wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
|
518
|
+
"Expected a Tagging in taggings collection, got #{wrong.class}.")
|
509
519
|
assert_equal(count + 2, post_thinking.reload.tags.size)
|
510
520
|
assert_equal(count + 2, post_thinking.tags.reload.size)
|
511
521
|
|
512
|
-
assert_nothing_raised { post_thinking.tags.concat(Tag.create!(:
|
513
|
-
assert_nil(
|
514
|
-
|
515
|
-
assert_nil(
|
516
|
-
|
522
|
+
assert_nothing_raised { post_thinking.tags.concat(Tag.create!(name: "abc"), Tag.create!(name: "def")) }
|
523
|
+
assert_nil(wrong = post_thinking.tags.detect { |t| t.class != Tag },
|
524
|
+
"Expected a Tag in tags collection, got #{wrong.class}.")
|
525
|
+
assert_nil(wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
|
526
|
+
"Expected a Tagging in taggings collection, got #{wrong.class}.")
|
517
527
|
assert_equal(count + 4, post_thinking.reload.tags.size)
|
518
528
|
assert_equal(count + 4, post_thinking.tags.reload.size)
|
519
529
|
|
@@ -527,15 +537,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
527
537
|
|
528
538
|
def test_has_many_through_collection_size_doesnt_load_target_if_not_loaded
|
529
539
|
author = authors(:david)
|
530
|
-
assert_equal
|
531
|
-
|
540
|
+
assert_equal 11, author.comments.size
|
541
|
+
assert_not_predicate author.comments, :loaded?
|
532
542
|
end
|
533
543
|
|
534
544
|
def test_has_many_through_collection_size_uses_counter_cache_if_it_exists
|
535
545
|
c = categories(:general)
|
536
546
|
c.categorizations_count = 100
|
537
547
|
assert_equal 100, c.categorizations.size
|
538
|
-
|
548
|
+
assert_not_predicate c.categorizations, :loaded?
|
539
549
|
end
|
540
550
|
|
541
551
|
def test_adding_junk_to_has_many_through_should_raise_type_mismatch
|
@@ -550,7 +560,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
550
560
|
def test_delete_associate_when_deleting_from_has_many_through_with_nonstandard_id
|
551
561
|
count = books(:awdr).references.count
|
552
562
|
references_before = books(:awdr).references
|
553
|
-
book = Book.create!(:
|
563
|
+
book = Book.create!(name: "Getting Real")
|
554
564
|
book_awdr = books(:awdr)
|
555
565
|
book_awdr.references << book
|
556
566
|
assert_equal(count + 1, book_awdr.references.reload.size)
|
@@ -564,7 +574,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
564
574
|
def test_delete_associate_when_deleting_from_has_many_through
|
565
575
|
count = posts(:thinking).tags.count
|
566
576
|
tags_before = posts(:thinking).tags.sort
|
567
|
-
tag = Tag.create!(:
|
577
|
+
tag = Tag.create!(name: "doomed")
|
568
578
|
post_thinking = posts(:thinking)
|
569
579
|
post_thinking.tags << tag
|
570
580
|
assert_equal(count + 1, post_thinking.taggings.reload.size)
|
@@ -581,9 +591,9 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
581
591
|
def test_delete_associate_when_deleting_from_has_many_through_with_multiple_tags
|
582
592
|
count = posts(:thinking).tags.count
|
583
593
|
tags_before = posts(:thinking).tags.sort
|
584
|
-
doomed = Tag.create!(:
|
585
|
-
doomed2 = Tag.create!(:
|
586
|
-
quaked = Tag.create!(:
|
594
|
+
doomed = Tag.create!(name: "doomed")
|
595
|
+
doomed2 = Tag.create!(name: "doomed2")
|
596
|
+
quaked = Tag.create!(name: "quaked")
|
587
597
|
post_thinking = posts(:thinking)
|
588
598
|
post_thinking.tags << doomed << doomed2
|
589
599
|
assert_equal(count + 2, post_thinking.reload.tags.reload.size)
|
@@ -601,7 +611,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
601
611
|
def test_deleting_by_integer_id_from_has_many_through
|
602
612
|
post = posts(:thinking)
|
603
613
|
|
604
|
-
assert_difference
|
614
|
+
assert_difference "post.tags.count", -1 do
|
605
615
|
assert_equal 1, post.tags.delete(1).size
|
606
616
|
end
|
607
617
|
|
@@ -611,8 +621,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
611
621
|
def test_deleting_by_string_id_from_has_many_through
|
612
622
|
post = posts(:thinking)
|
613
623
|
|
614
|
-
assert_difference
|
615
|
-
assert_equal 1, post.tags.delete(
|
624
|
+
assert_difference "post.tags.count", -1 do
|
625
|
+
assert_equal 1, post.tags.delete("1").size
|
616
626
|
end
|
617
627
|
|
618
628
|
assert_equal 0, post.tags.size
|
@@ -642,26 +652,26 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
642
652
|
|
643
653
|
def test_polymorphic_has_many
|
644
654
|
expected = taggings(:welcome_general)
|
645
|
-
p = Post.all.merge!(:
|
646
|
-
assert_no_queries {
|
647
|
-
|
655
|
+
p = Post.all.merge!(includes: :taggings).find(posts(:welcome).id)
|
656
|
+
assert_no_queries { assert_includes p.taggings, expected }
|
657
|
+
assert_includes posts(:welcome).taggings, taggings(:welcome_general)
|
648
658
|
end
|
649
659
|
|
650
660
|
def test_polymorphic_has_one
|
651
661
|
expected = posts(:welcome)
|
652
662
|
|
653
|
-
tagging = Tagging.all.merge!(:
|
654
|
-
assert_no_queries { assert_equal expected, tagging.taggable}
|
663
|
+
tagging = Tagging.all.merge!(includes: :taggable).find(taggings(:welcome_general).id)
|
664
|
+
assert_no_queries { assert_equal expected, tagging.taggable }
|
655
665
|
end
|
656
666
|
|
657
667
|
def test_polymorphic_belongs_to
|
658
|
-
p = Post.all.merge!(:
|
659
|
-
assert_no_queries {assert_equal posts(:welcome), p.taggings.first.taggable}
|
668
|
+
p = Post.all.merge!(includes: { taggings: :taggable }).find(posts(:welcome).id)
|
669
|
+
assert_no_queries { assert_equal posts(:welcome), p.taggings.first.taggable }
|
660
670
|
end
|
661
671
|
|
662
672
|
def test_preload_polymorphic_has_many_through
|
663
|
-
posts = Post.all.merge!(:
|
664
|
-
posts_with_tags = Post.all.merge!(:
|
673
|
+
posts = Post.all.merge!(order: "posts.id").to_a
|
674
|
+
posts_with_tags = Post.all.merge!(includes: :tags, order: "posts.id").to_a
|
665
675
|
assert_equal posts.length, posts_with_tags.length
|
666
676
|
posts.length.times do |i|
|
667
677
|
assert_equal posts[i].tags.length, assert_no_queries { posts_with_tags[i].tags.length }
|
@@ -669,26 +679,26 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
669
679
|
end
|
670
680
|
|
671
681
|
def test_preload_polymorph_many_types
|
672
|
-
taggings = Tagging.all.merge!(:
|
682
|
+
taggings = Tagging.all.merge!(includes: :taggable, where: ["taggable_type != ?", "FakeModel"]).to_a
|
673
683
|
assert_no_queries do
|
674
684
|
taggings.first.taggable.id
|
675
685
|
taggings[1].taggable.id
|
676
686
|
end
|
677
687
|
|
678
688
|
taggables = taggings.map(&:taggable)
|
679
|
-
|
680
|
-
|
689
|
+
assert_includes taggables, items(:dvd)
|
690
|
+
assert_includes taggables, posts(:welcome)
|
681
691
|
end
|
682
692
|
|
683
693
|
def test_preload_nil_polymorphic_belongs_to
|
684
694
|
assert_nothing_raised do
|
685
|
-
Tagging.all.merge!(:
|
695
|
+
Tagging.all.merge!(includes: :taggable, where: ["taggable_type IS NULL"]).to_a
|
686
696
|
end
|
687
697
|
end
|
688
698
|
|
689
699
|
def test_preload_polymorphic_has_many
|
690
|
-
posts = Post.all.merge!(:
|
691
|
-
posts_with_taggings = Post.all.merge!(:
|
700
|
+
posts = Post.all.merge!(order: "posts.id").to_a
|
701
|
+
posts_with_taggings = Post.all.merge!(includes: :taggings, order: "posts.id").to_a
|
692
702
|
assert_equal posts.length, posts_with_taggings.length
|
693
703
|
posts.length.times do |i|
|
694
704
|
assert_equal posts[i].taggings.length, assert_no_queries { posts_with_taggings[i].taggings.length }
|
@@ -696,7 +706,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
696
706
|
end
|
697
707
|
|
698
708
|
def test_belongs_to_shared_parent
|
699
|
-
comments = Comment.all.merge!(:
|
709
|
+
comments = Comment.all.merge!(includes: :post, where: "post_id = 1").to_a
|
700
710
|
assert_no_queries do
|
701
711
|
assert_equal comments.first.post, comments[1].post
|
702
712
|
end
|
@@ -709,8 +719,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
709
719
|
category = david.categories.first
|
710
720
|
|
711
721
|
assert_no_queries do
|
712
|
-
|
713
|
-
|
722
|
+
assert_predicate david.categories, :loaded?
|
723
|
+
assert_includes david.categories, category
|
714
724
|
end
|
715
725
|
end
|
716
726
|
|
@@ -719,47 +729,47 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
719
729
|
category = david.categories.first
|
720
730
|
|
721
731
|
david.reload
|
722
|
-
|
732
|
+
assert_not_predicate david.categories, :loaded?
|
723
733
|
assert_queries(1) do
|
724
|
-
|
734
|
+
assert_includes david.categories, category
|
725
735
|
end
|
726
|
-
|
736
|
+
assert_not_predicate david.categories, :loaded?
|
727
737
|
end
|
728
738
|
|
729
739
|
def test_has_many_through_include_returns_false_for_non_matching_record_to_verify_scoping
|
730
740
|
david = authors(:david)
|
731
|
-
category = Category.create!(:
|
741
|
+
category = Category.create!(name: "Not Associated")
|
732
742
|
|
733
|
-
|
734
|
-
|
743
|
+
assert_not_predicate david.categories, :loaded?
|
744
|
+
assert_not david.categories.include?(category)
|
735
745
|
end
|
736
746
|
|
737
747
|
def test_has_many_through_goes_through_all_sti_classes
|
738
|
-
sub_sti_post = SubStiPost.create!(:
|
739
|
-
new_comment = sub_sti_post.comments.create(:
|
748
|
+
sub_sti_post = SubStiPost.create!(title: "test", body: "test", author_id: 1)
|
749
|
+
new_comment = sub_sti_post.comments.create(body: "test")
|
740
750
|
|
741
|
-
assert_equal [9, 10, new_comment.id], authors(:david).sti_post_comments.map(&:id).sort
|
751
|
+
assert_equal [9, 10, 13, new_comment.id], authors(:david).sti_post_comments.map(&:id).sort
|
742
752
|
end
|
743
753
|
|
744
754
|
def test_has_many_with_pluralize_table_names_false
|
745
|
-
aircraft = Aircraft.create!(:
|
746
|
-
engine = Engine.create!(:
|
755
|
+
aircraft = Aircraft.create!(name: "Airbus 380")
|
756
|
+
engine = Engine.create!(car_id: aircraft.id)
|
747
757
|
assert_equal aircraft.engines, [engine]
|
748
758
|
end
|
749
759
|
|
750
760
|
def test_proper_error_message_for_eager_load_and_includes_association_errors
|
751
761
|
includes_error = assert_raises(ActiveRecord::ConfigurationError) {
|
752
|
-
Post.includes(:nonexistent_relation).where(nonexistent_relation: {name:
|
762
|
+
Post.includes(:nonexistent_relation).where(nonexistent_relation: { name: "Rochester" }).find(1)
|
753
763
|
}
|
754
764
|
assert_equal("Can't join 'Post' to association named 'nonexistent_relation'; perhaps you misspelled it?", includes_error.message)
|
755
765
|
|
756
766
|
eager_load_error = assert_raises(ActiveRecord::ConfigurationError) {
|
757
|
-
Post.eager_load(:nonexistent_relation).where(nonexistent_relation: {name:
|
767
|
+
Post.eager_load(:nonexistent_relation).where(nonexistent_relation: { name: "Rochester" }).find(1)
|
758
768
|
}
|
759
769
|
assert_equal("Can't join 'Post' to association named 'nonexistent_relation'; perhaps you misspelled it?", eager_load_error.message)
|
760
770
|
|
761
771
|
includes_and_eager_load_error = assert_raises(ActiveRecord::ConfigurationError) {
|
762
|
-
Post.eager_load(:nonexistent_relation).includes(:nonexistent_relation).where(nonexistent_relation: {name:
|
772
|
+
Post.eager_load(:nonexistent_relation).includes(:nonexistent_relation).where(nonexistent_relation: { name: "Rochester" }).find(1)
|
763
773
|
}
|
764
774
|
assert_equal("Can't join 'Post' to association named 'nonexistent_relation'; perhaps you misspelled it?", includes_and_eager_load_error.message)
|
765
775
|
end
|
@@ -770,8 +780,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
|
|
770
780
|
class_name = "PostWith#{association.to_s.classify}#{dependency.to_s.classify}"
|
771
781
|
Post.find(post_id).update_columns type: class_name
|
772
782
|
klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
|
773
|
-
klass.table_name =
|
774
|
-
klass.
|
783
|
+
klass.table_name = "posts"
|
784
|
+
klass.public_send(association, association_name, as: :taggable, dependent: dependency)
|
775
785
|
klass.find(post_id)
|
776
786
|
end
|
777
787
|
end
|