ibm_db 5.2.0-x86-mingw32 β 5.3.2-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES +9 -0
- data/LICENSE +55 -18
- data/ext/Makefile +15 -13
- data/ext/ibm_db.c +62 -57
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +26 -24
- data/ext/ruby_ibm_db_cli.c +1 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
- data/test/activejob/destroy_association_async_test.rb +305 -0
- data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
- data/test/activejob/helper.rb +15 -0
- data/test/assets/schema_dump_5_1.yml +345 -0
- data/test/cases/adapter_prevent_writes_test.rb +334 -0
- data/test/cases/adapter_test.rb +432 -218
- data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
- data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
- data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
- data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
- data/test/cases/adapters/mysql2/connection_test.rb +48 -50
- data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
- data/test/cases/adapters/mysql2/enum_test.rb +32 -11
- data/test/cases/adapters/mysql2/explain_test.rb +13 -11
- data/test/cases/adapters/mysql2/json_test.rb +17 -188
- data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
- data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
- data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
- data/test/cases/adapters/mysql2/schema_test.rb +24 -22
- data/test/cases/adapters/mysql2/set_test.rb +32 -0
- data/test/cases/adapters/mysql2/sp_test.rb +10 -8
- data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
- data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
- data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
- data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
- data/test/cases/adapters/postgresql/array_test.rb +118 -63
- data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
- data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
- data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
- data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
- data/test/cases/adapters/postgresql/citext_test.rb +58 -58
- data/test/cases/adapters/postgresql/collation_test.rb +17 -15
- data/test/cases/adapters/postgresql/composite_test.rb +25 -23
- data/test/cases/adapters/postgresql/connection_test.rb +73 -85
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
- data/test/cases/adapters/postgresql/date_test.rb +42 -0
- data/test/cases/adapters/postgresql/domain_test.rb +9 -7
- data/test/cases/adapters/postgresql/enum_test.rb +12 -10
- data/test/cases/adapters/postgresql/explain_test.rb +10 -8
- data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
- data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
- data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
- data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
- data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
- data/test/cases/adapters/postgresql/integer_test.rb +2 -0
- data/test/cases/adapters/postgresql/interval_test.rb +99 -0
- data/test/cases/adapters/postgresql/json_test.rb +16 -201
- data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
- data/test/cases/adapters/postgresql/money_test.rb +47 -16
- data/test/cases/adapters/postgresql/network_test.rb +36 -28
- data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
- data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
- data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
- data/test/cases/adapters/postgresql/range_test.rb +406 -292
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
- data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
- data/test/cases/adapters/postgresql/schema_test.rb +207 -91
- data/test/cases/adapters/postgresql/serial_test.rb +9 -7
- data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
- data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
- data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
- data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
- data/test/cases/adapters/postgresql/utils_test.rb +11 -9
- data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
- data/test/cases/adapters/postgresql/xml_test.rb +10 -14
- data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
- data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
- data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
- data/test/cases/adapters/sqlite3/json_test.rb +29 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
- data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
- data/test/cases/aggregations_test.rb +14 -12
- data/test/cases/annotate_test.rb +46 -0
- data/test/cases/ar_schema_test.rb +153 -86
- data/test/cases/arel/attributes/attribute_test.rb +1145 -0
- data/test/cases/arel/attributes/math_test.rb +83 -0
- data/test/cases/arel/attributes_test.rb +27 -0
- data/test/cases/arel/collectors/bind_test.rb +40 -0
- data/test/cases/arel/collectors/composite_test.rb +47 -0
- data/test/cases/arel/collectors/sql_string_test.rb +41 -0
- data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
- data/test/cases/arel/crud_test.rb +65 -0
- data/test/cases/arel/delete_manager_test.rb +53 -0
- data/test/cases/arel/factory_methods_test.rb +46 -0
- data/test/cases/arel/helper.rb +45 -0
- data/test/cases/arel/insert_manager_test.rb +241 -0
- data/test/cases/arel/nodes/and_test.rb +30 -0
- data/test/cases/arel/nodes/as_test.rb +36 -0
- data/test/cases/arel/nodes/ascending_test.rb +46 -0
- data/test/cases/arel/nodes/bin_test.rb +35 -0
- data/test/cases/arel/nodes/binary_test.rb +29 -0
- data/test/cases/arel/nodes/bind_param_test.rb +22 -0
- data/test/cases/arel/nodes/case_test.rb +96 -0
- data/test/cases/arel/nodes/casted_test.rb +18 -0
- data/test/cases/arel/nodes/comment_test.rb +22 -0
- data/test/cases/arel/nodes/count_test.rb +35 -0
- data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
- data/test/cases/arel/nodes/descending_test.rb +46 -0
- data/test/cases/arel/nodes/distinct_test.rb +21 -0
- data/test/cases/arel/nodes/equality_test.rb +62 -0
- data/test/cases/arel/nodes/extract_test.rb +43 -0
- data/test/cases/arel/nodes/false_test.rb +21 -0
- data/test/cases/arel/nodes/grouping_test.rb +26 -0
- data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
- data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
- data/test/cases/arel/nodes/named_function_test.rb +48 -0
- data/test/cases/arel/nodes/node_test.rb +22 -0
- data/test/cases/arel/nodes/not_test.rb +31 -0
- data/test/cases/arel/nodes/or_test.rb +36 -0
- data/test/cases/arel/nodes/over_test.rb +69 -0
- data/test/cases/arel/nodes/select_core_test.rb +79 -0
- data/test/cases/arel/nodes/select_statement_test.rb +51 -0
- data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
- data/test/cases/arel/nodes/sum_test.rb +35 -0
- data/test/cases/arel/nodes/table_alias_test.rb +29 -0
- data/test/cases/arel/nodes/true_test.rb +21 -0
- data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
- data/test/cases/arel/nodes/update_statement_test.rb +60 -0
- data/test/cases/arel/nodes/window_test.rb +81 -0
- data/test/cases/arel/nodes_test.rb +34 -0
- data/test/cases/arel/select_manager_test.rb +1238 -0
- data/test/cases/arel/support/fake_record.rb +135 -0
- data/test/cases/arel/table_test.rb +216 -0
- data/test/cases/arel/update_manager_test.rb +126 -0
- data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
- data/test/cases/arel/visitors/dot_test.rb +90 -0
- data/test/cases/arel/visitors/mysql_test.rb +157 -0
- data/test/cases/arel/visitors/postgres_test.rb +366 -0
- data/test/cases/arel/visitors/sqlite_test.rb +75 -0
- data/test/cases/arel/visitors/to_sql_test.rb +750 -0
- data/test/cases/associations/belongs_to_associations_test.rb +510 -158
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
- data/test/cases/associations/callbacks_test.rb +56 -38
- data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
- data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
- data/test/cases/associations/eager_singularization_test.rb +21 -21
- data/test/cases/associations/eager_test.rb +559 -415
- data/test/cases/associations/extension_test.rb +18 -12
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
- data/test/cases/associations/has_many_associations_test.rb +1038 -465
- data/test/cases/associations/has_many_through_associations_test.rb +558 -249
- data/test/cases/associations/has_one_associations_test.rb +294 -129
- data/test/cases/associations/has_one_through_associations_test.rb +121 -75
- data/test/cases/associations/inner_join_association_test.rb +114 -38
- data/test/cases/associations/inverse_associations_test.rb +606 -398
- data/test/cases/associations/join_model_test.rb +158 -148
- data/test/cases/associations/left_outer_join_association_test.rb +59 -24
- data/test/cases/associations/nested_through_associations_test.rb +166 -109
- data/test/cases/associations/required_test.rb +35 -10
- data/test/cases/associations_test.rb +241 -110
- data/test/cases/attribute_methods/read_test.rb +11 -11
- data/test/cases/attribute_methods_test.rb +413 -298
- data/test/cases/attributes_test.rb +145 -27
- data/test/cases/autosave_association_test.rb +681 -436
- data/test/cases/base_prevent_writes_test.rb +229 -0
- data/test/cases/base_test.rb +599 -542
- data/test/cases/batches_test.rb +288 -82
- data/test/cases/binary_test.rb +26 -31
- data/test/cases/bind_parameter_test.rb +194 -21
- data/test/cases/boolean_test.rb +52 -0
- data/test/cases/cache_key_test.rb +110 -5
- data/test/cases/calculations_test.rb +740 -177
- data/test/cases/callbacks_test.rb +74 -207
- data/test/cases/clone_test.rb +15 -10
- data/test/cases/coders/json_test.rb +2 -0
- data/test/cases/coders/yaml_column_test.rb +16 -13
- data/test/cases/collection_cache_key_test.rb +177 -20
- data/test/cases/column_alias_test.rb +9 -7
- data/test/cases/column_definition_test.rb +10 -68
- data/test/cases/comment_test.rb +166 -107
- data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
- data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
- data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
- data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
- data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
- data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
- data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
- data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
- data/test/cases/connection_management_test.rb +13 -11
- data/test/cases/connection_pool_test.rb +316 -83
- data/test/cases/core_test.rb +82 -58
- data/test/cases/counter_cache_test.rb +204 -50
- data/test/cases/custom_locking_test.rb +5 -3
- data/test/cases/database_configurations/hash_config_test.rb +74 -0
- data/test/cases/database_configurations/resolver_test.rb +150 -0
- data/test/cases/database_configurations_test.rb +145 -0
- data/test/cases/database_selector_test.rb +296 -0
- data/test/cases/database_statements_test.rb +18 -16
- data/test/cases/date_test.rb +8 -16
- data/test/cases/date_time_precision_test.rb +100 -78
- data/test/cases/date_time_test.rb +23 -8
- data/test/cases/defaults_test.rb +106 -71
- data/test/cases/delegated_type_test.rb +57 -0
- data/test/cases/dirty_test.rb +419 -223
- data/test/cases/disconnected_test.rb +6 -6
- data/test/cases/dup_test.rb +54 -27
- data/test/cases/enum_test.rb +461 -82
- data/test/cases/errors_test.rb +7 -7
- data/test/cases/explain_subscriber_test.rb +17 -15
- data/test/cases/explain_test.rb +11 -19
- data/test/cases/filter_attributes_test.rb +153 -0
- data/test/cases/finder_respond_to_test.rb +14 -14
- data/test/cases/finder_test.rb +669 -287
- data/test/cases/fixture_set/file_test.rb +34 -38
- data/test/cases/fixtures_test.rb +833 -176
- data/test/cases/forbidden_attributes_protection_test.rb +32 -67
- data/test/cases/habtm_destroy_order_test.rb +25 -25
- data/test/cases/helper.rb +78 -49
- data/test/cases/hot_compatibility_test.rb +33 -32
- data/test/cases/i18n_test.rb +18 -17
- data/test/cases/inheritance_test.rb +180 -115
- data/test/cases/insert_all_test.rb +489 -0
- data/test/cases/instrumentation_test.rb +101 -0
- data/test/cases/integration_test.rb +119 -31
- data/test/cases/invalid_connection_test.rb +18 -16
- data/test/cases/invertible_migration_test.rb +183 -43
- data/test/cases/json_attribute_test.rb +35 -0
- data/test/cases/json_serialization_test.rb +57 -58
- data/test/cases/json_shared_test_cases.rb +290 -0
- data/test/cases/locking_test.rb +413 -119
- data/test/cases/log_subscriber_test.rb +68 -26
- data/test/cases/marshal_serialization_test.rb +39 -0
- data/test/cases/migration/change_schema_test.rb +118 -72
- data/test/cases/migration/change_table_test.rb +138 -30
- data/test/cases/migration/check_constraint_test.rb +162 -0
- data/test/cases/migration/column_attributes_test.rb +45 -35
- data/test/cases/migration/column_positioning_test.rb +18 -6
- data/test/cases/migration/columns_test.rb +93 -77
- data/test/cases/migration/command_recorder_test.rb +121 -34
- data/test/cases/migration/compatibility_test.rb +578 -23
- data/test/cases/migration/create_join_table_test.rb +35 -25
- data/test/cases/migration/foreign_key_test.rb +503 -284
- data/test/cases/migration/helper.rb +4 -3
- data/test/cases/migration/index_test.rb +119 -70
- data/test/cases/migration/logger_test.rb +9 -6
- data/test/cases/migration/pending_migrations_test.rb +88 -34
- data/test/cases/migration/references_foreign_key_test.rb +164 -150
- data/test/cases/migration/references_index_test.rb +38 -19
- data/test/cases/migration/references_statements_test.rb +15 -14
- data/test/cases/migration/rename_table_test.rb +53 -30
- data/test/cases/migration_test.rb +637 -269
- data/test/cases/migrator_test.rb +191 -135
- data/test/cases/mixin_test.rb +7 -11
- data/test/cases/modules_test.rb +36 -34
- data/test/cases/multi_db_migrator_test.rb +223 -0
- data/test/cases/multiparameter_attributes_test.rb +60 -33
- data/test/cases/multiple_db_test.rb +16 -22
- data/test/cases/nested_attributes_test.rb +341 -320
- data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
- data/test/cases/null_relation_test.rb +84 -0
- data/test/cases/numeric_data_test.rb +93 -0
- data/test/cases/persistence_test.rb +361 -269
- data/test/cases/pooled_connections_test.rb +18 -26
- data/test/cases/prepared_statement_status_test.rb +48 -0
- data/test/cases/primary_keys_test.rb +210 -104
- data/test/cases/query_cache_test.rb +610 -141
- data/test/cases/quoting_test.rb +132 -31
- data/test/cases/readonly_test.rb +49 -48
- data/test/cases/reaper_test.rb +146 -32
- data/test/cases/reflection_test.rb +167 -156
- data/test/cases/relation/delegation_test.rb +49 -36
- data/test/cases/relation/delete_all_test.rb +117 -0
- data/test/cases/relation/merging_test.rb +319 -42
- data/test/cases/relation/mutation_test.rb +55 -93
- data/test/cases/relation/or_test.rb +129 -29
- data/test/cases/relation/predicate_builder_test.rb +21 -6
- data/test/cases/relation/record_fetch_warning_test.rb +5 -3
- data/test/cases/relation/select_test.rb +67 -0
- data/test/cases/relation/update_all_test.rb +317 -0
- data/test/cases/relation/where_chain_test.rb +68 -32
- data/test/cases/relation/where_clause_test.rb +136 -61
- data/test/cases/relation/where_test.rb +155 -48
- data/test/cases/relation_test.rb +266 -112
- data/test/cases/relations_test.rb +969 -744
- data/test/cases/reload_models_test.rb +13 -9
- data/test/cases/reserved_word_test.rb +141 -0
- data/test/cases/result_test.rb +68 -17
- data/test/cases/sanitize_test.rb +87 -71
- data/test/cases/schema_dumper_test.rb +221 -128
- data/test/cases/schema_loading_test.rb +3 -2
- data/test/cases/scoping/default_scoping_test.rb +185 -144
- data/test/cases/scoping/named_scoping_test.rb +177 -89
- data/test/cases/scoping/relation_scoping_test.rb +197 -75
- data/test/cases/secure_token_test.rb +18 -3
- data/test/cases/serialization_test.rb +30 -28
- data/test/cases/serialized_attribute_test.rb +133 -42
- data/test/cases/signed_id_test.rb +168 -0
- data/test/cases/statement_cache_test.rb +41 -24
- data/test/cases/statement_invalid_test.rb +42 -0
- data/test/cases/store_test.rb +180 -55
- data/test/cases/strict_loading_test.rb +473 -0
- data/test/cases/suppressor_test.rb +26 -12
- data/test/cases/tasks/database_tasks_test.rb +1258 -194
- data/test/cases/tasks/mysql_rake_test.rb +370 -298
- data/test/cases/tasks/postgresql_rake_test.rb +481 -251
- data/test/cases/tasks/sqlite_rake_test.rb +225 -178
- data/test/cases/test_case.rb +51 -40
- data/test/cases/test_databases_test.rb +79 -0
- data/test/cases/test_fixtures_test.rb +79 -19
- data/test/cases/time_precision_test.rb +98 -76
- data/test/cases/timestamp_test.rb +102 -99
- data/test/cases/touch_later_test.rb +12 -10
- data/test/cases/transaction_callbacks_test.rb +344 -90
- data/test/cases/transaction_isolation_test.rb +12 -12
- data/test/cases/transactions_test.rb +612 -162
- data/test/cases/type/adapter_specific_registry_test.rb +14 -2
- data/test/cases/type/date_time_test.rb +4 -2
- data/test/cases/type/integer_test.rb +4 -2
- data/test/cases/type/string_test.rb +10 -8
- data/test/cases/type/time_test.rb +28 -0
- data/test/cases/type/type_map_test.rb +29 -28
- data/test/cases/type/unsigned_integer_test.rb +19 -0
- data/test/cases/type_test.rb +2 -0
- data/test/cases/types_test.rb +3 -1
- data/test/cases/unconnected_test.rb +14 -1
- data/test/cases/unsafe_raw_sql_test.rb +274 -0
- data/test/cases/validations/absence_validation_test.rb +19 -17
- data/test/cases/validations/association_validation_test.rb +30 -28
- data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
- data/test/cases/validations/i18n_validation_test.rb +22 -21
- data/test/cases/validations/length_validation_test.rb +34 -33
- data/test/cases/validations/numericality_validation_test.rb +181 -0
- data/test/cases/validations/presence_validation_test.rb +21 -19
- data/test/cases/validations/uniqueness_validation_test.rb +156 -86
- data/test/cases/validations_repair_helper.rb +2 -0
- data/test/cases/validations_test.rb +61 -26
- data/test/cases/view_test.rb +122 -116
- data/test/cases/yaml_serialization_test.rb +79 -34
- data/test/config.example.yml +19 -19
- data/test/config.rb +3 -1
- data/test/config.yml +16 -6
- data/test/fixtures/all/namespaced/accounts.yml +2 -0
- data/test/fixtures/author_addresses.yml +1 -8
- data/test/fixtures/authors.yml +1 -7
- data/test/fixtures/binaries.yml +4 -0
- data/test/fixtures/books.yml +9 -2
- data/test/fixtures/categories_posts.yml +3 -0
- data/test/fixtures/citations.yml +5 -0
- data/test/fixtures/comments.yml +7 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/computers.yml +2 -0
- data/test/fixtures/customers.yml +10 -1
- data/test/fixtures/developers.yml +1 -1
- data/test/fixtures/essays.yml +10 -0
- data/test/fixtures/faces.yml +3 -3
- data/test/fixtures/humans.yml +5 -0
- data/test/fixtures/interests.yml +7 -7
- data/test/fixtures/memberships.yml +7 -0
- data/test/fixtures/minimalistics.yml +3 -0
- data/test/fixtures/mixed_case_monkeys.yml +2 -2
- data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
- data/test/fixtures/naked/yml/parrots.yml +1 -0
- data/test/fixtures/other_books.yml +26 -0
- data/test/fixtures/other_posts.yml +1 -0
- data/test/fixtures/parrots.yml +7 -1
- data/test/fixtures/pirates.yml +3 -0
- data/test/fixtures/posts.yml +11 -3
- data/test/fixtures/readers.yml +6 -0
- data/test/fixtures/reserved_words/values.yml +2 -2
- data/test/fixtures/sponsors.yml +3 -0
- data/test/fixtures/strict_zines.yml +2 -0
- data/test/fixtures/subscribers.yml +1 -1
- data/test/fixtures/tasks.yml +1 -1
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +2 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
- data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
- data/test/migrations/missing/1_people_have_last_names.rb +2 -0
- data/test/migrations/missing/3_we_need_reminders.rb +2 -0
- data/test/migrations/missing/4_innocent_jointable.rb +3 -1
- data/test/migrations/rename/1_we_need_things.rb +2 -0
- data/test/migrations/rename/2_rename_things.rb +2 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy2/1_create_articles.rb +2 -0
- data/test/migrations/to_copy2/2_create_comments.rb +3 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
- data/test/models/account.rb +46 -0
- data/test/models/admin/account.rb +3 -1
- data/test/models/admin/randomly_named_c1.rb +2 -0
- data/test/models/admin/user.rb +16 -8
- data/test/models/admin.rb +4 -2
- data/test/models/aircraft.rb +3 -1
- data/test/models/arunit2_model.rb +2 -0
- data/test/models/author.rb +153 -102
- data/test/models/auto_id.rb +2 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +3 -1
- data/test/models/binary_field.rb +6 -0
- data/test/models/bird.rb +13 -1
- data/test/models/book.rb +14 -4
- data/test/models/book_destroy_async.rb +24 -0
- data/test/models/boolean.rb +5 -0
- data/test/models/bulb.rb +13 -4
- data/test/models/cake_designer.rb +2 -0
- data/test/models/car.rb +17 -10
- data/test/models/carrier.rb +2 -0
- data/test/models/cart.rb +5 -0
- data/test/models/cat.rb +2 -0
- data/test/models/categorization.rb +8 -6
- data/test/models/category.rb +28 -16
- data/test/models/chef.rb +2 -0
- data/test/models/citation.rb +5 -1
- data/test/models/club.rb +13 -10
- data/test/models/college.rb +4 -2
- data/test/models/column.rb +2 -0
- data/test/models/column_name.rb +2 -0
- data/test/models/comment.rb +32 -10
- data/test/models/company.rb +102 -106
- data/test/models/company_in_module.rb +27 -26
- data/test/models/computer.rb +3 -1
- data/test/models/contact.rb +15 -13
- data/test/models/content.rb +5 -3
- data/test/models/contract.rb +21 -3
- data/test/models/country.rb +2 -4
- data/test/models/course.rb +3 -1
- data/test/models/customer.rb +10 -8
- data/test/models/customer_carrier.rb +2 -0
- data/test/models/dashboard.rb +2 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +2 -0
- data/test/models/destroy_async_parent.rb +15 -0
- data/test/models/destroy_async_parent_soft_delete.rb +20 -0
- data/test/models/developer.rb +152 -85
- data/test/models/dl_keyed_belongs_to.rb +13 -0
- data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
- data/test/models/dl_keyed_has_many.rb +5 -0
- data/test/models/dl_keyed_has_many_through.rb +5 -0
- data/test/models/dl_keyed_has_one.rb +5 -0
- data/test/models/dl_keyed_join.rb +10 -0
- data/test/models/dog.rb +2 -0
- data/test/models/dog_lover.rb +2 -0
- data/test/models/doubloon.rb +3 -1
- data/test/models/drink_designer.rb +17 -0
- data/test/models/edge.rb +4 -2
- data/test/models/electron.rb +2 -0
- data/test/models/engine.rb +3 -2
- data/test/models/entrant.rb +2 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +6 -3
- data/test/models/essay_destroy_async.rb +12 -0
- data/test/models/event.rb +3 -1
- data/test/models/eye.rb +5 -3
- data/test/models/face.rb +14 -6
- data/test/models/family.rb +6 -0
- data/test/models/family_tree.rb +6 -0
- data/test/models/friendship.rb +5 -3
- data/test/models/frog.rb +8 -0
- data/test/models/guid.rb +3 -1
- data/test/models/guitar.rb +2 -0
- data/test/models/hotel.rb +5 -3
- data/test/models/human.rb +39 -0
- data/test/models/image.rb +3 -1
- data/test/models/interest.rb +14 -3
- data/test/models/invoice.rb +4 -2
- data/test/models/item.rb +3 -1
- data/test/models/job.rb +5 -3
- data/test/models/joke.rb +4 -2
- data/test/models/keyboard.rb +3 -1
- data/test/models/legacy_thing.rb +2 -0
- data/test/models/lesson.rb +2 -0
- data/test/models/line_item.rb +3 -1
- data/test/models/liquid.rb +2 -0
- data/test/models/matey.rb +3 -1
- data/test/models/measurement.rb +4 -0
- data/test/models/member.rb +23 -20
- data/test/models/member_detail.rb +3 -0
- data/test/models/member_type.rb +2 -0
- data/test/models/membership.rb +4 -1
- data/test/models/mentor.rb +3 -1
- data/test/models/message.rb +5 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +3 -2
- data/test/models/mixed_case_monkey.rb +3 -1
- data/test/models/molecule.rb +2 -0
- data/test/models/mouse.rb +6 -0
- data/test/models/movie.rb +2 -0
- data/test/models/node.rb +4 -2
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +2 -0
- data/test/models/numeric_data.rb +12 -0
- data/test/models/order.rb +4 -2
- data/test/models/organization.rb +9 -7
- data/test/models/other_dog.rb +3 -1
- data/test/models/owner.rb +6 -4
- data/test/models/parrot.rb +12 -4
- data/test/models/person.rb +59 -54
- data/test/models/personal_legacy_thing.rb +3 -1
- data/test/models/pet.rb +4 -2
- data/test/models/pet_treasure.rb +2 -0
- data/test/models/pirate.rb +67 -43
- data/test/models/possession.rb +3 -1
- data/test/models/post.rb +184 -86
- data/test/models/price_estimate.rb +11 -1
- data/test/models/professor.rb +3 -1
- data/test/models/project.rb +14 -12
- data/test/models/publisher/article.rb +2 -0
- data/test/models/publisher/magazine.rb +2 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/randomly_named_c1.rb +2 -0
- data/test/models/rating.rb +5 -1
- data/test/models/reader.rb +7 -5
- data/test/models/recipe.rb +2 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +6 -3
- data/test/models/reply.rb +39 -21
- data/test/models/room.rb +6 -0
- data/test/models/section.rb +6 -0
- data/test/models/seminar.rb +6 -0
- data/test/models/session.rb +6 -0
- data/test/models/ship.rb +12 -9
- data/test/models/ship_part.rb +5 -3
- data/test/models/shop.rb +4 -2
- data/test/models/shop_account.rb +2 -0
- data/test/models/speedometer.rb +2 -0
- data/test/models/sponsor.rb +8 -5
- data/test/models/squeak.rb +6 -0
- data/test/models/strict_zine.rb +7 -0
- data/test/models/string_key_object.rb +2 -0
- data/test/models/student.rb +2 -0
- data/test/models/subscriber.rb +4 -2
- data/test/models/subscription.rb +5 -1
- data/test/models/tag.rb +6 -3
- data/test/models/tagging.rb +13 -6
- data/test/models/task.rb +2 -0
- data/test/models/topic.rb +54 -19
- data/test/models/toy.rb +4 -0
- data/test/models/traffic_light.rb +2 -0
- data/test/models/treasure.rb +5 -3
- data/test/models/treaty.rb +2 -4
- data/test/models/tree.rb +2 -0
- data/test/models/tuning_peg.rb +2 -0
- data/test/models/tyre.rb +2 -0
- data/test/models/user.rb +12 -4
- data/test/models/uuid_child.rb +2 -0
- data/test/models/uuid_item.rb +2 -0
- data/test/models/uuid_parent.rb +2 -0
- data/test/models/vegetables.rb +12 -3
- data/test/models/vertex.rb +6 -4
- data/test/models/warehouse_thing.rb +2 -0
- data/test/models/wheel.rb +3 -1
- data/test/models/without_table.rb +3 -1
- data/test/models/zine.rb +3 -1
- data/test/schema/mysql2_specific_schema.rb +49 -35
- data/test/schema/oracle_specific_schema.rb +13 -15
- data/test/schema/postgresql_specific_schema.rb +51 -40
- data/test/schema/schema.rb +334 -154
- data/test/schema/sqlite_specific_schema.rb +9 -16
- data/test/support/config.rb +26 -26
- data/test/support/connection.rb +14 -8
- data/test/support/connection_helper.rb +3 -1
- data/test/support/ddl_helper.rb +2 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
- data/test/support/schema_dumping_helper.rb +2 -0
- data/test/support/stubs/strong_parameters.rb +40 -0
- data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
- data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
- metadata +190 -14
data/test/cases/enum_test.rb
CHANGED
@@ -1,31 +1,37 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/author"
|
5
|
+
require "models/book"
|
6
|
+
require "active_support/log_subscriber/test_helper"
|
3
7
|
|
4
8
|
class EnumTest < ActiveRecord::TestCase
|
5
|
-
fixtures :books
|
9
|
+
fixtures :books, :authors, :author_addresses
|
6
10
|
|
7
11
|
setup do
|
8
12
|
@book = books(:awdr)
|
9
13
|
end
|
10
14
|
|
11
15
|
test "query state by predicate" do
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
assert_predicate @book, :published?
|
17
|
+
assert_not_predicate @book, :written?
|
18
|
+
assert_not_predicate @book, :proposed?
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
assert_predicate @book, :read?
|
21
|
+
assert_predicate @book, :in_english?
|
22
|
+
assert_predicate @book, :author_visibility_visible?
|
23
|
+
assert_predicate @book, :illustrator_visibility_visible?
|
24
|
+
assert_predicate @book, :with_medium_font_size?
|
25
|
+
assert_predicate @book, :medium_to_read?
|
21
26
|
end
|
22
27
|
|
23
28
|
test "query state with strings" do
|
24
29
|
assert_equal "published", @book.status
|
25
|
-
assert_equal "read", @book.
|
30
|
+
assert_equal "read", @book.last_read
|
26
31
|
assert_equal "english", @book.language
|
27
32
|
assert_equal "visible", @book.author_visibility
|
28
33
|
assert_equal "visible", @book.illustrator_visibility
|
34
|
+
assert_equal "medium", @book.difficulty
|
29
35
|
end
|
30
36
|
|
31
37
|
test "find via scope" do
|
@@ -34,6 +40,14 @@ class EnumTest < ActiveRecord::TestCase
|
|
34
40
|
assert_equal @book, Book.in_english.first
|
35
41
|
assert_equal @book, Book.author_visibility_visible.first
|
36
42
|
assert_equal @book, Book.illustrator_visibility_visible.first
|
43
|
+
assert_equal @book, Book.medium_to_read.first
|
44
|
+
assert_equal books(:ddd), Book.forgotten.first
|
45
|
+
assert_equal books(:rfr), authors(:david).unpublished_books.first
|
46
|
+
end
|
47
|
+
|
48
|
+
test "find via negative scope" do
|
49
|
+
assert Book.not_published.exclude?(@book)
|
50
|
+
assert Book.not_proposed.include?(@book)
|
37
51
|
end
|
38
52
|
|
39
53
|
test "find via where with values" do
|
@@ -41,71 +55,84 @@ class EnumTest < ActiveRecord::TestCase
|
|
41
55
|
|
42
56
|
assert_equal @book, Book.where(status: published).first
|
43
57
|
assert_not_equal @book, Book.where(status: written).first
|
44
|
-
assert_equal @book, Book.where(status: [published]).first
|
45
|
-
assert_not_equal @book, Book.where(status: [written]).first
|
46
|
-
assert_not_equal @book, Book.where(
|
47
|
-
assert_equal @book, Book.where(
|
58
|
+
assert_equal @book, Book.where(status: [published, published]).first
|
59
|
+
assert_not_equal @book, Book.where(status: [written, written]).first
|
60
|
+
assert_not_equal @book, Book.where.not(status: published).first
|
61
|
+
assert_equal @book, Book.where.not(status: written).first
|
62
|
+
end
|
63
|
+
|
64
|
+
test "find via where with values.to_s" do
|
65
|
+
published, written = Book.statuses[:published].to_s, Book.statuses[:written].to_s
|
66
|
+
|
67
|
+
assert_equal @book, Book.where(status: published).first
|
68
|
+
assert_not_equal @book, Book.where(status: written).first
|
69
|
+
assert_equal @book, Book.where(status: [published, published]).first
|
70
|
+
assert_not_equal @book, Book.where(status: [written, written]).first
|
71
|
+
assert_not_equal @book, Book.where.not(status: published).first
|
72
|
+
assert_equal @book, Book.where.not(status: written).first
|
48
73
|
end
|
49
74
|
|
50
75
|
test "find via where with symbols" do
|
51
76
|
assert_equal @book, Book.where(status: :published).first
|
52
77
|
assert_not_equal @book, Book.where(status: :written).first
|
53
|
-
assert_equal @book, Book.where(status: [:published]).first
|
54
|
-
assert_not_equal @book, Book.where(status: [:written]).first
|
78
|
+
assert_equal @book, Book.where(status: [:published, :published]).first
|
79
|
+
assert_not_equal @book, Book.where(status: [:written, :written]).first
|
55
80
|
assert_not_equal @book, Book.where.not(status: :published).first
|
56
81
|
assert_equal @book, Book.where.not(status: :written).first
|
82
|
+
assert_equal books(:ddd), Book.where(last_read: :forgotten).first
|
57
83
|
end
|
58
84
|
|
59
85
|
test "find via where with strings" do
|
60
86
|
assert_equal @book, Book.where(status: "published").first
|
61
87
|
assert_not_equal @book, Book.where(status: "written").first
|
62
|
-
assert_equal @book, Book.where(status: ["published"]).first
|
63
|
-
assert_not_equal @book, Book.where(status: ["written"]).first
|
88
|
+
assert_equal @book, Book.where(status: ["published", "published"]).first
|
89
|
+
assert_not_equal @book, Book.where(status: ["written", "written"]).first
|
64
90
|
assert_not_equal @book, Book.where.not(status: "published").first
|
65
91
|
assert_equal @book, Book.where.not(status: "written").first
|
92
|
+
assert_equal books(:ddd), Book.where(last_read: "forgotten").first
|
66
93
|
end
|
67
94
|
|
68
95
|
test "build from scope" do
|
69
|
-
|
70
|
-
|
96
|
+
assert_predicate Book.written.build, :written?
|
97
|
+
assert_not_predicate Book.written.build, :proposed?
|
71
98
|
end
|
72
99
|
|
73
100
|
test "build from where" do
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
101
|
+
assert_predicate Book.where(status: Book.statuses[:written]).build, :written?
|
102
|
+
assert_not_predicate Book.where(status: Book.statuses[:written]).build, :proposed?
|
103
|
+
assert_predicate Book.where(status: :written).build, :written?
|
104
|
+
assert_not_predicate Book.where(status: :written).build, :proposed?
|
105
|
+
assert_predicate Book.where(status: "written").build, :written?
|
106
|
+
assert_not_predicate Book.where(status: "written").build, :proposed?
|
80
107
|
end
|
81
108
|
|
82
109
|
test "update by declaration" do
|
83
110
|
@book.written!
|
84
|
-
|
111
|
+
assert_predicate @book, :written?
|
85
112
|
@book.in_english!
|
86
|
-
|
113
|
+
assert_predicate @book, :in_english?
|
87
114
|
@book.author_visibility_visible!
|
88
|
-
|
115
|
+
assert_predicate @book, :author_visibility_visible?
|
89
116
|
end
|
90
117
|
|
91
118
|
test "update by setter" do
|
92
119
|
@book.update! status: :written
|
93
|
-
|
120
|
+
assert_predicate @book, :written?
|
94
121
|
end
|
95
122
|
|
96
123
|
test "enum methods are overwritable" do
|
97
124
|
assert_equal "do publish work...", @book.published!
|
98
|
-
|
125
|
+
assert_predicate @book, :published?
|
99
126
|
end
|
100
127
|
|
101
128
|
test "direct assignment" do
|
102
129
|
@book.status = :written
|
103
|
-
|
130
|
+
assert_predicate @book, :written?
|
104
131
|
end
|
105
132
|
|
106
133
|
test "assign string value" do
|
107
134
|
@book.status = "written"
|
108
|
-
|
135
|
+
assert_predicate @book, :written?
|
109
136
|
end
|
110
137
|
|
111
138
|
test "enum changed attributes" do
|
@@ -117,13 +144,23 @@ class EnumTest < ActiveRecord::TestCase
|
|
117
144
|
assert_equal old_language, @book.changed_attributes[:language]
|
118
145
|
end
|
119
146
|
|
147
|
+
test "enum value after write symbol" do
|
148
|
+
@book.status = :proposed
|
149
|
+
assert_equal "proposed", @book.status
|
150
|
+
end
|
151
|
+
|
152
|
+
test "enum value after write string" do
|
153
|
+
@book.status = "proposed"
|
154
|
+
assert_equal "proposed", @book.status
|
155
|
+
end
|
156
|
+
|
120
157
|
test "enum changes" do
|
121
158
|
old_status = @book.status
|
122
159
|
old_language = @book.language
|
123
160
|
@book.status = :proposed
|
124
161
|
@book.language = :spanish
|
125
|
-
assert_equal [old_status,
|
126
|
-
assert_equal [old_language,
|
162
|
+
assert_equal [old_status, "proposed"], @book.changes[:status]
|
163
|
+
assert_equal [old_language, "spanish"], @book.changes[:language]
|
127
164
|
end
|
128
165
|
|
129
166
|
test "enum attribute was" do
|
@@ -145,8 +182,8 @@ class EnumTest < ActiveRecord::TestCase
|
|
145
182
|
test "enum attribute changed to" do
|
146
183
|
@book.status = :proposed
|
147
184
|
@book.language = :french
|
148
|
-
assert @book.attribute_changed?(:status, to:
|
149
|
-
assert @book.attribute_changed?(:language, to:
|
185
|
+
assert @book.attribute_changed?(:status, to: "proposed")
|
186
|
+
assert @book.attribute_changed?(:language, to: "french")
|
150
187
|
end
|
151
188
|
|
152
189
|
test "enum attribute changed from" do
|
@@ -163,8 +200,8 @@ class EnumTest < ActiveRecord::TestCase
|
|
163
200
|
old_language = @book.language
|
164
201
|
@book.status = :proposed
|
165
202
|
@book.language = :french
|
166
|
-
assert @book.attribute_changed?(:status, from: old_status, to:
|
167
|
-
assert @book.attribute_changed?(:language, from: old_language, to:
|
203
|
+
assert @book.attribute_changed?(:status, from: old_status, to: "proposed")
|
204
|
+
assert @book.attribute_changed?(:language, from: old_language, to: "french")
|
168
205
|
end
|
169
206
|
|
170
207
|
test "enum didn't change" do
|
@@ -210,18 +247,37 @@ class EnumTest < ActiveRecord::TestCase
|
|
210
247
|
assert_nil @book.reload.status
|
211
248
|
end
|
212
249
|
|
250
|
+
test "deserialize nil value to enum which defines nil value to hash" do
|
251
|
+
assert_equal "forgotten", books(:ddd).last_read
|
252
|
+
end
|
253
|
+
|
213
254
|
test "assign nil value" do
|
214
255
|
@book.status = nil
|
215
256
|
assert_nil @book.status
|
216
257
|
end
|
217
258
|
|
259
|
+
test "assign nil value to enum which defines nil value to hash" do
|
260
|
+
@book.last_read = nil
|
261
|
+
assert_equal "forgotten", @book.last_read
|
262
|
+
end
|
263
|
+
|
218
264
|
test "assign empty string value" do
|
219
|
-
@book.status =
|
265
|
+
@book.status = ""
|
220
266
|
assert_nil @book.status
|
221
267
|
end
|
222
268
|
|
269
|
+
test "assign false value to a field defined as not boolean" do
|
270
|
+
@book.status = false
|
271
|
+
assert_nil @book.status
|
272
|
+
end
|
273
|
+
|
274
|
+
test "assign false value to a field defined as boolean" do
|
275
|
+
@book.boolean_status = false
|
276
|
+
assert_equal "disabled", @book.boolean_status
|
277
|
+
end
|
278
|
+
|
223
279
|
test "assign long empty string value" do
|
224
|
-
@book.status =
|
280
|
+
@book.status = " "
|
225
281
|
assert_nil @book.status
|
226
282
|
end
|
227
283
|
|
@@ -232,25 +288,66 @@ class EnumTest < ActiveRecord::TestCase
|
|
232
288
|
end
|
233
289
|
|
234
290
|
test "building new objects with enum scopes" do
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
291
|
+
assert_predicate Book.written.build, :written?
|
292
|
+
assert_predicate Book.read.build, :read?
|
293
|
+
assert_predicate Book.in_spanish.build, :in_spanish?
|
294
|
+
assert_predicate Book.illustrator_visibility_invisible.build, :illustrator_visibility_invisible?
|
239
295
|
end
|
240
296
|
|
241
297
|
test "creating new objects with enum scopes" do
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
298
|
+
assert_predicate Book.written.create, :written?
|
299
|
+
assert_predicate Book.read.create, :read?
|
300
|
+
assert_predicate Book.in_spanish.create, :in_spanish?
|
301
|
+
assert_predicate Book.illustrator_visibility_invisible.create, :illustrator_visibility_invisible?
|
246
302
|
end
|
247
303
|
|
248
|
-
test "
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
304
|
+
test "attribute_before_type_cast" do
|
305
|
+
assert_equal 2, @book.status_before_type_cast
|
306
|
+
assert_equal "published", @book.status
|
307
|
+
|
308
|
+
@book.status = "published"
|
309
|
+
|
310
|
+
assert_equal "published", @book.status_before_type_cast
|
311
|
+
assert_equal "published", @book.status
|
312
|
+
end
|
313
|
+
|
314
|
+
test "attribute_for_database" do
|
315
|
+
assert_equal 2, @book.status_for_database
|
316
|
+
assert_equal "published", @book.status
|
317
|
+
|
318
|
+
@book.status = "published"
|
319
|
+
|
320
|
+
assert_equal 2, @book.status_for_database
|
321
|
+
assert_equal "published", @book.status
|
322
|
+
end
|
323
|
+
|
324
|
+
test "invalid definition values raise an ArgumentError" do
|
325
|
+
e = assert_raises(ArgumentError) do
|
326
|
+
Class.new(ActiveRecord::Base) do
|
327
|
+
self.table_name = "books"
|
328
|
+
enum status: [proposed: 1, written: 2, published: 3]
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
assert_match(/must be either a hash, an array of symbols, or an array of strings./, e.message)
|
333
|
+
|
334
|
+
e = assert_raises(ArgumentError) do
|
335
|
+
Class.new(ActiveRecord::Base) do
|
336
|
+
self.table_name = "books"
|
337
|
+
enum status: { "" => 1, "active" => 2 }
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
assert_match(/Enum label name must not be blank/, e.message)
|
342
|
+
|
343
|
+
e = assert_raises(ArgumentError) do
|
344
|
+
Class.new(ActiveRecord::Base) do
|
345
|
+
self.table_name = "books"
|
346
|
+
enum status: ["active", ""]
|
347
|
+
end
|
253
348
|
end
|
349
|
+
|
350
|
+
assert_match(/Enum label name must not be blank/, e.message)
|
254
351
|
end
|
255
352
|
|
256
353
|
test "reserved enum names" do
|
@@ -296,6 +393,24 @@ class EnumTest < ActiveRecord::TestCase
|
|
296
393
|
end
|
297
394
|
end
|
298
395
|
|
396
|
+
test "reserved enum values for relation" do
|
397
|
+
relation_method_samples = [
|
398
|
+
:records,
|
399
|
+
:to_ary,
|
400
|
+
:scope_for_create
|
401
|
+
]
|
402
|
+
|
403
|
+
relation_method_samples.each do |value|
|
404
|
+
e = assert_raises(ArgumentError, "enum value `#{value}` should not be allowed") do
|
405
|
+
Class.new(ActiveRecord::Base) do
|
406
|
+
self.table_name = "books"
|
407
|
+
enum category: [:other, value]
|
408
|
+
end
|
409
|
+
end
|
410
|
+
assert_match(/You tried to define an enum named .* on the model/, e.message)
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
299
414
|
test "overriding enum method should not raise" do
|
300
415
|
assert_nothing_raised do
|
301
416
|
Class.new(ActiveRecord::Base) do
|
@@ -318,29 +433,29 @@ class EnumTest < ActiveRecord::TestCase
|
|
318
433
|
|
319
434
|
test "validate uniqueness" do
|
320
435
|
klass = Class.new(ActiveRecord::Base) do
|
321
|
-
def self.name;
|
436
|
+
def self.name; "Book"; end
|
322
437
|
enum status: [:proposed, :written]
|
323
438
|
validates_uniqueness_of :status
|
324
439
|
end
|
325
440
|
klass.delete_all
|
326
441
|
klass.create!(status: "proposed")
|
327
442
|
book = klass.new(status: "written")
|
328
|
-
|
443
|
+
assert_predicate book, :valid?
|
329
444
|
book.status = "proposed"
|
330
|
-
|
445
|
+
assert_not_predicate book, :valid?
|
331
446
|
end
|
332
447
|
|
333
448
|
test "validate inclusion of value in array" do
|
334
449
|
klass = Class.new(ActiveRecord::Base) do
|
335
|
-
def self.name;
|
450
|
+
def self.name; "Book"; end
|
336
451
|
enum status: [:proposed, :written]
|
337
452
|
validates_inclusion_of :status, in: ["written"]
|
338
453
|
end
|
339
454
|
klass.delete_all
|
340
455
|
invalid_book = klass.new(status: "proposed")
|
341
|
-
|
456
|
+
assert_not_predicate invalid_book, :valid?
|
342
457
|
valid_book = klass.new(status: "written")
|
343
|
-
|
458
|
+
assert_predicate valid_book, :valid?
|
344
459
|
end
|
345
460
|
|
346
461
|
test "enums are distinct per class" do
|
@@ -356,11 +471,11 @@ class EnumTest < ActiveRecord::TestCase
|
|
356
471
|
|
357
472
|
book1 = klass1.proposed.create!
|
358
473
|
book1.status = :written
|
359
|
-
assert_equal [
|
474
|
+
assert_equal ["proposed", "written"], book1.status_change
|
360
475
|
|
361
476
|
book2 = klass2.drafted.create!
|
362
477
|
book2.status = :uploaded
|
363
|
-
assert_equal [
|
478
|
+
assert_equal ["drafted", "uploaded"], book2.status_change
|
364
479
|
end
|
365
480
|
|
366
481
|
test "enums are inheritable" do
|
@@ -372,11 +487,25 @@ class EnumTest < ActiveRecord::TestCase
|
|
372
487
|
|
373
488
|
book1 = subklass1.proposed.create!
|
374
489
|
book1.status = :written
|
375
|
-
assert_equal [
|
490
|
+
assert_equal ["proposed", "written"], book1.status_change
|
376
491
|
|
377
492
|
book2 = subklass2.drafted.create!
|
378
493
|
book2.status = :uploaded
|
379
|
-
assert_equal [
|
494
|
+
assert_equal ["drafted", "uploaded"], book2.status_change
|
495
|
+
end
|
496
|
+
|
497
|
+
test "attempting to modify enum raises error" do
|
498
|
+
e = assert_raises(RuntimeError) do
|
499
|
+
Book.statuses["bad_enum"] = 40
|
500
|
+
end
|
501
|
+
|
502
|
+
assert_match(/can't modify frozen/, e.message)
|
503
|
+
|
504
|
+
e = assert_raises(RuntimeError) do
|
505
|
+
Book.statuses.delete("published")
|
506
|
+
end
|
507
|
+
|
508
|
+
assert_match(/can't modify frozen/, e.message)
|
380
509
|
end
|
381
510
|
|
382
511
|
test "declare multiple enums at a time" do
|
@@ -387,10 +516,42 @@ class EnumTest < ActiveRecord::TestCase
|
|
387
516
|
end
|
388
517
|
|
389
518
|
book1 = klass.proposed.create!
|
390
|
-
|
519
|
+
assert_predicate book1, :proposed?
|
391
520
|
|
392
521
|
book2 = klass.single.create!
|
393
|
-
|
522
|
+
assert_predicate book2, :single?
|
523
|
+
end
|
524
|
+
|
525
|
+
test "declare multiple enums with { _prefix: true }" do
|
526
|
+
klass = Class.new(ActiveRecord::Base) do
|
527
|
+
self.table_name = "books"
|
528
|
+
|
529
|
+
enum(
|
530
|
+
status: [:value_1],
|
531
|
+
last_read: [:value_1],
|
532
|
+
_prefix: true
|
533
|
+
)
|
534
|
+
end
|
535
|
+
|
536
|
+
instance = klass.new
|
537
|
+
assert_respond_to instance, :status_value_1?
|
538
|
+
assert_respond_to instance, :last_read_value_1?
|
539
|
+
end
|
540
|
+
|
541
|
+
test "declare multiple enums with { _suffix: true }" do
|
542
|
+
klass = Class.new(ActiveRecord::Base) do
|
543
|
+
self.table_name = "books"
|
544
|
+
|
545
|
+
enum(
|
546
|
+
status: [:value_1],
|
547
|
+
last_read: [:value_1],
|
548
|
+
_suffix: true
|
549
|
+
)
|
550
|
+
end
|
551
|
+
|
552
|
+
instance = klass.new
|
553
|
+
assert_respond_to instance, :value_1_status?
|
554
|
+
assert_respond_to instance, :value_1_last_read?
|
394
555
|
end
|
395
556
|
|
396
557
|
test "enum with alias_attribute" do
|
@@ -401,25 +562,62 @@ class EnumTest < ActiveRecord::TestCase
|
|
401
562
|
end
|
402
563
|
|
403
564
|
book = klass.proposed.create!
|
404
|
-
|
405
|
-
assert_equal
|
565
|
+
assert_predicate book, :proposed?
|
566
|
+
assert_equal "proposed", book.aliased_status
|
406
567
|
|
407
568
|
book = klass.find(book.id)
|
408
|
-
|
409
|
-
assert_equal
|
569
|
+
assert_predicate book, :proposed?
|
570
|
+
assert_equal "proposed", book.aliased_status
|
410
571
|
end
|
411
572
|
|
412
573
|
test "query state by predicate with prefix" do
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
574
|
+
assert_predicate @book, :author_visibility_visible?
|
575
|
+
assert_not_predicate @book, :author_visibility_invisible?
|
576
|
+
assert_predicate @book, :illustrator_visibility_visible?
|
577
|
+
assert_not_predicate @book, :illustrator_visibility_invisible?
|
417
578
|
end
|
418
579
|
|
419
580
|
test "query state by predicate with custom prefix" do
|
420
|
-
|
421
|
-
|
422
|
-
|
581
|
+
assert_predicate @book, :in_english?
|
582
|
+
assert_not_predicate @book, :in_spanish?
|
583
|
+
assert_not_predicate @book, :in_french?
|
584
|
+
end
|
585
|
+
|
586
|
+
test "query state by predicate with custom suffix" do
|
587
|
+
assert_predicate @book, :medium_to_read?
|
588
|
+
assert_not_predicate @book, :easy_to_read?
|
589
|
+
assert_not_predicate @book, :hard_to_read?
|
590
|
+
end
|
591
|
+
|
592
|
+
test "enum methods with custom suffix defined" do
|
593
|
+
assert_respond_to @book.class, :easy_to_read
|
594
|
+
assert_respond_to @book.class, :medium_to_read
|
595
|
+
assert_respond_to @book.class, :hard_to_read
|
596
|
+
|
597
|
+
assert_respond_to @book, :easy_to_read?
|
598
|
+
assert_respond_to @book, :medium_to_read?
|
599
|
+
assert_respond_to @book, :hard_to_read?
|
600
|
+
|
601
|
+
assert_respond_to @book, :easy_to_read!
|
602
|
+
assert_respond_to @book, :medium_to_read!
|
603
|
+
assert_respond_to @book, :hard_to_read!
|
604
|
+
end
|
605
|
+
|
606
|
+
test "update enum attributes with custom suffix" do
|
607
|
+
@book.medium_to_read!
|
608
|
+
assert_not_predicate @book, :easy_to_read?
|
609
|
+
assert_predicate @book, :medium_to_read?
|
610
|
+
assert_not_predicate @book, :hard_to_read?
|
611
|
+
|
612
|
+
@book.easy_to_read!
|
613
|
+
assert_predicate @book, :easy_to_read?
|
614
|
+
assert_not_predicate @book, :medium_to_read?
|
615
|
+
assert_not_predicate @book, :hard_to_read?
|
616
|
+
|
617
|
+
@book.hard_to_read!
|
618
|
+
assert_not_predicate @book, :easy_to_read?
|
619
|
+
assert_not_predicate @book, :medium_to_read?
|
620
|
+
assert_predicate @book, :hard_to_read?
|
423
621
|
end
|
424
622
|
|
425
623
|
test "uses default status when no status is provided in fixtures" do
|
@@ -430,15 +628,196 @@ class EnumTest < ActiveRecord::TestCase
|
|
430
628
|
|
431
629
|
test "uses default value from database on initialization" do
|
432
630
|
book = Book.new
|
433
|
-
|
631
|
+
assert_predicate book, :proposed?
|
434
632
|
end
|
435
633
|
|
436
634
|
test "uses default value from database on initialization when using custom mapping" do
|
437
635
|
book = Book.new
|
438
|
-
|
636
|
+
assert_predicate book, :hard?
|
439
637
|
end
|
440
638
|
|
441
639
|
test "data type of Enum type" do
|
442
|
-
assert_equal :integer, Book.type_for_attribute(
|
640
|
+
assert_equal :integer, Book.type_for_attribute("status").type
|
641
|
+
end
|
642
|
+
|
643
|
+
test "enum on custom attribute with default" do
|
644
|
+
klass = Class.new(ActiveRecord::Base) do
|
645
|
+
self.table_name = "books"
|
646
|
+
attribute :status, default: 2
|
647
|
+
enum status: [:proposed, :written, :published]
|
648
|
+
end
|
649
|
+
|
650
|
+
assert_equal "published", klass.new.status
|
651
|
+
end
|
652
|
+
|
653
|
+
test "overloaded default" do
|
654
|
+
klass = Class.new(ActiveRecord::Base) do
|
655
|
+
self.table_name = "books"
|
656
|
+
enum status: [:proposed, :written, :published], _default: :published
|
657
|
+
end
|
658
|
+
|
659
|
+
assert_equal "published", klass.new.status
|
660
|
+
end
|
661
|
+
|
662
|
+
test "scopes can be disabled" do
|
663
|
+
klass = Class.new(ActiveRecord::Base) do
|
664
|
+
self.table_name = "books"
|
665
|
+
enum status: [:proposed, :written], _scopes: false
|
666
|
+
end
|
667
|
+
|
668
|
+
assert_raises(NoMethodError) { klass.proposed }
|
669
|
+
end
|
670
|
+
|
671
|
+
test "scopes are named like methods" do
|
672
|
+
klass = Class.new(ActiveRecord::Base) do
|
673
|
+
self.table_name = "cats"
|
674
|
+
enum breed: { "American Bobtail" => 0, "Balinese-Javanese" => 1 }
|
675
|
+
end
|
676
|
+
|
677
|
+
assert_respond_to klass, :American_Bobtail
|
678
|
+
assert_respond_to klass, :Balinese_Javanese
|
679
|
+
end
|
680
|
+
|
681
|
+
test "capital characters for enum names" do
|
682
|
+
klass = Class.new(ActiveRecord::Base) do
|
683
|
+
self.table_name = "computers"
|
684
|
+
enum extendedWarranty: [:extendedSilver, :extendedGold]
|
685
|
+
end
|
686
|
+
|
687
|
+
computer = klass.extendedSilver.build
|
688
|
+
assert_predicate computer, :extendedSilver?
|
689
|
+
assert_not_predicate computer, :extendedGold?
|
690
|
+
end
|
691
|
+
|
692
|
+
test "unicode characters for enum names" do
|
693
|
+
klass = Class.new(ActiveRecord::Base) do
|
694
|
+
self.table_name = "books"
|
695
|
+
enum language: [:πΊπΈ, :πͺπΈ, :π«π·]
|
696
|
+
end
|
697
|
+
|
698
|
+
book = klass.πΊπΈ.build
|
699
|
+
assert_predicate book, :πΊπΈ?
|
700
|
+
assert_not_predicate book, :πͺπΈ?
|
701
|
+
end
|
702
|
+
|
703
|
+
test "mangling collision for enum names" do
|
704
|
+
klass = Class.new(ActiveRecord::Base) do
|
705
|
+
self.table_name = "computers"
|
706
|
+
enum timezone: [:"Etc/GMT+1", :"Etc/GMT-1"]
|
707
|
+
end
|
708
|
+
|
709
|
+
computer = klass.public_send(:"Etc/GMT+1").build
|
710
|
+
assert_predicate computer, :"Etc/GMT+1?"
|
711
|
+
assert_not_predicate computer, :"Etc/GMT-1?"
|
712
|
+
end
|
713
|
+
|
714
|
+
test "deserialize enum value to original hash key" do
|
715
|
+
proposed = Struct.new(:to_s).new("proposed")
|
716
|
+
written = Struct.new(:to_s).new("written")
|
717
|
+
klass = Class.new(ActiveRecord::Base) do
|
718
|
+
self.table_name = "books"
|
719
|
+
enum status: { proposed => 0, written => 1 }
|
720
|
+
end
|
721
|
+
|
722
|
+
book = klass.create!(status: 0)
|
723
|
+
assert_equal proposed, book.status
|
724
|
+
assert_predicate book, :proposed?
|
725
|
+
assert_not_predicate book, :written?
|
726
|
+
end
|
727
|
+
|
728
|
+
test "enum logs a warning if auto-generated negative scopes would clash with other enum names" do
|
729
|
+
old_logger = ActiveRecord::Base.logger
|
730
|
+
logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
|
731
|
+
|
732
|
+
ActiveRecord::Base.logger = logger
|
733
|
+
|
734
|
+
expected_message_1 = "Enum element 'not_sent' in Book uses the prefix 'not_'."\
|
735
|
+
" This has caused a conflict with auto generated negative scopes."\
|
736
|
+
" Avoid using enum elements starting with 'not' where the positive form is also an element."
|
737
|
+
|
738
|
+
# this message comes from ActiveRecord::Scoping::Named, but it's worth noting that both occur in this case
|
739
|
+
expected_message_2 = "Creating scope :not_sent. Overwriting existing method Book.not_sent."
|
740
|
+
|
741
|
+
Class.new(ActiveRecord::Base) do
|
742
|
+
def self.name
|
743
|
+
"Book"
|
744
|
+
end
|
745
|
+
silence_warnings do
|
746
|
+
enum status: [:sent, :not_sent]
|
747
|
+
end
|
748
|
+
end
|
749
|
+
|
750
|
+
assert_includes(logger.logged(:warn), expected_message_1)
|
751
|
+
assert_includes(logger.logged(:warn), expected_message_2)
|
752
|
+
ensure
|
753
|
+
ActiveRecord::Base.logger = old_logger
|
754
|
+
end
|
755
|
+
|
756
|
+
test "enum logs a warning if auto-generated negative scopes would clash with other enum names regardless of order" do
|
757
|
+
old_logger = ActiveRecord::Base.logger
|
758
|
+
logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
|
759
|
+
|
760
|
+
ActiveRecord::Base.logger = logger
|
761
|
+
|
762
|
+
expected_message_1 = "Enum element 'not_sent' in Book uses the prefix 'not_'."\
|
763
|
+
" This has caused a conflict with auto generated negative scopes."\
|
764
|
+
" Avoid using enum elements starting with 'not' where the positive form is also an element."
|
765
|
+
|
766
|
+
# this message comes from ActiveRecord::Scoping::Named, but it's worth noting that both occur in this case
|
767
|
+
expected_message_2 = "Creating scope :not_sent. Overwriting existing method Book.not_sent."
|
768
|
+
|
769
|
+
Class.new(ActiveRecord::Base) do
|
770
|
+
def self.name
|
771
|
+
"Book"
|
772
|
+
end
|
773
|
+
silence_warnings do
|
774
|
+
enum status: [:not_sent, :sent]
|
775
|
+
end
|
776
|
+
end
|
777
|
+
|
778
|
+
assert_includes(logger.logged(:warn), expected_message_1)
|
779
|
+
assert_includes(logger.logged(:warn), expected_message_2)
|
780
|
+
ensure
|
781
|
+
ActiveRecord::Base.logger = old_logger
|
782
|
+
end
|
783
|
+
|
784
|
+
test "enum doesn't log a warning if no clashes detected" do
|
785
|
+
old_logger = ActiveRecord::Base.logger
|
786
|
+
logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
|
787
|
+
|
788
|
+
ActiveRecord::Base.logger = logger
|
789
|
+
|
790
|
+
Class.new(ActiveRecord::Base) do
|
791
|
+
def self.name
|
792
|
+
"Book"
|
793
|
+
end
|
794
|
+
silence_warnings do
|
795
|
+
enum status: [:not_sent]
|
796
|
+
end
|
797
|
+
end
|
798
|
+
|
799
|
+
assert_empty(logger.logged(:warn))
|
800
|
+
ensure
|
801
|
+
ActiveRecord::Base.logger = old_logger
|
802
|
+
end
|
803
|
+
|
804
|
+
test "enum doesn't log a warning if opting out of scopes" do
|
805
|
+
old_logger = ActiveRecord::Base.logger
|
806
|
+
logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
|
807
|
+
|
808
|
+
ActiveRecord::Base.logger = logger
|
809
|
+
|
810
|
+
Class.new(ActiveRecord::Base) do
|
811
|
+
def self.name
|
812
|
+
"Book"
|
813
|
+
end
|
814
|
+
silence_warnings do
|
815
|
+
enum status: [:not_sent, :sent], _scopes: false
|
816
|
+
end
|
817
|
+
end
|
818
|
+
|
819
|
+
assert_empty(logger.logged(:warn))
|
820
|
+
ensure
|
821
|
+
ActiveRecord::Base.logger = old_logger
|
443
822
|
end
|
444
823
|
end
|