ibm_db 5.6.1-arm64-darwin-24
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 +7 -0
- data/CHANGES +299 -0
- data/LICENSE +55 -0
- data/MANIFEST +14 -0
- data/ParameterizedQueries README +39 -0
- data/README +210 -0
- data/ext/Makefile +270 -0
- data/ext/Makefile.nt32 +181 -0
- data/ext/Makefile.nt32.191 +212 -0
- data/ext/extconf.rb +320 -0
- data/ext/gil_release_version.h +3 -0
- data/ext/ibm_db.bundle +0 -0
- data/ext/ibm_db.c +11865 -0
- data/ext/ibm_db.o +0 -0
- data/ext/mkmf.log +98 -0
- data/ext/ruby_ibm_db.h +241 -0
- data/ext/ruby_ibm_db_cli.c +867 -0
- data/ext/ruby_ibm_db_cli.h +508 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/ext/unicode_support_version.h +3 -0
- data/init.rb +42 -0
- data/lib/IBM_DB.rb +27 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +4407 -0
- data/lib/active_record/connection_adapters/ibm_db_pstmt.rb +1965 -0
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -0
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -0
- data/lib/ibm_db.bundle +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +52 -0
- 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/example.log +1 -0
- data/test/assets/flowers.jpg +0 -0
- data/test/assets/schema_dump_5_1.yml +345 -0
- data/test/assets/test.txt +1 -0
- data/test/cases/adapter_prevent_writes_test.rb +334 -0
- data/test/cases/adapter_test.rb +565 -0
- data/test/cases/adapters/mysql2/active_schema_test.rb +203 -0
- data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +52 -0
- data/test/cases/adapters/mysql2/boolean_test.rb +102 -0
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +65 -0
- data/test/cases/adapters/mysql2/charset_collation_test.rb +57 -0
- data/test/cases/adapters/mysql2/connection_test.rb +208 -0
- data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +49 -0
- data/test/cases/adapters/mysql2/enum_test.rb +47 -0
- data/test/cases/adapters/mysql2/explain_test.rb +23 -0
- data/test/cases/adapters/mysql2/json_test.rb +24 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +238 -0
- 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/reserved_word_test.rb +152 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +64 -0
- data/test/cases/adapters/mysql2/schema_test.rb +128 -0
- data/test/cases/adapters/mysql2/set_test.rb +32 -0
- data/test/cases/adapters/mysql2/sp_test.rb +38 -0
- data/test/cases/adapters/mysql2/sql_types_test.rb +16 -0
- data/test/cases/adapters/mysql2/table_options_test.rb +125 -0
- data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +68 -0
- data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +113 -0
- data/test/cases/adapters/postgresql/array_test.rb +394 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +84 -0
- data/test/cases/adapters/postgresql/bytea_test.rb +135 -0
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +27 -0
- data/test/cases/adapters/postgresql/change_schema_test.rb +40 -0
- data/test/cases/adapters/postgresql/cidr_test.rb +27 -0
- data/test/cases/adapters/postgresql/citext_test.rb +78 -0
- data/test/cases/adapters/postgresql/collation_test.rb +55 -0
- data/test/cases/adapters/postgresql/composite_test.rb +134 -0
- data/test/cases/adapters/postgresql/connection_test.rb +245 -0
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +89 -0
- data/test/cases/adapters/postgresql/date_test.rb +42 -0
- data/test/cases/adapters/postgresql/domain_test.rb +49 -0
- data/test/cases/adapters/postgresql/enum_test.rb +93 -0
- data/test/cases/adapters/postgresql/explain_test.rb +22 -0
- data/test/cases/adapters/postgresql/extension_migration_test.rb +64 -0
- data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +46 -0
- data/test/cases/adapters/postgresql/geometric_test.rb +372 -0
- data/test/cases/adapters/postgresql/hstore_test.rb +390 -0
- data/test/cases/adapters/postgresql/infinity_test.rb +108 -0
- data/test/cases/adapters/postgresql/integer_test.rb +27 -0
- data/test/cases/adapters/postgresql/interval_test.rb +99 -0
- data/test/cases/adapters/postgresql/json_test.rb +52 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +51 -0
- data/test/cases/adapters/postgresql/money_test.rb +127 -0
- data/test/cases/adapters/postgresql/network_test.rb +102 -0
- data/test/cases/adapters/postgresql/numbers_test.rb +51 -0
- 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 +447 -0
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +50 -0
- data/test/cases/adapters/postgresql/range_test.rb +457 -0
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +112 -0
- data/test/cases/adapters/postgresql/rename_table_test.rb +35 -0
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +110 -0
- data/test/cases/adapters/postgresql/schema_test.rb +713 -0
- data/test/cases/adapters/postgresql/serial_test.rb +156 -0
- data/test/cases/adapters/postgresql/statement_pool_test.rb +61 -0
- data/test/cases/adapters/postgresql/timestamp_test.rb +92 -0
- 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 +35 -0
- data/test/cases/adapters/postgresql/utils_test.rb +64 -0
- data/test/cases/adapters/postgresql/uuid_test.rb +411 -0
- data/test/cases/adapters/postgresql/xml_test.rb +50 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +64 -0
- data/test/cases/adapters/sqlite3/copy_table_test.rb +101 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +23 -0
- data/test/cases/adapters/sqlite3/json_test.rb +29 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +79 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +628 -0
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +21 -0
- data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
- data/test/cases/aggregations_test.rb +170 -0
- data/test/cases/annotate_test.rb +46 -0
- data/test/cases/ar_schema_test.rb +213 -0
- 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/association_scope_test.rb +16 -0
- data/test/cases/associations/belongs_to_associations_test.rb +1493 -0
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +43 -0
- data/test/cases/associations/callbacks_test.rb +208 -0
- data/test/cases/associations/cascaded_eager_loading_test.rb +245 -0
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +156 -0
- data/test/cases/associations/eager_load_nested_include_test.rb +127 -0
- data/test/cases/associations/eager_singularization_test.rb +148 -0
- data/test/cases/associations/eager_test.rb +1658 -0
- data/test/cases/associations/extension_test.rb +93 -0
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1025 -0
- data/test/cases/associations/has_many_associations_test.rb +3074 -0
- data/test/cases/associations/has_many_through_associations_test.rb +1580 -0
- data/test/cases/associations/has_one_associations_test.rb +872 -0
- data/test/cases/associations/has_one_through_associations_test.rb +429 -0
- data/test/cases/associations/inner_join_association_test.rb +215 -0
- data/test/cases/associations/inverse_associations_test.rb +941 -0
- data/test/cases/associations/join_model_test.rb +787 -0
- data/test/cases/associations/left_outer_join_association_test.rb +123 -0
- data/test/cases/associations/nested_through_associations_test.rb +636 -0
- data/test/cases/associations/required_test.rb +127 -0
- data/test/cases/associations_test.rb +516 -0
- data/test/cases/attribute_decorators_test.rb +126 -0
- data/test/cases/attribute_methods/read_test.rb +60 -0
- data/test/cases/attribute_methods_test.rb +1124 -0
- data/test/cases/attribute_set_test.rb +270 -0
- data/test/cases/attribute_test.rb +246 -0
- data/test/cases/attributes_test.rb +371 -0
- data/test/cases/autosave_association_test.rb +1953 -0
- data/test/cases/base_prevent_writes_test.rb +229 -0
- data/test/cases/base_test.rb +1770 -0
- data/test/cases/batches_test.rb +695 -0
- data/test/cases/binary_test.rb +39 -0
- data/test/cases/bind_parameter_test.rb +283 -0
- data/test/cases/boolean_test.rb +52 -0
- data/test/cases/cache_key_test.rb +131 -0
- data/test/cases/calculations_test.rb +1361 -0
- data/test/cases/callbacks_test.rb +503 -0
- data/test/cases/clone_test.rb +45 -0
- data/test/cases/coders/json_test.rb +17 -0
- data/test/cases/coders/yaml_column_test.rb +66 -0
- data/test/cases/collection_cache_key_test.rb +272 -0
- data/test/cases/column_alias_test.rb +19 -0
- data/test/cases/column_definition_test.rb +34 -0
- data/test/cases/comment_test.rb +204 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +60 -0
- data/test/cases/connection_adapters/connection_handler_test.rb +467 -0
- 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_specification_test.rb +12 -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 +436 -0
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +81 -0
- data/test/cases/connection_adapters/quoting_test.rb +13 -0
- data/test/cases/connection_adapters/schema_cache_test.rb +294 -0
- data/test/cases/connection_adapters/type_lookup_test.rb +119 -0
- data/test/cases/connection_management_test.rb +114 -0
- data/test/cases/connection_pool_test.rb +754 -0
- data/test/cases/connection_specification/resolver_test.rb +131 -0
- data/test/cases/core_test.rb +136 -0
- data/test/cases/counter_cache_test.rb +368 -0
- data/test/cases/custom_locking_test.rb +19 -0
- 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 +36 -0
- data/test/cases/date_test.rb +36 -0
- data/test/cases/date_time_precision_test.rb +129 -0
- data/test/cases/date_time_test.rb +76 -0
- data/test/cases/defaults_test.rb +254 -0
- data/test/cases/delegated_type_test.rb +57 -0
- data/test/cases/dirty_test.rb +959 -0
- data/test/cases/disconnected_test.rb +30 -0
- data/test/cases/dup_test.rb +184 -0
- data/test/cases/enum_test.rb +823 -0
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_subscriber_test.rb +66 -0
- data/test/cases/explain_test.rb +79 -0
- data/test/cases/filter_attributes_test.rb +153 -0
- data/test/cases/finder_respond_to_test.rb +60 -0
- data/test/cases/finder_test.rb +1676 -0
- data/test/cases/fixture_set/file_test.rb +152 -0
- data/test/cases/fixtures_test.rb +1645 -0
- data/test/cases/forbidden_attributes_protection_test.rb +130 -0
- data/test/cases/habtm_destroy_order_test.rb +61 -0
- data/test/cases/helper.rb +233 -0
- data/test/cases/hot_compatibility_test.rb +143 -0
- data/test/cases/i18n_test.rb +46 -0
- data/test/cases/inheritance_test.rb +671 -0
- data/test/cases/insert_all_test.rb +489 -0
- data/test/cases/instrumentation_test.rb +101 -0
- data/test/cases/integration_test.rb +243 -0
- data/test/cases/invalid_connection_test.rb +26 -0
- data/test/cases/invertible_migration_test.rb +527 -0
- data/test/cases/json_attribute_test.rb +35 -0
- data/test/cases/json_serialization_test.rb +310 -0
- data/test/cases/json_shared_test_cases.rb +290 -0
- data/test/cases/locking_test.rb +787 -0
- data/test/cases/log_subscriber_test.rb +267 -0
- data/test/cases/marshal_serialization_test.rb +39 -0
- data/test/cases/migration/change_schema_test.rb +504 -0
- data/test/cases/migration/change_table_test.rb +364 -0
- data/test/cases/migration/check_constraint_test.rb +162 -0
- data/test/cases/migration/column_attributes_test.rb +186 -0
- data/test/cases/migration/column_positioning_test.rb +68 -0
- data/test/cases/migration/columns_test.rb +326 -0
- data/test/cases/migration/command_recorder_test.rb +437 -0
- data/test/cases/migration/compatibility_test.rb +673 -0
- data/test/cases/migration/create_join_table_test.rb +167 -0
- data/test/cases/migration/foreign_key_test.rb +581 -0
- data/test/cases/migration/helper.rb +40 -0
- data/test/cases/migration/index_test.rb +267 -0
- data/test/cases/migration/logger_test.rb +39 -0
- data/test/cases/migration/pending_migrations_test.rb +106 -0
- data/test/cases/migration/references_foreign_key_test.rb +235 -0
- data/test/cases/migration/references_index_test.rb +120 -0
- data/test/cases/migration/references_statements_test.rb +137 -0
- data/test/cases/migration/rename_table_test.rb +116 -0
- data/test/cases/migration_test.rb +1525 -0
- data/test/cases/migrator_test.rb +527 -0
- data/test/cases/mixin_test.rb +64 -0
- data/test/cases/modules_test.rb +174 -0
- data/test/cases/multi_db_migrator_test.rb +223 -0
- data/test/cases/multiparameter_attributes_test.rb +399 -0
- data/test/cases/multiple_db_test.rb +116 -0
- data/test/cases/nested_attributes_test.rb +1119 -0
- data/test/cases/nested_attributes_with_callbacks_test.rb +146 -0
- data/test/cases/null_relation_test.rb +84 -0
- data/test/cases/numeric_data_test.rb +93 -0
- data/test/cases/persistence_test.rb +1093 -0
- data/test/cases/pooled_connections_test.rb +73 -0
- data/test/cases/prepared_statement_status_test.rb +48 -0
- data/test/cases/primary_keys_test.rb +482 -0
- data/test/cases/query_cache_test.rb +915 -0
- data/test/cases/quoting_test.rb +303 -0
- data/test/cases/readonly_test.rb +120 -0
- data/test/cases/reaper_test.rb +199 -0
- data/test/cases/reflection_test.rb +520 -0
- data/test/cases/relation/delegation_test.rb +76 -0
- data/test/cases/relation/delete_all_test.rb +117 -0
- data/test/cases/relation/merging_test.rb +434 -0
- data/test/cases/relation/mutation_test.rb +145 -0
- data/test/cases/relation/or_test.rb +192 -0
- data/test/cases/relation/predicate_builder_test.rb +31 -0
- data/test/cases/relation/record_fetch_warning_test.rb +42 -0
- 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 +141 -0
- data/test/cases/relation/where_clause_test.rb +257 -0
- data/test/cases/relation/where_test.rb +429 -0
- data/test/cases/relation_test.rb +482 -0
- data/test/cases/relations_test.rb +2251 -0
- data/test/cases/reload_models_test.rb +26 -0
- data/test/cases/reserved_word_test.rb +141 -0
- data/test/cases/result_test.rb +141 -0
- data/test/cases/sanitize_test.rb +192 -0
- data/test/cases/schema_dumper_test.rb +550 -0
- data/test/cases/schema_loading_test.rb +53 -0
- data/test/cases/scoping/default_scoping_test.rb +569 -0
- data/test/cases/scoping/named_scoping_test.rb +649 -0
- data/test/cases/scoping/relation_scoping_test.rb +522 -0
- data/test/cases/secure_token_test.rb +47 -0
- data/test/cases/serialization_test.rb +106 -0
- data/test/cases/serialized_attribute_test.rb +455 -0
- data/test/cases/signed_id_test.rb +168 -0
- data/test/cases/statement_cache_test.rb +153 -0
- data/test/cases/statement_invalid_test.rb +42 -0
- data/test/cases/store_test.rb +320 -0
- data/test/cases/strict_loading_test.rb +473 -0
- data/test/cases/suppressor_test.rb +77 -0
- data/test/cases/tasks/database_tasks_test.rb +1526 -0
- data/test/cases/tasks/mysql_rake_test.rb +417 -0
- data/test/cases/tasks/postgresql_rake_test.rb +534 -0
- data/test/cases/tasks/sqlite_rake_test.rb +267 -0
- data/test/cases/test_case.rb +142 -0
- data/test/cases/test_databases_test.rb +79 -0
- data/test/cases/test_fixtures_test.rb +96 -0
- data/test/cases/time_precision_test.rb +125 -0
- data/test/cases/timestamp_test.rb +504 -0
- data/test/cases/touch_later_test.rb +123 -0
- data/test/cases/transaction_callbacks_test.rb +772 -0
- data/test/cases/transaction_isolation_test.rb +106 -0
- data/test/cases/transactions_test.rb +1285 -0
- data/test/cases/type/adapter_specific_registry_test.rb +145 -0
- data/test/cases/type/date_time_test.rb +16 -0
- data/test/cases/type/integer_test.rb +29 -0
- data/test/cases/type/string_test.rb +24 -0
- data/test/cases/type/time_test.rb +28 -0
- data/test/cases/type/type_map_test.rb +178 -0
- data/test/cases/type/unsigned_integer_test.rb +19 -0
- data/test/cases/type_test.rb +41 -0
- data/test/cases/types_test.rb +26 -0
- data/test/cases/unconnected_test.rb +46 -0
- data/test/cases/unsafe_raw_sql_test.rb +274 -0
- data/test/cases/validations/absence_validation_test.rb +75 -0
- data/test/cases/validations/association_validation_test.rb +99 -0
- data/test/cases/validations/i18n_generate_message_validation_test.rb +102 -0
- data/test/cases/validations/i18n_validation_test.rb +87 -0
- data/test/cases/validations/length_validation_test.rb +80 -0
- data/test/cases/validations/numericality_validation_test.rb +181 -0
- data/test/cases/validations/presence_validation_test.rb +105 -0
- data/test/cases/validations/uniqueness_validation_test.rb +618 -0
- data/test/cases/validations_repair_helper.rb +21 -0
- data/test/cases/validations_test.rb +229 -0
- data/test/cases/view_test.rb +222 -0
- data/test/cases/yaml_serialization_test.rb +166 -0
- data/test/config.example.yml +97 -0
- data/test/config.rb +7 -0
- data/test/config.yml +220 -0
- data/test/connections/native_ibm_db/connection.rb +44 -0
- data/test/fixtures/accounts.yml +29 -0
- data/test/fixtures/admin/accounts.yml +2 -0
- data/test/fixtures/admin/randomly_named_a9.yml +7 -0
- data/test/fixtures/admin/randomly_named_b0.yml +7 -0
- data/test/fixtures/admin/users.yml +10 -0
- data/test/fixtures/all/admin +1 -0
- data/test/fixtures/all/developers.yml +0 -0
- data/test/fixtures/all/namespaced/accounts.yml +2 -0
- data/test/fixtures/all/people.yml +0 -0
- data/test/fixtures/all/tasks.yml +0 -0
- data/test/fixtures/author_addresses.yml +11 -0
- data/test/fixtures/author_favorites.yml +4 -0
- data/test/fixtures/authors.yml +17 -0
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/binaries.yml +137 -0
- data/test/fixtures/books.yml +38 -0
- data/test/fixtures/bulbs.yml +5 -0
- data/test/fixtures/cars.yml +9 -0
- data/test/fixtures/categories/special_categories.yml +9 -0
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
- data/test/fixtures/categories.yml +19 -0
- data/test/fixtures/categories_ordered.yml +7 -0
- data/test/fixtures/categories_posts.yml +34 -0
- data/test/fixtures/categorizations.yml +23 -0
- data/test/fixtures/citations.yml +5 -0
- data/test/fixtures/clubs.yml +8 -0
- data/test/fixtures/collections.yml +3 -0
- data/test/fixtures/colleges.yml +3 -0
- data/test/fixtures/comments.yml +72 -0
- data/test/fixtures/companies.yml +72 -0
- data/test/fixtures/computers.yml +12 -0
- data/test/fixtures/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/courses.yml +8 -0
- data/test/fixtures/customers.yml +35 -0
- data/test/fixtures/dashboards.yml +6 -0
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/developers.yml +22 -0
- data/test/fixtures/developers_projects.yml +17 -0
- data/test/fixtures/dog_lovers.yml +7 -0
- data/test/fixtures/dogs.yml +4 -0
- data/test/fixtures/doubloons.yml +3 -0
- data/test/fixtures/edges.yml +5 -0
- data/test/fixtures/entrants.yml +14 -0
- data/test/fixtures/essays.yml +16 -0
- data/test/fixtures/faces.yml +11 -0
- data/test/fixtures/fk_test_has_fk.yml +3 -0
- data/test/fixtures/fk_test_has_pk.yml +2 -0
- data/test/fixtures/friendships.yml +4 -0
- data/test/fixtures/funny_jokes.yml +10 -0
- data/test/fixtures/humans.yml +5 -0
- data/test/fixtures/interests.yml +33 -0
- data/test/fixtures/items.yml +3 -0
- data/test/fixtures/jobs.yml +7 -0
- data/test/fixtures/legacy_things.yml +3 -0
- data/test/fixtures/live_parrots.yml +4 -0
- data/test/fixtures/mateys.yml +4 -0
- data/test/fixtures/member_details.yml +8 -0
- data/test/fixtures/member_types.yml +6 -0
- data/test/fixtures/members.yml +11 -0
- data/test/fixtures/memberships.yml +41 -0
- data/test/fixtures/men.yml +5 -0
- data/test/fixtures/minimalistics.yml +5 -0
- data/test/fixtures/minivans.yml +5 -0
- data/test/fixtures/mixed_case_monkeys.yml +6 -0
- data/test/fixtures/mixins.yml +29 -0
- data/test/fixtures/movies.yml +7 -0
- data/test/fixtures/naked/yml/accounts.yml +1 -0
- data/test/fixtures/naked/yml/companies.yml +1 -0
- data/test/fixtures/naked/yml/courses.yml +1 -0
- data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
- data/test/fixtures/naked/yml/parrots.yml +3 -0
- data/test/fixtures/naked/yml/trees.yml +3 -0
- data/test/fixtures/nodes.yml +29 -0
- data/test/fixtures/organizations.yml +5 -0
- data/test/fixtures/other_books.yml +26 -0
- data/test/fixtures/other_comments.yml +6 -0
- data/test/fixtures/other_dogs.yml +2 -0
- data/test/fixtures/other_posts.yml +8 -0
- data/test/fixtures/other_topics.yml +42 -0
- data/test/fixtures/owners.yml +9 -0
- data/test/fixtures/parrots.yml +33 -0
- data/test/fixtures/parrots_pirates.yml +7 -0
- data/test/fixtures/people.yml +24 -0
- data/test/fixtures/peoples_treasures.yml +3 -0
- data/test/fixtures/pets.yml +19 -0
- data/test/fixtures/pirates.yml +15 -0
- data/test/fixtures/posts.yml +88 -0
- data/test/fixtures/price_estimates.yml +16 -0
- data/test/fixtures/products.yml +4 -0
- data/test/fixtures/projects.yml +7 -0
- data/test/fixtures/randomly_named_a9.yml +7 -0
- data/test/fixtures/ratings.yml +14 -0
- data/test/fixtures/readers.yml +17 -0
- data/test/fixtures/references.yml +17 -0
- data/test/fixtures/reserved_words/distinct.yml +5 -0
- data/test/fixtures/reserved_words/distinct_select.yml +11 -0
- data/test/fixtures/reserved_words/group.yml +14 -0
- data/test/fixtures/reserved_words/select.yml +8 -0
- data/test/fixtures/reserved_words/values.yml +7 -0
- data/test/fixtures/ships.yml +6 -0
- data/test/fixtures/speedometers.yml +8 -0
- data/test/fixtures/sponsors.yml +15 -0
- data/test/fixtures/strict_zines.yml +2 -0
- data/test/fixtures/string_key_objects.yml +7 -0
- data/test/fixtures/subscribers.yml +11 -0
- data/test/fixtures/subscriptions.yml +12 -0
- data/test/fixtures/taggings.yml +78 -0
- data/test/fixtures/tags.yml +11 -0
- data/test/fixtures/tasks.yml +7 -0
- data/test/fixtures/teapots.yml +3 -0
- data/test/fixtures/to_be_linked/accounts.yml +2 -0
- data/test/fixtures/to_be_linked/users.yml +10 -0
- data/test/fixtures/topics.yml +49 -0
- data/test/fixtures/toys.yml +14 -0
- data/test/fixtures/traffic_lights.yml +10 -0
- data/test/fixtures/treasures.yml +10 -0
- data/test/fixtures/trees.yml +3 -0
- data/test/fixtures/uuid_children.yml +3 -0
- data/test/fixtures/uuid_parents.yml +2 -0
- data/test/fixtures/variants.yml +4 -0
- data/test/fixtures/vegetables.yml +20 -0
- data/test/fixtures/vertices.yml +4 -0
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/fixtures/warehouse_things.yml +3 -0
- data/test/fixtures/zines.yml +5 -0
- data/test/ibm_db_test.rb +25 -0
- data/test/migrations/10_urban/9_add_expressions.rb +13 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +17 -0
- data/test/migrations/magic/1_currencies_have_symbols.rb +13 -0
- data/test/migrations/missing/1000_people_have_middle_names.rb +11 -0
- data/test/migrations/missing/1_people_have_last_names.rb +11 -0
- data/test/migrations/missing/3_we_need_reminders.rb +14 -0
- data/test/migrations/missing/4_innocent_jointable.rb +14 -0
- data/test/migrations/rename/1_we_need_things.rb +13 -0
- data/test/migrations/rename/2_rename_things.rb +11 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +11 -0
- data/test/migrations/to_copy/2_people_have_descriptions.rb +11 -0
- data/test/migrations/to_copy2/1_create_articles.rb +9 -0
- data/test/migrations/to_copy2/2_create_comments.rb +9 -0
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +11 -0
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +11 -0
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +11 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +9 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +9 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +11 -0
- data/test/migrations/valid/2_we_need_reminders.rb +14 -0
- data/test/migrations/valid/3_innocent_jointable.rb +14 -0
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +11 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +14 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +14 -0
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +11 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +14 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +14 -0
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +10 -0
- data/test/models/account.rb +46 -0
- data/test/models/admin/account.rb +5 -0
- data/test/models/admin/randomly_named_c1.rb +9 -0
- data/test/models/admin/user.rb +48 -0
- data/test/models/admin.rb +7 -0
- data/test/models/aircraft.rb +7 -0
- data/test/models/arunit2_model.rb +5 -0
- data/test/models/author.rb +260 -0
- data/test/models/auto_id.rb +6 -0
- data/test/models/autoloadable/extra_firm.rb +4 -0
- data/test/models/binary.rb +4 -0
- data/test/models/binary_field.rb +6 -0
- data/test/models/bird.rb +24 -0
- data/test/models/book.rb +33 -0
- data/test/models/book_destroy_async.rb +24 -0
- data/test/models/boolean.rb +7 -0
- data/test/models/bulb.rb +61 -0
- data/test/models/cake_designer.rb +5 -0
- data/test/models/car.rb +36 -0
- data/test/models/carrier.rb +4 -0
- data/test/models/cart.rb +5 -0
- data/test/models/cat.rb +12 -0
- data/test/models/categorization.rb +21 -0
- data/test/models/category.rb +47 -0
- data/test/models/chef.rb +10 -0
- data/test/models/citation.rb +7 -0
- data/test/models/club.rb +28 -0
- data/test/models/college.rb +12 -0
- data/test/models/column.rb +5 -0
- data/test/models/column_name.rb +5 -0
- data/test/models/comment.rb +98 -0
- data/test/models/company.rb +226 -0
- data/test/models/company_in_module.rb +99 -0
- data/test/models/computer.rb +5 -0
- data/test/models/contact.rb +43 -0
- data/test/models/content.rb +42 -0
- data/test/models/contract.rb +38 -0
- data/test/models/country.rb +5 -0
- data/test/models/course.rb +8 -0
- data/test/models/customer.rb +85 -0
- data/test/models/customer_carrier.rb +16 -0
- data/test/models/dashboard.rb +5 -0
- data/test/models/default.rb +4 -0
- data/test/models/department.rb +6 -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 +341 -0
- 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 +7 -0
- data/test/models/dog_lover.rb +7 -0
- data/test/models/doubloon.rb +14 -0
- data/test/models/drink_designer.rb +20 -0
- data/test/models/edge.rb +7 -0
- data/test/models/electron.rb +7 -0
- data/test/models/engine.rb +5 -0
- data/test/models/entrant.rb +5 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +8 -0
- data/test/models/essay_destroy_async.rb +12 -0
- data/test/models/event.rb +5 -0
- data/test/models/eye.rb +39 -0
- data/test/models/face.rb +17 -0
- data/test/models/family.rb +6 -0
- data/test/models/family_tree.rb +6 -0
- data/test/models/friendship.rb +8 -0
- data/test/models/frog.rb +8 -0
- data/test/models/guid.rb +4 -0
- data/test/models/guitar.rb +6 -0
- data/test/models/hotel.rb +13 -0
- data/test/models/human.rb +39 -0
- data/test/models/image.rb +5 -0
- data/test/models/interest.rb +16 -0
- data/test/models/invoice.rb +6 -0
- data/test/models/item.rb +9 -0
- data/test/models/job.rb +9 -0
- data/test/models/joke.rb +9 -0
- data/test/models/keyboard.rb +5 -0
- data/test/models/legacy_thing.rb +5 -0
- data/test/models/lesson.rb +13 -0
- data/test/models/line_item.rb +5 -0
- data/test/models/liquid.rb +6 -0
- data/test/models/man.rb +11 -0
- data/test/models/matey.rb +6 -0
- data/test/models/measurement.rb +4 -0
- data/test/models/member.rb +45 -0
- data/test/models/member_detail.rb +11 -0
- data/test/models/member_type.rb +5 -0
- data/test/models/membership.rb +38 -0
- data/test/models/mentor.rb +5 -0
- data/test/models/message.rb +5 -0
- data/test/models/minimalistic.rb +4 -0
- data/test/models/minivan.rb +10 -0
- data/test/models/mixed_case_monkey.rb +5 -0
- data/test/models/mocktail_designer.rb +2 -0
- data/test/models/molecule.rb +8 -0
- data/test/models/mouse.rb +6 -0
- data/test/models/movie.rb +7 -0
- data/test/models/node.rb +7 -0
- data/test/models/non_primary_key.rb +4 -0
- data/test/models/notification.rb +5 -0
- data/test/models/numeric_data.rb +12 -0
- data/test/models/order.rb +6 -0
- data/test/models/organization.rb +16 -0
- data/test/models/other_dog.rb +7 -0
- data/test/models/owner.rb +39 -0
- data/test/models/parrot.rb +36 -0
- data/test/models/person.rb +147 -0
- data/test/models/personal_legacy_thing.rb +6 -0
- data/test/models/pet.rb +20 -0
- data/test/models/pet_treasure.rb +8 -0
- data/test/models/pirate.rb +116 -0
- data/test/models/possession.rb +5 -0
- data/test/models/post.rb +371 -0
- data/test/models/price_estimate.rb +14 -0
- data/test/models/professor.rb +7 -0
- data/test/models/project.rb +42 -0
- data/test/models/publisher/article.rb +6 -0
- data/test/models/publisher/magazine.rb +5 -0
- data/test/models/publisher.rb +4 -0
- data/test/models/randomly_named_c1.rb +5 -0
- data/test/models/rating.rb +8 -0
- data/test/models/reader.rb +25 -0
- data/test/models/recipe.rb +5 -0
- data/test/models/record.rb +4 -0
- data/test/models/reference.rb +25 -0
- data/test/models/reply.rb +79 -0
- 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 +42 -0
- data/test/models/ship_part.rb +10 -0
- data/test/models/shop.rb +19 -0
- data/test/models/shop_account.rb +8 -0
- data/test/models/speedometer.rb +8 -0
- data/test/models/sponsor.rb +10 -0
- data/test/models/squeak.rb +6 -0
- data/test/models/strict_zine.rb +7 -0
- data/test/models/string_key_object.rb +5 -0
- data/test/models/student.rb +6 -0
- data/test/models/subject.rb +16 -0
- data/test/models/subscriber.rb +10 -0
- data/test/models/subscription.rb +8 -0
- data/test/models/tag.rb +16 -0
- data/test/models/tagging.rb +20 -0
- data/test/models/task.rb +7 -0
- data/test/models/topic.rb +153 -0
- data/test/models/toy.rb +10 -0
- data/test/models/traffic_light.rb +6 -0
- data/test/models/treasure.rb +16 -0
- data/test/models/treaty.rb +5 -0
- data/test/models/tree.rb +5 -0
- data/test/models/tuning_peg.rb +6 -0
- data/test/models/tyre.rb +13 -0
- data/test/models/user.rb +22 -0
- data/test/models/uuid_child.rb +5 -0
- data/test/models/uuid_item.rb +8 -0
- data/test/models/uuid_parent.rb +5 -0
- data/test/models/vegetables.rb +33 -0
- data/test/models/vehicle.rb +7 -0
- data/test/models/vertex.rb +11 -0
- data/test/models/warehouse_thing.rb +7 -0
- data/test/models/wheel.rb +5 -0
- data/test/models/without_table.rb +5 -0
- data/test/models/zine.rb +5 -0
- data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
- data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
- data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
- data/test/schema/mysql2_specific_schema.rb +82 -0
- data/test/schema/oracle_specific_schema.rb +38 -0
- data/test/schema/postgresql_specific_schema.rb +125 -0
- data/test/schema/schema.rb +1237 -0
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +11 -0
- data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
- data/test/support/config.rb +43 -0
- data/test/support/connection.rb +29 -0
- data/test/support/connection_helper.rb +16 -0
- data/test/support/ddl_helper.rb +10 -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 +22 -0
- data/test/support/stubs/strong_parameters.rb +40 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
- data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
- data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
- metadata +876 -0
@@ -0,0 +1,522 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/post"
|
5
|
+
require "models/author"
|
6
|
+
require "models/developer"
|
7
|
+
require "models/computer"
|
8
|
+
require "models/project"
|
9
|
+
require "models/comment"
|
10
|
+
require "models/category"
|
11
|
+
require "models/person"
|
12
|
+
require "models/reference"
|
13
|
+
|
14
|
+
class RelationScopingTest < ActiveRecord::TestCase
|
15
|
+
fixtures :authors, :author_addresses, :developers, :projects, :comments, :posts, :developers_projects
|
16
|
+
|
17
|
+
setup do
|
18
|
+
developers(:david)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_unscoped_breaks_caching
|
22
|
+
author = authors :mary
|
23
|
+
assert_nil author.first_post
|
24
|
+
post = FirstPost.unscoped do
|
25
|
+
author.reload.first_post
|
26
|
+
end
|
27
|
+
assert post
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_scope_breaks_caching_on_collections
|
31
|
+
author = authors :david
|
32
|
+
ids = author.reload.special_posts_with_default_scope.map(&:id)
|
33
|
+
assert_equal [1, 5, 6], ids.sort
|
34
|
+
scoped_posts = SpecialPostWithDefaultScope.unscoped do
|
35
|
+
author = authors :david
|
36
|
+
author.reload.special_posts_with_default_scope.to_a
|
37
|
+
end
|
38
|
+
assert_equal author.posts.map(&:id).sort, scoped_posts.map(&:id).sort
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_reverse_order
|
42
|
+
assert_equal Developer.order("id DESC").to_a.reverse, Developer.order("id DESC").reverse_order
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_reverse_order_with_arel_node
|
46
|
+
assert_equal Developer.order("id DESC").to_a.reverse, Developer.order(Developer.arel_table[:id].desc).reverse_order
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_reverse_order_with_multiple_arel_nodes
|
50
|
+
assert_equal Developer.order("id DESC").order("name DESC").to_a.reverse, Developer.order(Developer.arel_table[:id].desc).order(Developer.arel_table[:name].desc).reverse_order
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_reverse_order_with_arel_nodes_and_strings
|
54
|
+
assert_equal Developer.order("id DESC").order("name DESC").to_a.reverse, Developer.order("id DESC").order(Developer.arel_table[:name].desc).reverse_order
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_double_reverse_order_produces_original_order
|
58
|
+
assert_equal Developer.order("name DESC"), Developer.order("name DESC").reverse_order.reverse_order
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_scoped_find
|
62
|
+
Developer.where("name = 'David'").scoping do
|
63
|
+
assert_nothing_raised { Developer.find(1) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_scoped_find_first
|
68
|
+
developer = Developer.find(10)
|
69
|
+
Developer.where("salary = 100000").scoping do
|
70
|
+
assert_equal developer, Developer.order("name").first
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_scoped_find_last
|
75
|
+
highest_salary = Developer.order("salary DESC").first
|
76
|
+
|
77
|
+
Developer.order("salary").scoping do
|
78
|
+
assert_equal highest_salary, Developer.last
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_scoped_find_last_preserves_scope
|
83
|
+
lowest_salary = Developer.order("salary ASC").first
|
84
|
+
highest_salary = Developer.order("salary DESC").first
|
85
|
+
|
86
|
+
Developer.order("salary").scoping do
|
87
|
+
assert_equal highest_salary, Developer.last
|
88
|
+
assert_equal lowest_salary, Developer.first
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_scoped_find_combines_and_sanitizes_conditions
|
93
|
+
Developer.where("salary = 9000").scoping do
|
94
|
+
assert_equal developers(:poor_jamis), Developer.where("name = 'Jamis'").first
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_scoped_unscoped
|
99
|
+
DeveloperOrderedBySalary.where("salary = 9000").scoping do
|
100
|
+
assert_equal 11, DeveloperOrderedBySalary.first.id
|
101
|
+
assert_equal 1, DeveloperOrderedBySalary.unscoped.first.id
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_scoped_default_scoped
|
106
|
+
DeveloperOrderedBySalary.where("salary = 9000").scoping do
|
107
|
+
assert_equal 11, DeveloperOrderedBySalary.first.id
|
108
|
+
assert_equal 2, DeveloperOrderedBySalary.default_scoped.first.id
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_scoped_find_all
|
113
|
+
Developer.where("name = 'David'").scoping do
|
114
|
+
assert_equal [developers(:david)], Developer.all
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_scoped_find_select
|
119
|
+
Developer.select("id, name").scoping do
|
120
|
+
developer = Developer.where("name = 'David'").first
|
121
|
+
assert_equal "David", developer.name
|
122
|
+
assert_not developer.has_attribute?(:salary)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_scope_select_concatenates
|
127
|
+
Developer.select("id, name").scoping do
|
128
|
+
developer = Developer.select("salary").where("name = 'David'").first
|
129
|
+
assert_equal 80000, developer.salary
|
130
|
+
assert developer.has_attribute?(:id)
|
131
|
+
assert developer.has_attribute?(:name)
|
132
|
+
assert developer.has_attribute?(:salary)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_scoped_count
|
137
|
+
Developer.where("name = 'David'").scoping do
|
138
|
+
assert_equal 1, Developer.count
|
139
|
+
end
|
140
|
+
|
141
|
+
Developer.where("salary = 100000").scoping do
|
142
|
+
assert_equal 8, Developer.count
|
143
|
+
assert_equal 1, Developer.where("name LIKE 'fixture_1%'").count
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_scoped_find_with_annotation
|
148
|
+
Developer.annotate("scoped").scoping do
|
149
|
+
developer = nil
|
150
|
+
assert_sql(%r{/\* scoped \*/}) do
|
151
|
+
developer = Developer.where("name = 'David'").first
|
152
|
+
end
|
153
|
+
assert_equal "David", developer.name
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_find_with_annotation_unscoped
|
158
|
+
Developer.annotate("scoped").unscoped do
|
159
|
+
developer = nil
|
160
|
+
log = capture_sql do
|
161
|
+
developer = Developer.where("name = 'David'").first
|
162
|
+
end
|
163
|
+
|
164
|
+
assert_not_predicate log, :empty?
|
165
|
+
assert_predicate log.select { |query| query.match?(%r{/\* scoped \*/}) }, :empty?
|
166
|
+
|
167
|
+
assert_equal "David", developer.name
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_find_with_annotation_unscope
|
172
|
+
developer = nil
|
173
|
+
log = capture_sql do
|
174
|
+
developer = Developer.annotate("unscope").
|
175
|
+
where("name = 'David'").
|
176
|
+
unscope(:annotate).first
|
177
|
+
end
|
178
|
+
|
179
|
+
assert_not_predicate log, :empty?
|
180
|
+
assert_predicate log.select { |query| query.match?(%r{/\* unscope \*/}) }, :empty?
|
181
|
+
|
182
|
+
assert_equal "David", developer.name
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_scoped_find_include
|
186
|
+
# with the include, will retrieve only developers for the given project
|
187
|
+
scoped_developers = Developer.includes(:projects).scoping do
|
188
|
+
Developer.where("projects.id" => 2).to_a
|
189
|
+
end
|
190
|
+
assert_includes scoped_developers, developers(:david)
|
191
|
+
assert_not_includes scoped_developers, developers(:jamis)
|
192
|
+
assert_equal 1, scoped_developers.size
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_scoped_find_joins
|
196
|
+
scoped_developers = Developer.joins("JOIN developers_projects ON id = developer_id").scoping do
|
197
|
+
Developer.where("developers_projects.project_id = 2").to_a
|
198
|
+
end
|
199
|
+
|
200
|
+
assert_includes scoped_developers, developers(:david)
|
201
|
+
assert_not_includes scoped_developers, developers(:jamis)
|
202
|
+
assert_equal 1, scoped_developers.size
|
203
|
+
assert_equal developers(:david).attributes, scoped_developers.first.attributes
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_scoped_create_with_where
|
207
|
+
new_comment = VerySpecialComment.where(post_id: 1).scoping do
|
208
|
+
VerySpecialComment.create body: "Wonderful world"
|
209
|
+
end
|
210
|
+
|
211
|
+
assert_equal 1, new_comment.post_id
|
212
|
+
assert_includes Post.find(1).comments, new_comment
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_scoped_create_with_where_with_array
|
216
|
+
new_comment = VerySpecialComment.where(label: [0, 1], post_id: 1).scoping do
|
217
|
+
VerySpecialComment.create body: "Wonderful world"
|
218
|
+
end
|
219
|
+
|
220
|
+
assert_equal 1, new_comment.post_id
|
221
|
+
assert_equal "default", new_comment.label
|
222
|
+
assert_includes Post.find(1).comments, new_comment
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_scoped_create_with_where_with_range
|
226
|
+
new_comment = VerySpecialComment.where(label: 0..1, post_id: 1).scoping do
|
227
|
+
VerySpecialComment.create body: "Wonderful world"
|
228
|
+
end
|
229
|
+
|
230
|
+
assert_equal 1, new_comment.post_id
|
231
|
+
assert_equal "default", new_comment.label
|
232
|
+
assert_includes Post.find(1).comments, new_comment
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_scoped_create_with_create_with
|
236
|
+
new_comment = VerySpecialComment.create_with(post_id: 1).scoping do
|
237
|
+
VerySpecialComment.create body: "Wonderful world"
|
238
|
+
end
|
239
|
+
|
240
|
+
assert_equal 1, new_comment.post_id
|
241
|
+
assert_includes Post.find(1).comments, new_comment
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_scoped_create_with_create_with_has_higher_priority
|
245
|
+
new_comment = VerySpecialComment.where(post_id: 2).create_with(post_id: 1).scoping do
|
246
|
+
VerySpecialComment.create body: "Wonderful world"
|
247
|
+
end
|
248
|
+
|
249
|
+
assert_equal 1, new_comment.post_id
|
250
|
+
assert_includes Post.find(1).comments, new_comment
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_ensure_that_method_scoping_is_correctly_restored
|
254
|
+
begin
|
255
|
+
Developer.where("name = 'Jamis'").scoping do
|
256
|
+
raise "an exception"
|
257
|
+
end
|
258
|
+
rescue
|
259
|
+
end
|
260
|
+
|
261
|
+
assert_not Developer.all.to_sql.include?("name = 'Jamis'"), "scope was not restored"
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_default_scope_filters_on_joins
|
265
|
+
assert_equal 1, DeveloperFilteredOnJoins.all.count
|
266
|
+
assert_equal DeveloperFilteredOnJoins.all.first, developers(:david).becomes(DeveloperFilteredOnJoins)
|
267
|
+
end
|
268
|
+
|
269
|
+
def test_update_all_default_scope_filters_on_joins
|
270
|
+
DeveloperFilteredOnJoins.update_all(salary: 65000)
|
271
|
+
assert_equal 65000, Developer.find(developers(:david).id).salary
|
272
|
+
|
273
|
+
# has not changed jamis
|
274
|
+
assert_not_equal 65000, Developer.find(developers(:jamis).id).salary
|
275
|
+
end
|
276
|
+
|
277
|
+
def test_delete_all_default_scope_filters_on_joins
|
278
|
+
assert_not_equal [], DeveloperFilteredOnJoins.all
|
279
|
+
|
280
|
+
DeveloperFilteredOnJoins.delete_all()
|
281
|
+
|
282
|
+
assert_equal [], DeveloperFilteredOnJoins.all
|
283
|
+
assert_not_equal [], Developer.all
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_current_scope_does_not_pollute_sibling_subclasses
|
287
|
+
Comment.none.scoping do
|
288
|
+
assert_not_predicate SpecialComment.all, :any?
|
289
|
+
assert_not_predicate VerySpecialComment.all, :any?
|
290
|
+
assert_not_predicate SubSpecialComment.all, :any?
|
291
|
+
end
|
292
|
+
|
293
|
+
SpecialComment.none.scoping do
|
294
|
+
assert_predicate Comment.all, :any?
|
295
|
+
assert_predicate VerySpecialComment.all, :any?
|
296
|
+
assert_not_predicate SubSpecialComment.all, :any?
|
297
|
+
end
|
298
|
+
|
299
|
+
SubSpecialComment.none.scoping do
|
300
|
+
assert_predicate Comment.all, :any?
|
301
|
+
assert_predicate VerySpecialComment.all, :any?
|
302
|
+
assert_predicate SpecialComment.all, :any?
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_scoping_is_correctly_restored
|
307
|
+
Comment.unscoped do
|
308
|
+
SpecialComment.unscoped.created
|
309
|
+
end
|
310
|
+
|
311
|
+
assert_nil Comment.current_scope
|
312
|
+
assert_nil SpecialComment.current_scope
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_scoping_respects_current_class
|
316
|
+
Comment.unscoped do
|
317
|
+
assert_equal "a comment...", Comment.all.what_are_you
|
318
|
+
assert_equal "a special comment...", SpecialComment.all.what_are_you
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_scoping_respects_sti_constraint
|
323
|
+
Comment.unscoped do
|
324
|
+
assert_equal comments(:greetings), Comment.find(1)
|
325
|
+
assert_raises(ActiveRecord::RecordNotFound) { SpecialComment.find(1) }
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_scoping_with_klass_method_works_in_the_scope_block
|
330
|
+
expected = SpecialPostWithDefaultScope.unscoped.to_a
|
331
|
+
assert_equal expected, SpecialPostWithDefaultScope.unscoped_all
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_scoping_with_query_method_works_in_the_scope_block
|
335
|
+
expected = SpecialPostWithDefaultScope.unscoped.where(author_id: 0).to_a
|
336
|
+
assert_equal expected, SpecialPostWithDefaultScope.authorless
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_circular_joins_with_scoping_does_not_crash
|
340
|
+
posts = Post.joins(comments: :post).scoping do
|
341
|
+
Post.first(10)
|
342
|
+
end
|
343
|
+
assert_equal posts, Post.joins(comments: :post).first(10)
|
344
|
+
end
|
345
|
+
|
346
|
+
def test_circular_left_joins_with_scoping_does_not_crash
|
347
|
+
posts = Post.left_joins(comments: :post).scoping do
|
348
|
+
Post.first(10)
|
349
|
+
end
|
350
|
+
assert_equal posts, Post.left_joins(comments: :post).first(10)
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
class NestedRelationScopingTest < ActiveRecord::TestCase
|
355
|
+
fixtures :authors, :author_addresses, :developers, :projects, :comments, :posts
|
356
|
+
|
357
|
+
def test_merge_options
|
358
|
+
Developer.where("salary = 80000").scoping do
|
359
|
+
Developer.limit(10).scoping do
|
360
|
+
devs = Developer.all
|
361
|
+
sql = devs.to_sql
|
362
|
+
assert_match "(salary = 80000)", sql
|
363
|
+
assert_match(/LIMIT 10|ROWNUM <= 10|FETCH FIRST 10 ROWS ONLY/, sql)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_merge_inner_scope_has_priority
|
369
|
+
Developer.limit(5).scoping do
|
370
|
+
Developer.limit(10).scoping do
|
371
|
+
assert_equal 10, Developer.all.size
|
372
|
+
end
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_replace_options
|
377
|
+
Developer.where(name: "David").scoping do
|
378
|
+
Developer.unscoped do
|
379
|
+
assert_equal "Jamis", Developer.where(name: "Jamis").first[:name]
|
380
|
+
end
|
381
|
+
|
382
|
+
assert_equal "David", Developer.first[:name]
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
def test_three_level_nested_exclusive_scoped_find
|
387
|
+
Developer.where("name = 'Jamis'").scoping do
|
388
|
+
assert_equal "Jamis", Developer.first.name
|
389
|
+
|
390
|
+
Developer.unscoped.where("name = 'David'") do
|
391
|
+
assert_equal "David", Developer.first.name
|
392
|
+
|
393
|
+
Developer.unscoped.where("name = 'Maiha'") do
|
394
|
+
assert_nil Developer.first
|
395
|
+
end
|
396
|
+
|
397
|
+
# ensure that scoping is restored
|
398
|
+
assert_equal "David", Developer.first.name
|
399
|
+
end
|
400
|
+
|
401
|
+
# ensure that scoping is restored
|
402
|
+
assert_equal "Jamis", Developer.first.name
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
def test_nested_scoped_create
|
407
|
+
comment = Comment.create_with(post_id: 1).scoping do
|
408
|
+
Comment.create_with(post_id: 2).scoping do
|
409
|
+
Comment.create body: "Hey guys, nested scopes are broken. Please fix!"
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
assert_equal 2, comment.post_id
|
414
|
+
end
|
415
|
+
|
416
|
+
def test_nested_exclusive_scope_for_create
|
417
|
+
comment = Comment.create_with(body: "Hey guys, nested scopes are broken. Please fix!").scoping do
|
418
|
+
Comment.unscoped.create_with(post_id: 1).scoping do
|
419
|
+
assert_predicate Comment.new.body, :blank?
|
420
|
+
Comment.create body: "Hey guys"
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
assert_equal 1, comment.post_id
|
425
|
+
assert_equal "Hey guys", comment.body
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
class HasManyScopingTest < ActiveRecord::TestCase
|
430
|
+
fixtures :comments, :posts, :people, :references
|
431
|
+
|
432
|
+
def setup
|
433
|
+
@welcome = Post.find(1)
|
434
|
+
end
|
435
|
+
|
436
|
+
def test_forwarding_of_static_methods
|
437
|
+
assert_equal "a comment...", Comment.what_are_you
|
438
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
439
|
+
end
|
440
|
+
|
441
|
+
def test_forwarding_to_scoped
|
442
|
+
assert_equal 5, Comment.search_by_type("Comment").size
|
443
|
+
assert_equal 2, @welcome.comments.search_by_type("Comment").size
|
444
|
+
end
|
445
|
+
|
446
|
+
def test_nested_scope_finder
|
447
|
+
Comment.where("1=0").scoping do
|
448
|
+
assert_equal 2, @welcome.comments.count
|
449
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
450
|
+
end
|
451
|
+
|
452
|
+
Comment.where("1=1").scoping do
|
453
|
+
assert_equal 2, @welcome.comments.count
|
454
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
def test_none_scoping
|
459
|
+
Comment.none.scoping do
|
460
|
+
assert_equal 2, @welcome.comments.count
|
461
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
462
|
+
end
|
463
|
+
|
464
|
+
Comment.where("1=1").scoping do
|
465
|
+
assert_equal 2, @welcome.comments.count
|
466
|
+
assert_equal "a comment...", @welcome.comments.what_are_you
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
470
|
+
def test_should_maintain_default_scope_on_associations
|
471
|
+
magician = BadReference.find(1)
|
472
|
+
assert_equal [magician], people(:michael).bad_references
|
473
|
+
end
|
474
|
+
|
475
|
+
def test_should_default_scope_on_associations_is_overridden_by_association_conditions
|
476
|
+
reference = references(:michael_unicyclist).becomes(BadReference)
|
477
|
+
assert_equal [reference], people(:michael).fixed_bad_references
|
478
|
+
end
|
479
|
+
|
480
|
+
def test_should_maintain_default_scope_on_eager_loaded_associations
|
481
|
+
michael = Person.where(id: people(:michael).id).includes(:bad_references).first
|
482
|
+
magician = BadReference.find(1)
|
483
|
+
assert_equal [magician], michael.bad_references
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
class HasAndBelongsToManyScopingTest < ActiveRecord::TestCase
|
488
|
+
fixtures :posts, :categories, :categories_posts
|
489
|
+
|
490
|
+
def setup
|
491
|
+
@welcome = Post.find(1)
|
492
|
+
end
|
493
|
+
|
494
|
+
def test_forwarding_of_static_methods
|
495
|
+
assert_equal "a category...", Category.what_are_you
|
496
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
497
|
+
end
|
498
|
+
|
499
|
+
def test_nested_scope_finder
|
500
|
+
Category.where("1=0").scoping do
|
501
|
+
assert_equal 2, @welcome.categories.count
|
502
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
503
|
+
end
|
504
|
+
|
505
|
+
Category.where("1=1").scoping do
|
506
|
+
assert_equal 2, @welcome.categories.count
|
507
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
def test_none_scoping
|
512
|
+
Category.none.scoping do
|
513
|
+
assert_equal 2, @welcome.categories.count
|
514
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
515
|
+
end
|
516
|
+
|
517
|
+
Category.where("1=1").scoping do
|
518
|
+
assert_equal 2, @welcome.categories.count
|
519
|
+
assert_equal "a category...", @welcome.categories.what_are_you
|
520
|
+
end
|
521
|
+
end
|
522
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/user"
|
5
|
+
|
6
|
+
class SecureTokenTest < ActiveRecord::TestCase
|
7
|
+
setup do
|
8
|
+
@user = User.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_token_values_are_generated_for_specified_attributes_and_persisted_on_save
|
12
|
+
@user.save
|
13
|
+
assert_not_nil @user.token
|
14
|
+
assert_not_nil @user.auth_token
|
15
|
+
assert_equal 24, @user.token.size
|
16
|
+
assert_equal 36, @user.auth_token.size
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_regenerating_the_secure_token
|
20
|
+
@user.save
|
21
|
+
old_token = @user.token
|
22
|
+
old_auth_token = @user.auth_token
|
23
|
+
@user.regenerate_token
|
24
|
+
@user.regenerate_auth_token
|
25
|
+
|
26
|
+
assert_not_equal @user.token, old_token
|
27
|
+
assert_not_equal @user.auth_token, old_auth_token
|
28
|
+
|
29
|
+
assert_equal 24, @user.token.size
|
30
|
+
assert_equal 36, @user.auth_token.size
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_token_value_not_overwritten_when_present
|
34
|
+
@user.token = "custom-secure-token"
|
35
|
+
@user.save
|
36
|
+
|
37
|
+
assert_equal "custom-secure-token", @user.token
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_token_length_cannot_be_less_than_24_characters
|
41
|
+
assert_raises(ActiveRecord::SecureToken::MinimumLengthError) do
|
42
|
+
@user.class_eval do
|
43
|
+
has_secure_token :not_valid_token, length: 12
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/contact"
|
5
|
+
require "models/topic"
|
6
|
+
require "models/book"
|
7
|
+
require "models/author"
|
8
|
+
require "models/post"
|
9
|
+
|
10
|
+
class SerializationTest < ActiveRecord::TestCase
|
11
|
+
fixtures :books
|
12
|
+
|
13
|
+
FORMATS = [ :json ]
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@contact_attributes = {
|
17
|
+
name: "aaron stack",
|
18
|
+
age: 25,
|
19
|
+
avatar: "binarydata",
|
20
|
+
created_at: Time.utc(2006, 8, 1),
|
21
|
+
awesome: false,
|
22
|
+
preferences: { gem: "<strong>ruby</strong>" },
|
23
|
+
alternative_id: nil,
|
24
|
+
id: nil
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_include_root_in_json_is_false_by_default
|
29
|
+
assert_equal false, ActiveRecord::Base.include_root_in_json, "include_root_in_json should be false by default but was not"
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_serialize_should_be_reversible
|
33
|
+
FORMATS.each do |format|
|
34
|
+
@serialized = Contact.new.public_send("to_#{format}")
|
35
|
+
contact = Contact.new.public_send("from_#{format}", @serialized)
|
36
|
+
|
37
|
+
assert_equal @contact_attributes.keys.collect(&:to_s).sort, contact.attributes.keys.collect(&:to_s).sort, "For #{format}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_serialize_should_allow_attribute_only_filtering
|
42
|
+
FORMATS.each do |format|
|
43
|
+
@serialized = Contact.new(@contact_attributes).public_send("to_#{format}", only: [ :age, :name ])
|
44
|
+
contact = Contact.new.public_send("from_#{format}", @serialized)
|
45
|
+
assert_equal @contact_attributes[:name], contact.name, "For #{format}"
|
46
|
+
assert_nil contact.avatar, "For #{format}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_serialize_should_allow_attribute_except_filtering
|
51
|
+
FORMATS.each do |format|
|
52
|
+
@serialized = Contact.new(@contact_attributes).public_send("to_#{format}", except: [ :age, :name ])
|
53
|
+
contact = Contact.new.public_send("from_#{format}", @serialized)
|
54
|
+
assert_nil contact.name, "For #{format}"
|
55
|
+
assert_nil contact.age, "For #{format}"
|
56
|
+
assert_equal @contact_attributes[:awesome], contact.awesome, "For #{format}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_include_root_in_json_allows_inheritance
|
61
|
+
original_root_in_json = ActiveRecord::Base.include_root_in_json
|
62
|
+
ActiveRecord::Base.include_root_in_json = true
|
63
|
+
|
64
|
+
klazz = Class.new(ActiveRecord::Base)
|
65
|
+
klazz.table_name = "topics"
|
66
|
+
assert klazz.include_root_in_json
|
67
|
+
|
68
|
+
klazz.include_root_in_json = false
|
69
|
+
assert ActiveRecord::Base.include_root_in_json
|
70
|
+
assert_not klazz.include_root_in_json
|
71
|
+
assert_not klazz.new.include_root_in_json
|
72
|
+
ensure
|
73
|
+
ActiveRecord::Base.include_root_in_json = original_root_in_json
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_read_attribute_for_serialization_with_format_without_method_missing
|
77
|
+
klazz = Class.new(ActiveRecord::Base)
|
78
|
+
klazz.table_name = "books"
|
79
|
+
|
80
|
+
book = klazz.new
|
81
|
+
assert_nil book.read_attribute_for_serialization(:format)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_read_attribute_for_serialization_with_format_after_init
|
85
|
+
klazz = Class.new(ActiveRecord::Base)
|
86
|
+
klazz.table_name = "books"
|
87
|
+
|
88
|
+
book = klazz.new(format: "paperback")
|
89
|
+
assert_equal "paperback", book.read_attribute_for_serialization(:format)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_read_attribute_for_serialization_with_format_after_find
|
93
|
+
klazz = Class.new(ActiveRecord::Base)
|
94
|
+
klazz.table_name = "books"
|
95
|
+
|
96
|
+
book = klazz.find(books(:awdr).id)
|
97
|
+
assert_equal "paperback", book.read_attribute_for_serialization(:format)
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_find_records_by_serialized_attributes_through_join
|
101
|
+
author = Author.create!(name: "David")
|
102
|
+
author.serialized_posts.create!(title: "Hello")
|
103
|
+
|
104
|
+
assert_equal 1, Author.joins(:serialized_posts).where(name: "David", serialized_posts: { title: "Hello" }).length
|
105
|
+
end
|
106
|
+
end
|