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
data/test/cases/mixin_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
4
|
|
3
5
|
class Mixin < ActiveRecord::Base
|
@@ -10,10 +12,6 @@ class TouchTest < ActiveRecord::TestCase
|
|
10
12
|
travel_to Time.now
|
11
13
|
end
|
12
14
|
|
13
|
-
teardown do
|
14
|
-
travel_back
|
15
|
-
end
|
16
|
-
|
17
15
|
def test_update
|
18
16
|
stamped = Mixin.new
|
19
17
|
|
@@ -41,13 +39,12 @@ class TouchTest < ActiveRecord::TestCase
|
|
41
39
|
|
42
40
|
old_updated_at = stamped.updated_at
|
43
41
|
|
44
|
-
travel 5.minutes
|
45
|
-
|
46
|
-
|
42
|
+
travel 5.minutes
|
43
|
+
stamped.lft_will_change!
|
44
|
+
stamped.save
|
47
45
|
|
48
|
-
|
49
|
-
|
50
|
-
end
|
46
|
+
assert_equal Time.now, stamped.updated_at
|
47
|
+
assert_equal old_updated_at, stamped.created_at
|
51
48
|
end
|
52
49
|
|
53
50
|
def test_create_turned_off
|
@@ -64,5 +61,4 @@ class TouchTest < ActiveRecord::TestCase
|
|
64
61
|
ensure
|
65
62
|
Mixin.record_timestamps = true
|
66
63
|
end
|
67
|
-
|
68
64
|
end
|
data/test/cases/modules_test.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require "models/company_in_module"
|
5
|
+
require "models/shop"
|
6
|
+
require "models/developer"
|
7
|
+
require "models/computer"
|
6
8
|
|
7
9
|
class ModulesTest < ActiveRecord::TestCase
|
8
10
|
fixtures :accounts, :companies, :projects, :developers, :collections, :products, :variants
|
@@ -22,7 +24,7 @@ class ModulesTest < ActiveRecord::TestCase
|
|
22
24
|
teardown do
|
23
25
|
# reinstate the constants that we undefined in the setup
|
24
26
|
@undefined_consts.each do |constant, value|
|
25
|
-
Object.
|
27
|
+
Object.const_set constant, value unless value.nil?
|
26
28
|
end
|
27
29
|
|
28
30
|
ActiveRecord::Base.store_full_sti_class = true
|
@@ -30,8 +32,8 @@ class ModulesTest < ActiveRecord::TestCase
|
|
30
32
|
|
31
33
|
def test_module_spanning_associations
|
32
34
|
firm = MyApplication::Business::Firm.first
|
33
|
-
|
34
|
-
assert_nil firm.class.table_name.match(
|
35
|
+
assert_not firm.clients.empty?, "Firm should have clients"
|
36
|
+
assert_nil firm.class.table_name.match("::"), "Firm shouldn't have the module appear in its table name"
|
35
37
|
end
|
36
38
|
|
37
39
|
def test_module_spanning_has_and_belongs_to_many_associations
|
@@ -41,7 +43,7 @@ class ModulesTest < ActiveRecord::TestCase
|
|
41
43
|
end
|
42
44
|
|
43
45
|
def test_associations_spanning_cross_modules
|
44
|
-
account = MyApplication::Billing::Account.all.merge!(:
|
46
|
+
account = MyApplication::Billing::Account.all.merge!(order: "id").first
|
45
47
|
assert_kind_of MyApplication::Business::Firm, account.firm
|
46
48
|
assert_kind_of MyApplication::Billing::Firm, account.qualified_billing_firm
|
47
49
|
assert_kind_of MyApplication::Billing::Firm, account.unqualified_billing_firm
|
@@ -50,14 +52,14 @@ class ModulesTest < ActiveRecord::TestCase
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def test_find_account_and_include_company
|
53
|
-
account = MyApplication::Billing::Account.all.merge!(:
|
55
|
+
account = MyApplication::Billing::Account.all.merge!(includes: :firm).find(1)
|
54
56
|
assert_kind_of MyApplication::Business::Firm, account.firm
|
55
57
|
end
|
56
58
|
|
57
59
|
def test_table_name
|
58
|
-
assert_equal
|
59
|
-
assert_equal
|
60
|
-
assert_equal
|
60
|
+
assert_equal "accounts", MyApplication::Billing::Account.table_name, "table_name for ActiveRecord model in module"
|
61
|
+
assert_equal "companies", MyApplication::Business::Client.table_name, "table_name for ActiveRecord model subclass"
|
62
|
+
assert_equal "company_contacts", MyApplication::Business::Client::Contact.table_name, "table_name for ActiveRecord model enclosed by another ActiveRecord model"
|
61
63
|
end
|
62
64
|
|
63
65
|
def test_assign_ids
|
@@ -73,8 +75,8 @@ class ModulesTest < ActiveRecord::TestCase
|
|
73
75
|
clients = []
|
74
76
|
|
75
77
|
assert_nothing_raised do
|
76
|
-
clients << MyApplication::Business::Client.references(:accounts).merge!(:
|
77
|
-
clients << MyApplication::Business::Client.includes(:
|
78
|
+
clients << MyApplication::Business::Client.references(:accounts).merge!(includes: { firm: :account }, where: "accounts.id IS NOT NULL").find(3)
|
79
|
+
clients << MyApplication::Business::Client.includes(firm: :account).find(3)
|
78
80
|
end
|
79
81
|
|
80
82
|
clients.each do |client|
|
@@ -85,9 +87,9 @@ class ModulesTest < ActiveRecord::TestCase
|
|
85
87
|
end
|
86
88
|
|
87
89
|
def test_module_table_name_prefix
|
88
|
-
assert_equal
|
89
|
-
assert_equal
|
90
|
-
assert_equal
|
90
|
+
assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_prefix"
|
91
|
+
assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_prefix"
|
92
|
+
assert_equal "companies", MyApplication::Business::Prefixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed"
|
91
93
|
end
|
92
94
|
|
93
95
|
def test_module_table_name_prefix_with_global_prefix
|
@@ -101,21 +103,21 @@ class ModulesTest < ActiveRecord::TestCase
|
|
101
103
|
MyApplication::Business::Prefixed::Nested::Company,
|
102
104
|
MyApplication::Billing::Account ]
|
103
105
|
|
104
|
-
ActiveRecord::Base.table_name_prefix =
|
106
|
+
ActiveRecord::Base.table_name_prefix = "global_"
|
105
107
|
classes.each(&:reset_table_name)
|
106
|
-
assert_equal
|
107
|
-
assert_equal
|
108
|
-
assert_equal
|
109
|
-
assert_equal
|
108
|
+
assert_equal "global_companies", MyApplication::Business::Company.table_name, "inferred table_name for ActiveRecord model in module without table_name_prefix"
|
109
|
+
assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_prefix"
|
110
|
+
assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_prefix"
|
111
|
+
assert_equal "companies", MyApplication::Business::Prefixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed"
|
110
112
|
ensure
|
111
|
-
ActiveRecord::Base.table_name_prefix =
|
113
|
+
ActiveRecord::Base.table_name_prefix = ""
|
112
114
|
classes.each(&:reset_table_name)
|
113
115
|
end
|
114
116
|
|
115
117
|
def test_module_table_name_suffix
|
116
|
-
assert_equal
|
117
|
-
assert_equal
|
118
|
-
assert_equal
|
118
|
+
assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_suffix"
|
119
|
+
assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_suffix"
|
120
|
+
assert_equal "companies", MyApplication::Business::Suffixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed"
|
119
121
|
end
|
120
122
|
|
121
123
|
def test_module_table_name_suffix_with_global_suffix
|
@@ -129,14 +131,14 @@ class ModulesTest < ActiveRecord::TestCase
|
|
129
131
|
MyApplication::Business::Suffixed::Nested::Company,
|
130
132
|
MyApplication::Billing::Account ]
|
131
133
|
|
132
|
-
ActiveRecord::Base.table_name_suffix =
|
134
|
+
ActiveRecord::Base.table_name_suffix = "_global"
|
133
135
|
classes.each(&:reset_table_name)
|
134
|
-
assert_equal
|
135
|
-
assert_equal
|
136
|
-
assert_equal
|
137
|
-
assert_equal
|
136
|
+
assert_equal "companies_global", MyApplication::Business::Company.table_name, "inferred table_name for ActiveRecord model in module without table_name_suffix"
|
137
|
+
assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_suffix"
|
138
|
+
assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_suffix"
|
139
|
+
assert_equal "companies", MyApplication::Business::Suffixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed"
|
138
140
|
ensure
|
139
|
-
ActiveRecord::Base.table_name_suffix =
|
141
|
+
ActiveRecord::Base.table_name_suffix = ""
|
140
142
|
classes.each(&:reset_table_name)
|
141
143
|
end
|
142
144
|
|
@@ -153,7 +155,7 @@ class ModulesTest < ActiveRecord::TestCase
|
|
153
155
|
ActiveRecord::Base.store_full_sti_class = true
|
154
156
|
|
155
157
|
collection = Shop::Collection.first
|
156
|
-
|
158
|
+
assert_not collection.products.empty?, "Collection should have products"
|
157
159
|
assert_nothing_raised { collection.destroy }
|
158
160
|
ensure
|
159
161
|
ActiveRecord::Base.store_full_sti_class = old
|
@@ -164,7 +166,7 @@ class ModulesTest < ActiveRecord::TestCase
|
|
164
166
|
ActiveRecord::Base.store_full_sti_class = true
|
165
167
|
|
166
168
|
product = Shop::Product.first
|
167
|
-
|
169
|
+
assert_not product.variants.empty?, "Product should have variants"
|
168
170
|
assert_nothing_raised { product.destroy }
|
169
171
|
ensure
|
170
172
|
ActiveRecord::Base.store_full_sti_class = old
|
@@ -0,0 +1,223 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "cases/migration/helper"
|
5
|
+
|
6
|
+
class MultiDbMigratorTest < ActiveRecord::TestCase
|
7
|
+
self.use_transactional_tests = false
|
8
|
+
|
9
|
+
# Use this class to sense if migrations have gone
|
10
|
+
# up or down.
|
11
|
+
class Sensor < ActiveRecord::Migration::Current
|
12
|
+
attr_reader :went_up, :went_down
|
13
|
+
|
14
|
+
def initialize(name = self.class.name, version = nil)
|
15
|
+
super
|
16
|
+
@went_up = false
|
17
|
+
@went_down = false
|
18
|
+
end
|
19
|
+
|
20
|
+
def up; @went_up = true; end
|
21
|
+
def down; @went_down = true; end
|
22
|
+
end
|
23
|
+
|
24
|
+
def setup
|
25
|
+
super
|
26
|
+
@connection_a = ActiveRecord::Base.connection
|
27
|
+
@connection_b = ARUnit2Model.connection
|
28
|
+
|
29
|
+
@connection_a.schema_migration.create_table
|
30
|
+
@connection_b.schema_migration.create_table
|
31
|
+
|
32
|
+
@connection_a.schema_migration.delete_all rescue nil
|
33
|
+
@connection_b.schema_migration.delete_all rescue nil
|
34
|
+
|
35
|
+
@path_a = MIGRATIONS_ROOT + "/valid"
|
36
|
+
@path_b = MIGRATIONS_ROOT + "/to_copy"
|
37
|
+
|
38
|
+
@schema_migration_a = @connection_a.schema_migration
|
39
|
+
@migrations_a = ActiveRecord::MigrationContext.new(@path_a, @schema_migration_a).migrations
|
40
|
+
@schema_migration_b = @connection_b.schema_migration
|
41
|
+
@migrations_b = ActiveRecord::MigrationContext.new(@path_b, @schema_migration_b).migrations
|
42
|
+
|
43
|
+
@migrations_a_list = [[1, "ValidPeopleHaveLastNames"], [2, "WeNeedReminders"], [3, "InnocentJointable"]]
|
44
|
+
@migrations_b_list = [[1, "PeopleHaveHobbies"], [2, "PeopleHaveDescriptions"]]
|
45
|
+
|
46
|
+
@verbose_was = ActiveRecord::Migration.verbose
|
47
|
+
|
48
|
+
ActiveRecord::Migration.message_count = 0
|
49
|
+
ActiveRecord::Migration.class_eval do
|
50
|
+
undef :puts
|
51
|
+
def puts(*)
|
52
|
+
ActiveRecord::Migration.message_count += 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
teardown do
|
58
|
+
@connection_a.schema_migration.delete_all rescue nil
|
59
|
+
@connection_b.schema_migration.delete_all rescue nil
|
60
|
+
|
61
|
+
ActiveRecord::Migration.verbose = @verbose_was
|
62
|
+
ActiveRecord::Migration.class_eval do
|
63
|
+
undef :puts
|
64
|
+
def puts(*)
|
65
|
+
super
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_schema_migration_class_names
|
71
|
+
assert_equal "ActiveRecord::SchemaMigration", @schema_migration_a.name
|
72
|
+
assert_equal "ARUnit2Model::SchemaMigration", @schema_migration_b.name
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_finds_migrations
|
76
|
+
@migrations_a_list.each_with_index do |pair, i|
|
77
|
+
assert_equal @migrations_a[i].version, pair.first
|
78
|
+
assert_equal @migrations_a[i].name, pair.last
|
79
|
+
end
|
80
|
+
|
81
|
+
@migrations_b_list.each_with_index do |pair, i|
|
82
|
+
assert_equal @migrations_b[i].version, pair.first
|
83
|
+
assert_equal @migrations_b[i].name, pair.last
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_migrations_status
|
88
|
+
@schema_migration_a.create(version: 2)
|
89
|
+
@schema_migration_a.create(version: 10)
|
90
|
+
|
91
|
+
assert_equal [
|
92
|
+
["down", "001", "Valid people have last names"],
|
93
|
+
["up", "002", "We need reminders"],
|
94
|
+
["down", "003", "Innocent jointable"],
|
95
|
+
["up", "010", "********** NO FILE **********"],
|
96
|
+
], ActiveRecord::MigrationContext.new(@path_a, @schema_migration_a).migrations_status
|
97
|
+
|
98
|
+
@schema_migration_b.create(version: 4)
|
99
|
+
|
100
|
+
assert_equal [
|
101
|
+
["down", "001", "People have hobbies"],
|
102
|
+
["down", "002", "People have descriptions"],
|
103
|
+
["up", "004", "********** NO FILE **********"]
|
104
|
+
], ActiveRecord::MigrationContext.new(@path_b, @schema_migration_b).migrations_status
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_get_all_versions
|
108
|
+
_, migrator_a = migrator_class(3)
|
109
|
+
migrator_a = migrator_a.new(@path_a, @schema_migration_a)
|
110
|
+
|
111
|
+
migrator_a.migrate
|
112
|
+
assert_equal([1, 2, 3], migrator_a.get_all_versions)
|
113
|
+
|
114
|
+
migrator_a.rollback
|
115
|
+
assert_equal([1, 2], migrator_a.get_all_versions)
|
116
|
+
|
117
|
+
migrator_a.rollback
|
118
|
+
assert_equal([1], migrator_a.get_all_versions)
|
119
|
+
|
120
|
+
migrator_a.rollback
|
121
|
+
assert_equal([], migrator_a.get_all_versions)
|
122
|
+
|
123
|
+
_, migrator_b = migrator_class(2)
|
124
|
+
migrator_b = migrator_b.new(@path_b, @schema_migration_b)
|
125
|
+
|
126
|
+
migrator_b.migrate
|
127
|
+
assert_equal([1, 2], migrator_b.get_all_versions)
|
128
|
+
|
129
|
+
migrator_b.rollback
|
130
|
+
assert_equal([1], migrator_b.get_all_versions)
|
131
|
+
|
132
|
+
migrator_b.rollback
|
133
|
+
assert_equal([], migrator_b.get_all_versions)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_finds_pending_migrations
|
137
|
+
@schema_migration_a.create!(version: "1")
|
138
|
+
migration_list_a = [ActiveRecord::Migration.new("foo", 1), ActiveRecord::Migration.new("bar", 3)]
|
139
|
+
migrations_a = ActiveRecord::Migrator.new(:up, migration_list_a, @schema_migration_a).pending_migrations
|
140
|
+
|
141
|
+
assert_equal 1, migrations_a.size
|
142
|
+
assert_equal migration_list_a.last, migrations_a.first
|
143
|
+
|
144
|
+
@schema_migration_b.create!(version: "1")
|
145
|
+
migration_list_b = [ActiveRecord::Migration.new("foo", 1), ActiveRecord::Migration.new("bar", 3)]
|
146
|
+
migrations_b = ActiveRecord::Migrator.new(:up, migration_list_b, @schema_migration_b).pending_migrations
|
147
|
+
|
148
|
+
assert_equal 1, migrations_b.size
|
149
|
+
assert_equal migration_list_b.last, migrations_b.first
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_migrator_db_has_no_schema_migrations_table
|
153
|
+
_, migrator = migrator_class(3)
|
154
|
+
migrator = migrator.new(@path_a, @schema_migration_a)
|
155
|
+
|
156
|
+
@schema_migration_a.drop_table
|
157
|
+
assert_not @connection_a.table_exists?("schema_migrations")
|
158
|
+
migrator.migrate(1)
|
159
|
+
assert @connection_a.table_exists?("schema_migrations")
|
160
|
+
|
161
|
+
_, migrator = migrator_class(3)
|
162
|
+
migrator = migrator.new(@path_b, @schema_migration_b)
|
163
|
+
|
164
|
+
@schema_migration_b.drop_table
|
165
|
+
assert_not @connection_b.table_exists?("schema_migrations")
|
166
|
+
migrator.migrate(1)
|
167
|
+
assert @connection_b.table_exists?("schema_migrations")
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_migrator_forward
|
171
|
+
_, migrator = migrator_class(3)
|
172
|
+
migrator = migrator.new(@path_a, @schema_migration_a)
|
173
|
+
migrator.migrate(1)
|
174
|
+
assert_equal(1, migrator.current_version)
|
175
|
+
|
176
|
+
migrator.forward(2)
|
177
|
+
assert_equal(3, migrator.current_version)
|
178
|
+
|
179
|
+
migrator.forward
|
180
|
+
assert_equal(3, migrator.current_version)
|
181
|
+
|
182
|
+
_, migrator_b = migrator_class(3)
|
183
|
+
migrator_b = migrator_b.new(@path_b, @schema_migration_b)
|
184
|
+
migrator_b.migrate(1)
|
185
|
+
assert_equal(1, migrator_b.current_version)
|
186
|
+
|
187
|
+
migrator_b.forward(2)
|
188
|
+
assert_equal(3, migrator_b.current_version)
|
189
|
+
|
190
|
+
migrator_b.forward
|
191
|
+
assert_equal(3, migrator_b.current_version)
|
192
|
+
end
|
193
|
+
|
194
|
+
private
|
195
|
+
def m(name, version)
|
196
|
+
x = Sensor.new name, version
|
197
|
+
x.extend(Module.new {
|
198
|
+
define_method(:up) { yield(:up, x); super() }
|
199
|
+
define_method(:down) { yield(:down, x); super() }
|
200
|
+
}) if block_given?
|
201
|
+
end
|
202
|
+
|
203
|
+
def sensors(count)
|
204
|
+
calls = []
|
205
|
+
migrations = count.times.map { |i|
|
206
|
+
m(nil, i + 1) { |c, migration|
|
207
|
+
calls << [c, migration.version]
|
208
|
+
}
|
209
|
+
}
|
210
|
+
[calls, migrations]
|
211
|
+
end
|
212
|
+
|
213
|
+
def migrator_class(count)
|
214
|
+
calls, migrations = sensors(count)
|
215
|
+
|
216
|
+
migrator = Class.new(ActiveRecord::MigrationContext) {
|
217
|
+
define_method(:migrations) { |*|
|
218
|
+
migrations
|
219
|
+
}
|
220
|
+
}
|
221
|
+
[calls, migrator]
|
222
|
+
end
|
223
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
+
require "models/topic"
|
5
|
+
require "models/customer"
|
4
6
|
|
5
7
|
class MultiParameterAttributeTest < ActiveRecord::TestCase
|
6
8
|
fixtures :topics
|
@@ -11,15 +13,13 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
11
13
|
topic.attributes = attributes
|
12
14
|
# note that extra #to_date call allows test to pass for Oracle, which
|
13
15
|
# treats dates/times the same
|
14
|
-
|
16
|
+
assert_equal Date.new(2004, 6, 24), topic.last_read.to_date
|
15
17
|
end
|
16
18
|
|
17
19
|
def test_multiparameter_attributes_on_date_with_empty_year
|
18
20
|
attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "24" }
|
19
21
|
topic = Topic.find(1)
|
20
22
|
topic.attributes = attributes
|
21
|
-
# note that extra #to_date call allows test to pass for Oracle, which
|
22
|
-
# treats dates/times the same
|
23
23
|
assert_nil topic.last_read
|
24
24
|
end
|
25
25
|
|
@@ -27,8 +27,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
27
27
|
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "24" }
|
28
28
|
topic = Topic.find(1)
|
29
29
|
topic.attributes = attributes
|
30
|
-
# note that extra #to_date call allows test to pass for Oracle, which
|
31
|
-
# treats dates/times the same
|
32
30
|
assert_nil topic.last_read
|
33
31
|
end
|
34
32
|
|
@@ -36,8 +34,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
36
34
|
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
|
37
35
|
topic = Topic.find(1)
|
38
36
|
topic.attributes = attributes
|
39
|
-
# note that extra #to_date call allows test to pass for Oracle, which
|
40
|
-
# treats dates/times the same
|
41
37
|
assert_nil topic.last_read
|
42
38
|
end
|
43
39
|
|
@@ -45,8 +41,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
45
41
|
attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "" }
|
46
42
|
topic = Topic.find(1)
|
47
43
|
topic.attributes = attributes
|
48
|
-
# note that extra #to_date call allows test to pass for Oracle, which
|
49
|
-
# treats dates/times the same
|
50
44
|
assert_nil topic.last_read
|
51
45
|
end
|
52
46
|
|
@@ -54,8 +48,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
54
48
|
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "" }
|
55
49
|
topic = Topic.find(1)
|
56
50
|
topic.attributes = attributes
|
57
|
-
# note that extra #to_date call allows test to pass for Oracle, which
|
58
|
-
# treats dates/times the same
|
59
51
|
assert_nil topic.last_read
|
60
52
|
end
|
61
53
|
|
@@ -63,8 +55,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
63
55
|
attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "24" }
|
64
56
|
topic = Topic.find(1)
|
65
57
|
topic.attributes = attributes
|
66
|
-
# note that extra #to_date call allows test to pass for Oracle, which
|
67
|
-
# treats dates/times the same
|
68
58
|
assert_nil topic.last_read
|
69
59
|
end
|
70
60
|
|
@@ -237,7 +227,7 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
237
227
|
topic = Topic.find(1)
|
238
228
|
topic.attributes = attributes
|
239
229
|
assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
|
240
|
-
|
230
|
+
assert_not_respond_to topic.written_on, :time_zone
|
241
231
|
end
|
242
232
|
end
|
243
233
|
|
@@ -252,7 +242,7 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
252
242
|
topic = Topic.find(1)
|
253
243
|
topic.attributes = attributes
|
254
244
|
assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
|
255
|
-
|
245
|
+
assert_not_respond_to topic.written_on, :time_zone
|
256
246
|
end
|
257
247
|
ensure
|
258
248
|
Topic.skip_time_zone_conversion_for_attributes = []
|
@@ -271,11 +261,24 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
271
261
|
topic = Topic.find(1)
|
272
262
|
topic.attributes = attributes
|
273
263
|
assert_equal Time.zone.local(2000, 1, 1, 16, 24, 0), topic.bonus_time
|
274
|
-
|
264
|
+
assert_not_predicate topic.bonus_time, :utc?
|
265
|
+
|
266
|
+
attributes = {
|
267
|
+
"written_on(1i)" => "2000", "written_on(2i)" => "", "written_on(3i)" => "",
|
268
|
+
"written_on(4i)" => "", "written_on(5i)" => ""
|
269
|
+
}
|
270
|
+
topic.attributes = attributes
|
271
|
+
assert_nil topic.written_on
|
275
272
|
end
|
276
273
|
ensure
|
277
274
|
Topic.reset_column_information
|
278
275
|
end
|
276
|
+
|
277
|
+
def test_multiparameter_attributes_setting_time_attribute
|
278
|
+
topic = Topic.new("bonus_time(4i)" => "01", "bonus_time(5i)" => "05")
|
279
|
+
assert_equal 1, topic.bonus_time.hour
|
280
|
+
assert_equal 5, topic.bonus_time.min
|
281
|
+
end
|
279
282
|
end
|
280
283
|
|
281
284
|
def test_multiparameter_attributes_on_time_with_empty_seconds
|
@@ -290,16 +293,15 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
290
293
|
end
|
291
294
|
end
|
292
295
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
end
|
296
|
+
def test_multiparameter_attributes_setting_date_attribute
|
297
|
+
topic = Topic.new("written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11")
|
298
|
+
assert_equal 1952, topic.written_on.year
|
299
|
+
assert_equal 3, topic.written_on.month
|
300
|
+
assert_equal 11, topic.written_on.day
|
299
301
|
end
|
300
302
|
|
301
|
-
def
|
302
|
-
topic = Topic.
|
303
|
+
def test_create_with_multiparameter_attributes_setting_date_attribute
|
304
|
+
topic = Topic.create_with("written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11").new
|
303
305
|
assert_equal 1952, topic.written_on.year
|
304
306
|
assert_equal 3, topic.written_on.month
|
305
307
|
assert_equal 11, topic.written_on.day
|
@@ -307,11 +309,25 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
307
309
|
|
308
310
|
def test_multiparameter_attributes_setting_date_and_time_attribute
|
309
311
|
topic = Topic.new(
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
312
|
+
"written_on(1i)" => "1952",
|
313
|
+
"written_on(2i)" => "3",
|
314
|
+
"written_on(3i)" => "11",
|
315
|
+
"written_on(4i)" => "13",
|
316
|
+
"written_on(5i)" => "55")
|
317
|
+
assert_equal 1952, topic.written_on.year
|
318
|
+
assert_equal 3, topic.written_on.month
|
319
|
+
assert_equal 11, topic.written_on.day
|
320
|
+
assert_equal 13, topic.written_on.hour
|
321
|
+
assert_equal 55, topic.written_on.min
|
322
|
+
end
|
323
|
+
|
324
|
+
def test_create_with_multiparameter_attributes_setting_date_and_time_attribute
|
325
|
+
topic = Topic.create_with(
|
326
|
+
"written_on(1i)" => "1952",
|
327
|
+
"written_on(2i)" => "3",
|
328
|
+
"written_on(3i)" => "11",
|
329
|
+
"written_on(4i)" => "13",
|
330
|
+
"written_on(5i)" => "55").new
|
315
331
|
assert_equal 1952, topic.written_on.year
|
316
332
|
assert_equal 3, topic.written_on.month
|
317
333
|
assert_equal 11, topic.written_on.day
|
@@ -320,8 +336,8 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
320
336
|
end
|
321
337
|
|
322
338
|
def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
|
323
|
-
assert_raise(
|
324
|
-
Topic.new(
|
339
|
+
assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
340
|
+
Topic.new("written_on(4i)" => "13", "written_on(5i)" => "55")
|
325
341
|
end
|
326
342
|
end
|
327
343
|
|
@@ -369,4 +385,15 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
|
|
369
385
|
|
370
386
|
assert_equal("address", ex.errors[0].attribute)
|
371
387
|
end
|
388
|
+
|
389
|
+
def test_multiparameter_assigned_attributes_did_not_come_from_user
|
390
|
+
topic = Topic.new(
|
391
|
+
"written_on(1i)" => "1952",
|
392
|
+
"written_on(2i)" => "3",
|
393
|
+
"written_on(3i)" => "11",
|
394
|
+
"written_on(4i)" => "13",
|
395
|
+
"written_on(5i)" => "55",
|
396
|
+
)
|
397
|
+
assert_not_predicate topic, :written_on_came_from_user?
|
398
|
+
end
|
372
399
|
end
|