ibm_db 5.1.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 +14 -14
- data/ext/extconf.rb +4 -4
- 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 +11 -11
- 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/ibm_db.rb +7 -3
- data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -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 +196 -11
@@ -1,16 +1,18 @@
|
|
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
|
4
|
+
require "models/post"
|
5
|
+
require "models/author"
|
6
|
+
require "models/developer"
|
7
|
+
require "models/computer"
|
8
|
+
require "models/project"
|
9
|
+
require "models/comment"
|
10
|
+
require "models/category"
|
11
|
+
require "models/person"
|
12
|
+
require "models/reference"
|
11
13
|
|
12
14
|
class RelationScopingTest < ActiveRecord::TestCase
|
13
|
-
fixtures :authors, :developers, :projects, :comments, :posts, :developers_projects
|
15
|
+
fixtures :authors, :author_addresses, :developers, :projects, :comments, :posts, :developers_projects
|
14
16
|
|
15
17
|
setup do
|
16
18
|
developers(:david)
|
@@ -28,7 +30,7 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
28
30
|
def test_scope_breaks_caching_on_collections
|
29
31
|
author = authors :david
|
30
32
|
ids = author.reload.special_posts_with_default_scope.map(&:id)
|
31
|
-
assert_equal [1,5,6], ids.sort
|
33
|
+
assert_equal [1, 5, 6], ids.sort
|
32
34
|
scoped_posts = SpecialPostWithDefaultScope.unscoped do
|
33
35
|
author = authors :david
|
34
36
|
author.reload.special_posts_with_default_scope.to_a
|
@@ -93,6 +95,20 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
98
|
+
def test_scoped_unscoped
|
99
|
+
DeveloperOrderedBySalary.where("salary = 9000").scoping do
|
100
|
+
assert_equal 11, DeveloperOrderedBySalary.first.id
|
101
|
+
assert_equal 1, DeveloperOrderedBySalary.unscoped.first.id
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_scoped_default_scoped
|
106
|
+
DeveloperOrderedBySalary.where("salary = 9000").scoping do
|
107
|
+
assert_equal 11, DeveloperOrderedBySalary.first.id
|
108
|
+
assert_equal 2, DeveloperOrderedBySalary.default_scoped.first.id
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
96
112
|
def test_scoped_find_all
|
97
113
|
Developer.where("name = 'David'").scoping do
|
98
114
|
assert_equal [developers(:david)], Developer.all
|
@@ -103,13 +119,13 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
103
119
|
Developer.select("id, name").scoping do
|
104
120
|
developer = Developer.where("name = 'David'").first
|
105
121
|
assert_equal "David", developer.name
|
106
|
-
|
122
|
+
assert_not developer.has_attribute?(:salary)
|
107
123
|
end
|
108
124
|
end
|
109
125
|
|
110
126
|
def test_scope_select_concatenates
|
111
127
|
Developer.select("id, name").scoping do
|
112
|
-
developer = Developer.select(
|
128
|
+
developer = Developer.select("salary").where("name = 'David'").first
|
113
129
|
assert_equal 80000, developer.salary
|
114
130
|
assert developer.has_attribute?(:id)
|
115
131
|
assert developer.has_attribute?(:name)
|
@@ -122,58 +138,116 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
122
138
|
assert_equal 1, Developer.count
|
123
139
|
end
|
124
140
|
|
125
|
-
Developer.where(
|
141
|
+
Developer.where("salary = 100000").scoping do
|
126
142
|
assert_equal 8, Developer.count
|
127
143
|
assert_equal 1, Developer.where("name LIKE 'fixture_1%'").count
|
128
144
|
end
|
129
145
|
end
|
130
146
|
|
147
|
+
def test_scoped_find_with_annotation
|
148
|
+
Developer.annotate("scoped").scoping do
|
149
|
+
developer = nil
|
150
|
+
assert_sql(%r{/\* scoped \*/}) do
|
151
|
+
developer = Developer.where("name = 'David'").first
|
152
|
+
end
|
153
|
+
assert_equal "David", developer.name
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_find_with_annotation_unscoped
|
158
|
+
Developer.annotate("scoped").unscoped do
|
159
|
+
developer = nil
|
160
|
+
log = capture_sql do
|
161
|
+
developer = Developer.where("name = 'David'").first
|
162
|
+
end
|
163
|
+
|
164
|
+
assert_not_predicate log, :empty?
|
165
|
+
assert_predicate log.select { |query| query.match?(%r{/\* scoped \*/}) }, :empty?
|
166
|
+
|
167
|
+
assert_equal "David", developer.name
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_find_with_annotation_unscope
|
172
|
+
developer = nil
|
173
|
+
log = capture_sql do
|
174
|
+
developer = Developer.annotate("unscope").
|
175
|
+
where("name = 'David'").
|
176
|
+
unscope(:annotate).first
|
177
|
+
end
|
178
|
+
|
179
|
+
assert_not_predicate log, :empty?
|
180
|
+
assert_predicate log.select { |query| query.match?(%r{/\* unscope \*/}) }, :empty?
|
181
|
+
|
182
|
+
assert_equal "David", developer.name
|
183
|
+
end
|
184
|
+
|
131
185
|
def test_scoped_find_include
|
132
186
|
# with the include, will retrieve only developers for the given project
|
133
187
|
scoped_developers = Developer.includes(:projects).scoping do
|
134
|
-
Developer.where(
|
188
|
+
Developer.where("projects.id" => 2).to_a
|
135
189
|
end
|
136
|
-
|
137
|
-
|
190
|
+
assert_includes scoped_developers, developers(:david)
|
191
|
+
assert_not_includes scoped_developers, developers(:jamis)
|
138
192
|
assert_equal 1, scoped_developers.size
|
139
193
|
end
|
140
194
|
|
141
195
|
def test_scoped_find_joins
|
142
|
-
scoped_developers = Developer.joins(
|
143
|
-
Developer.where(
|
196
|
+
scoped_developers = Developer.joins("JOIN developers_projects ON id = developer_id").scoping do
|
197
|
+
Developer.where("developers_projects.project_id = 2").to_a
|
144
198
|
end
|
145
199
|
|
146
|
-
|
147
|
-
|
200
|
+
assert_includes scoped_developers, developers(:david)
|
201
|
+
assert_not_includes scoped_developers, developers(:jamis)
|
148
202
|
assert_equal 1, scoped_developers.size
|
149
203
|
assert_equal developers(:david).attributes, scoped_developers.first.attributes
|
150
204
|
end
|
151
205
|
|
152
206
|
def test_scoped_create_with_where
|
153
|
-
new_comment = VerySpecialComment.where(:
|
154
|
-
VerySpecialComment.create :
|
207
|
+
new_comment = VerySpecialComment.where(post_id: 1).scoping do
|
208
|
+
VerySpecialComment.create body: "Wonderful world"
|
209
|
+
end
|
210
|
+
|
211
|
+
assert_equal 1, new_comment.post_id
|
212
|
+
assert_includes Post.find(1).comments, new_comment
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_scoped_create_with_where_with_array
|
216
|
+
new_comment = VerySpecialComment.where(label: [0, 1], post_id: 1).scoping do
|
217
|
+
VerySpecialComment.create body: "Wonderful world"
|
218
|
+
end
|
219
|
+
|
220
|
+
assert_equal 1, new_comment.post_id
|
221
|
+
assert_equal "default", new_comment.label
|
222
|
+
assert_includes Post.find(1).comments, new_comment
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_scoped_create_with_where_with_range
|
226
|
+
new_comment = VerySpecialComment.where(label: 0..1, post_id: 1).scoping do
|
227
|
+
VerySpecialComment.create body: "Wonderful world"
|
155
228
|
end
|
156
229
|
|
157
230
|
assert_equal 1, new_comment.post_id
|
158
|
-
|
231
|
+
assert_equal "default", new_comment.label
|
232
|
+
assert_includes Post.find(1).comments, new_comment
|
159
233
|
end
|
160
234
|
|
161
235
|
def test_scoped_create_with_create_with
|
162
|
-
new_comment = VerySpecialComment.create_with(:
|
163
|
-
VerySpecialComment.create :
|
236
|
+
new_comment = VerySpecialComment.create_with(post_id: 1).scoping do
|
237
|
+
VerySpecialComment.create body: "Wonderful world"
|
164
238
|
end
|
165
239
|
|
166
240
|
assert_equal 1, new_comment.post_id
|
167
|
-
|
241
|
+
assert_includes Post.find(1).comments, new_comment
|
168
242
|
end
|
169
243
|
|
170
244
|
def test_scoped_create_with_create_with_has_higher_priority
|
171
|
-
new_comment = VerySpecialComment.where(:
|
172
|
-
VerySpecialComment.create :
|
245
|
+
new_comment = VerySpecialComment.where(post_id: 2).create_with(post_id: 1).scoping do
|
246
|
+
VerySpecialComment.create body: "Wonderful world"
|
173
247
|
end
|
174
248
|
|
175
249
|
assert_equal 1, new_comment.post_id
|
176
|
-
|
250
|
+
assert_includes Post.find(1).comments, new_comment
|
177
251
|
end
|
178
252
|
|
179
253
|
def test_ensure_that_method_scoping_is_correctly_restored
|
@@ -193,7 +267,7 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
193
267
|
end
|
194
268
|
|
195
269
|
def test_update_all_default_scope_filters_on_joins
|
196
|
-
DeveloperFilteredOnJoins.update_all(:
|
270
|
+
DeveloperFilteredOnJoins.update_all(salary: 65000)
|
197
271
|
assert_equal 65000, Developer.find(developers(:david).id).salary
|
198
272
|
|
199
273
|
# has not changed jamis
|
@@ -211,21 +285,21 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
211
285
|
|
212
286
|
def test_current_scope_does_not_pollute_sibling_subclasses
|
213
287
|
Comment.none.scoping do
|
214
|
-
|
215
|
-
|
216
|
-
|
288
|
+
assert_not_predicate SpecialComment.all, :any?
|
289
|
+
assert_not_predicate VerySpecialComment.all, :any?
|
290
|
+
assert_not_predicate SubSpecialComment.all, :any?
|
217
291
|
end
|
218
292
|
|
219
293
|
SpecialComment.none.scoping do
|
220
|
-
|
221
|
-
|
222
|
-
|
294
|
+
assert_predicate Comment.all, :any?
|
295
|
+
assert_predicate VerySpecialComment.all, :any?
|
296
|
+
assert_not_predicate SubSpecialComment.all, :any?
|
223
297
|
end
|
224
298
|
|
225
299
|
SubSpecialComment.none.scoping do
|
226
|
-
|
227
|
-
|
228
|
-
|
300
|
+
assert_predicate Comment.all, :any?
|
301
|
+
assert_predicate VerySpecialComment.all, :any?
|
302
|
+
assert_predicate SpecialComment.all, :any?
|
229
303
|
end
|
230
304
|
end
|
231
305
|
|
@@ -238,6 +312,30 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
238
312
|
assert_nil SpecialComment.current_scope
|
239
313
|
end
|
240
314
|
|
315
|
+
def test_scoping_respects_current_class
|
316
|
+
Comment.unscoped do
|
317
|
+
assert_equal "a comment...", Comment.all.what_are_you
|
318
|
+
assert_equal "a special comment...", SpecialComment.all.what_are_you
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_scoping_respects_sti_constraint
|
323
|
+
Comment.unscoped do
|
324
|
+
assert_equal comments(:greetings), Comment.find(1)
|
325
|
+
assert_raises(ActiveRecord::RecordNotFound) { SpecialComment.find(1) }
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_scoping_with_klass_method_works_in_the_scope_block
|
330
|
+
expected = SpecialPostWithDefaultScope.unscoped.to_a
|
331
|
+
assert_equal expected, SpecialPostWithDefaultScope.unscoped_all
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_scoping_with_query_method_works_in_the_scope_block
|
335
|
+
expected = SpecialPostWithDefaultScope.unscoped.where(author_id: 0).to_a
|
336
|
+
assert_equal expected, SpecialPostWithDefaultScope.authorless
|
337
|
+
end
|
338
|
+
|
241
339
|
def test_circular_joins_with_scoping_does_not_crash
|
242
340
|
posts = Post.joins(comments: :post).scoping do
|
243
341
|
Post.first(10)
|
@@ -254,10 +352,10 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
254
352
|
end
|
255
353
|
|
256
354
|
class NestedRelationScopingTest < ActiveRecord::TestCase
|
257
|
-
fixtures :authors, :developers, :projects, :comments, :posts
|
355
|
+
fixtures :authors, :author_addresses, :developers, :projects, :comments, :posts
|
258
356
|
|
259
357
|
def test_merge_options
|
260
|
-
Developer.where(
|
358
|
+
Developer.where("salary = 80000").scoping do
|
261
359
|
Developer.limit(10).scoping do
|
262
360
|
devs = Developer.all
|
263
361
|
sql = devs.to_sql
|
@@ -276,39 +374,39 @@ class NestedRelationScopingTest < ActiveRecord::TestCase
|
|
276
374
|
end
|
277
375
|
|
278
376
|
def test_replace_options
|
279
|
-
Developer.where(:
|
377
|
+
Developer.where(name: "David").scoping do
|
280
378
|
Developer.unscoped do
|
281
|
-
assert_equal
|
379
|
+
assert_equal "Jamis", Developer.where(name: "Jamis").first[:name]
|
282
380
|
end
|
283
381
|
|
284
|
-
assert_equal
|
382
|
+
assert_equal "David", Developer.first[:name]
|
285
383
|
end
|
286
384
|
end
|
287
385
|
|
288
386
|
def test_three_level_nested_exclusive_scoped_find
|
289
387
|
Developer.where("name = 'Jamis'").scoping do
|
290
|
-
assert_equal
|
388
|
+
assert_equal "Jamis", Developer.first.name
|
291
389
|
|
292
390
|
Developer.unscoped.where("name = 'David'") do
|
293
|
-
assert_equal
|
391
|
+
assert_equal "David", Developer.first.name
|
294
392
|
|
295
393
|
Developer.unscoped.where("name = 'Maiha'") do
|
296
|
-
|
394
|
+
assert_nil Developer.first
|
297
395
|
end
|
298
396
|
|
299
397
|
# ensure that scoping is restored
|
300
|
-
assert_equal
|
398
|
+
assert_equal "David", Developer.first.name
|
301
399
|
end
|
302
400
|
|
303
401
|
# ensure that scoping is restored
|
304
|
-
assert_equal
|
402
|
+
assert_equal "Jamis", Developer.first.name
|
305
403
|
end
|
306
404
|
end
|
307
405
|
|
308
406
|
def test_nested_scoped_create
|
309
|
-
comment = Comment.create_with(:
|
310
|
-
Comment.create_with(:
|
311
|
-
Comment.create :
|
407
|
+
comment = Comment.create_with(post_id: 1).scoping do
|
408
|
+
Comment.create_with(post_id: 2).scoping do
|
409
|
+
Comment.create body: "Hey guys, nested scopes are broken. Please fix!"
|
312
410
|
end
|
313
411
|
end
|
314
412
|
|
@@ -316,15 +414,15 @@ class NestedRelationScopingTest < ActiveRecord::TestCase
|
|
316
414
|
end
|
317
415
|
|
318
416
|
def test_nested_exclusive_scope_for_create
|
319
|
-
comment = Comment.create_with(:
|
320
|
-
Comment.unscoped.create_with(:
|
321
|
-
|
322
|
-
Comment.create :
|
417
|
+
comment = Comment.create_with(body: "Hey guys, nested scopes are broken. Please fix!").scoping do
|
418
|
+
Comment.unscoped.create_with(post_id: 1).scoping do
|
419
|
+
assert_predicate Comment.new.body, :blank?
|
420
|
+
Comment.create body: "Hey guys"
|
323
421
|
end
|
324
422
|
end
|
325
423
|
|
326
424
|
assert_equal 1, comment.post_id
|
327
|
-
assert_equal
|
425
|
+
assert_equal "Hey guys", comment.body
|
328
426
|
end
|
329
427
|
end
|
330
428
|
|
@@ -336,24 +434,36 @@ class HasManyScopingTest < ActiveRecord::TestCase
|
|
336
434
|
end
|
337
435
|
|
338
436
|
def test_forwarding_of_static_methods
|
339
|
-
assert_equal
|
340
|
-
assert_equal
|
437
|
+
assert_equal "a comment...", Comment.what_are_you
|
438
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
341
439
|
end
|
342
440
|
|
343
441
|
def test_forwarding_to_scoped
|
344
|
-
assert_equal
|
345
|
-
assert_equal 2, @welcome.comments.search_by_type(
|
442
|
+
assert_equal 5, Comment.search_by_type("Comment").size
|
443
|
+
assert_equal 2, @welcome.comments.search_by_type("Comment").size
|
346
444
|
end
|
347
445
|
|
348
446
|
def test_nested_scope_finder
|
349
|
-
Comment.where(
|
350
|
-
assert_equal
|
351
|
-
assert_equal
|
447
|
+
Comment.where("1=0").scoping do
|
448
|
+
assert_equal 2, @welcome.comments.count
|
449
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
352
450
|
end
|
353
451
|
|
354
|
-
Comment.where(
|
452
|
+
Comment.where("1=1").scoping do
|
355
453
|
assert_equal 2, @welcome.comments.count
|
356
|
-
assert_equal
|
454
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
def test_none_scoping
|
459
|
+
Comment.none.scoping do
|
460
|
+
assert_equal 2, @welcome.comments.count
|
461
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
462
|
+
end
|
463
|
+
|
464
|
+
Comment.where("1=1").scoping do
|
465
|
+
assert_equal 2, @welcome.comments.count
|
466
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
357
467
|
end
|
358
468
|
end
|
359
469
|
|
@@ -368,7 +478,7 @@ class HasManyScopingTest < ActiveRecord::TestCase
|
|
368
478
|
end
|
369
479
|
|
370
480
|
def test_should_maintain_default_scope_on_eager_loaded_associations
|
371
|
-
michael = Person.where(:
|
481
|
+
michael = Person.where(id: people(:michael).id).includes(:bad_references).first
|
372
482
|
magician = BadReference.find(1)
|
373
483
|
assert_equal [magician], michael.bad_references
|
374
484
|
end
|
@@ -382,19 +492,31 @@ class HasAndBelongsToManyScopingTest < ActiveRecord::TestCase
|
|
382
492
|
end
|
383
493
|
|
384
494
|
def test_forwarding_of_static_methods
|
385
|
-
assert_equal
|
386
|
-
assert_equal
|
495
|
+
assert_equal "a category...", Category.what_are_you
|
496
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
387
497
|
end
|
388
498
|
|
389
499
|
def test_nested_scope_finder
|
390
|
-
Category.where(
|
391
|
-
assert_equal
|
392
|
-
assert_equal
|
500
|
+
Category.where("1=0").scoping do
|
501
|
+
assert_equal 2, @welcome.categories.count
|
502
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
503
|
+
end
|
504
|
+
|
505
|
+
Category.where("1=1").scoping do
|
506
|
+
assert_equal 2, @welcome.categories.count
|
507
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
def test_none_scoping
|
512
|
+
Category.none.scoping do
|
513
|
+
assert_equal 2, @welcome.categories.count
|
514
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
393
515
|
end
|
394
516
|
|
395
|
-
Category.where(
|
517
|
+
Category.where("1=1").scoping do
|
396
518
|
assert_equal 2, @welcome.categories.count
|
397
|
-
assert_equal
|
519
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
398
520
|
end
|
399
521
|
end
|
400
522
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/user"
|
3
5
|
|
4
6
|
class SecureTokenTest < ActiveRecord::TestCase
|
5
7
|
setup do
|
@@ -10,6 +12,8 @@ class SecureTokenTest < ActiveRecord::TestCase
|
|
10
12
|
@user.save
|
11
13
|
assert_not_nil @user.token
|
12
14
|
assert_not_nil @user.auth_token
|
15
|
+
assert_equal 24, @user.token.size
|
16
|
+
assert_equal 36, @user.auth_token.size
|
13
17
|
end
|
14
18
|
|
15
19
|
def test_regenerating_the_secure_token
|
@@ -21,12 +25,23 @@ class SecureTokenTest < ActiveRecord::TestCase
|
|
21
25
|
|
22
26
|
assert_not_equal @user.token, old_token
|
23
27
|
assert_not_equal @user.auth_token, old_auth_token
|
28
|
+
|
29
|
+
assert_equal 24, @user.token.size
|
30
|
+
assert_equal 36, @user.auth_token.size
|
24
31
|
end
|
25
32
|
|
26
33
|
def test_token_value_not_overwritten_when_present
|
27
34
|
@user.token = "custom-secure-token"
|
28
35
|
@user.save
|
29
36
|
|
30
|
-
assert_equal
|
37
|
+
assert_equal "custom-secure-token", @user.token
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_token_length_cannot_be_less_than_24_characters
|
41
|
+
assert_raises(ActiveRecord::SecureToken::MinimumLengthError) do
|
42
|
+
@user.class_eval do
|
43
|
+
has_secure_token :not_valid_token, length: 12
|
44
|
+
end
|
45
|
+
end
|
31
46
|
end
|
32
47
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require "models/contact"
|
5
|
+
require "models/topic"
|
6
|
+
require "models/book"
|
7
|
+
require "models/author"
|
8
|
+
require "models/post"
|
7
9
|
|
8
10
|
class SerializationTest < ActiveRecord::TestCase
|
9
11
|
fixtures :books
|
@@ -12,14 +14,14 @@ class SerializationTest < ActiveRecord::TestCase
|
|
12
14
|
|
13
15
|
def setup
|
14
16
|
@contact_attributes = {
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
17
|
+
name: "aaron stack",
|
18
|
+
age: 25,
|
19
|
+
avatar: "binarydata",
|
20
|
+
created_at: Time.utc(2006, 8, 1),
|
21
|
+
awesome: false,
|
22
|
+
preferences: { gem: "<strong>ruby</strong>" },
|
23
|
+
alternative_id: nil,
|
24
|
+
id: nil
|
23
25
|
}
|
24
26
|
end
|
25
27
|
|
@@ -29,8 +31,8 @@ class SerializationTest < ActiveRecord::TestCase
|
|
29
31
|
|
30
32
|
def test_serialize_should_be_reversible
|
31
33
|
FORMATS.each do |format|
|
32
|
-
@serialized = Contact.new.
|
33
|
-
contact = Contact.new.
|
34
|
+
@serialized = Contact.new.public_send("to_#{format}")
|
35
|
+
contact = Contact.new.public_send("from_#{format}", @serialized)
|
34
36
|
|
35
37
|
assert_equal @contact_attributes.keys.collect(&:to_s).sort, contact.attributes.keys.collect(&:to_s).sort, "For #{format}"
|
36
38
|
end
|
@@ -38,8 +40,8 @@ class SerializationTest < ActiveRecord::TestCase
|
|
38
40
|
|
39
41
|
def test_serialize_should_allow_attribute_only_filtering
|
40
42
|
FORMATS.each do |format|
|
41
|
-
@serialized = Contact.new(@contact_attributes).
|
42
|
-
contact = Contact.new.
|
43
|
+
@serialized = Contact.new(@contact_attributes).public_send("to_#{format}", only: [ :age, :name ])
|
44
|
+
contact = Contact.new.public_send("from_#{format}", @serialized)
|
43
45
|
assert_equal @contact_attributes[:name], contact.name, "For #{format}"
|
44
46
|
assert_nil contact.avatar, "For #{format}"
|
45
47
|
end
|
@@ -47,8 +49,8 @@ class SerializationTest < ActiveRecord::TestCase
|
|
47
49
|
|
48
50
|
def test_serialize_should_allow_attribute_except_filtering
|
49
51
|
FORMATS.each do |format|
|
50
|
-
@serialized = Contact.new(@contact_attributes).
|
51
|
-
contact = Contact.new.
|
52
|
+
@serialized = Contact.new(@contact_attributes).public_send("to_#{format}", except: [ :age, :name ])
|
53
|
+
contact = Contact.new.public_send("from_#{format}", @serialized)
|
52
54
|
assert_nil contact.name, "For #{format}"
|
53
55
|
assert_nil contact.age, "For #{format}"
|
54
56
|
assert_equal @contact_attributes[:awesome], contact.awesome, "For #{format}"
|
@@ -60,20 +62,20 @@ class SerializationTest < ActiveRecord::TestCase
|
|
60
62
|
ActiveRecord::Base.include_root_in_json = true
|
61
63
|
|
62
64
|
klazz = Class.new(ActiveRecord::Base)
|
63
|
-
klazz.table_name =
|
65
|
+
klazz.table_name = "topics"
|
64
66
|
assert klazz.include_root_in_json
|
65
67
|
|
66
68
|
klazz.include_root_in_json = false
|
67
69
|
assert ActiveRecord::Base.include_root_in_json
|
68
|
-
|
69
|
-
|
70
|
+
assert_not klazz.include_root_in_json
|
71
|
+
assert_not klazz.new.include_root_in_json
|
70
72
|
ensure
|
71
73
|
ActiveRecord::Base.include_root_in_json = original_root_in_json
|
72
74
|
end
|
73
75
|
|
74
76
|
def test_read_attribute_for_serialization_with_format_without_method_missing
|
75
77
|
klazz = Class.new(ActiveRecord::Base)
|
76
|
-
klazz.table_name =
|
78
|
+
klazz.table_name = "books"
|
77
79
|
|
78
80
|
book = klazz.new
|
79
81
|
assert_nil book.read_attribute_for_serialization(:format)
|
@@ -81,18 +83,18 @@ class SerializationTest < ActiveRecord::TestCase
|
|
81
83
|
|
82
84
|
def test_read_attribute_for_serialization_with_format_after_init
|
83
85
|
klazz = Class.new(ActiveRecord::Base)
|
84
|
-
klazz.table_name =
|
86
|
+
klazz.table_name = "books"
|
85
87
|
|
86
|
-
book = klazz.new(format:
|
87
|
-
assert_equal
|
88
|
+
book = klazz.new(format: "paperback")
|
89
|
+
assert_equal "paperback", book.read_attribute_for_serialization(:format)
|
88
90
|
end
|
89
91
|
|
90
92
|
def test_read_attribute_for_serialization_with_format_after_find
|
91
93
|
klazz = Class.new(ActiveRecord::Base)
|
92
|
-
klazz.table_name =
|
94
|
+
klazz.table_name = "books"
|
93
95
|
|
94
96
|
book = klazz.find(books(:awdr).id)
|
95
|
-
assert_equal
|
97
|
+
assert_equal "paperback", book.read_attribute_for_serialization(:format)
|
96
98
|
end
|
97
99
|
|
98
100
|
def test_find_records_by_serialized_attributes_through_join
|