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.
Files changed (753) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +299 -0
  3. data/LICENSE +55 -0
  4. data/MANIFEST +14 -0
  5. data/ParameterizedQueries README +39 -0
  6. data/README +210 -0
  7. data/ext/Makefile +270 -0
  8. data/ext/Makefile.nt32 +181 -0
  9. data/ext/Makefile.nt32.191 +212 -0
  10. data/ext/extconf.rb +320 -0
  11. data/ext/gil_release_version.h +3 -0
  12. data/ext/ibm_db.bundle +0 -0
  13. data/ext/ibm_db.c +11865 -0
  14. data/ext/ibm_db.o +0 -0
  15. data/ext/mkmf.log +98 -0
  16. data/ext/ruby_ibm_db.h +241 -0
  17. data/ext/ruby_ibm_db_cli.c +867 -0
  18. data/ext/ruby_ibm_db_cli.h +508 -0
  19. data/ext/ruby_ibm_db_cli.o +0 -0
  20. data/ext/unicode_support_version.h +3 -0
  21. data/init.rb +42 -0
  22. data/lib/IBM_DB.rb +27 -0
  23. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +4407 -0
  24. data/lib/active_record/connection_adapters/ibm_db_pstmt.rb +1965 -0
  25. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -0
  26. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -0
  27. data/lib/ibm_db.bundle +0 -0
  28. data/test/active_record/connection_adapters/fake_adapter.rb +52 -0
  29. data/test/activejob/destroy_association_async_test.rb +305 -0
  30. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  31. data/test/activejob/helper.rb +15 -0
  32. data/test/assets/example.log +1 -0
  33. data/test/assets/flowers.jpg +0 -0
  34. data/test/assets/schema_dump_5_1.yml +345 -0
  35. data/test/assets/test.txt +1 -0
  36. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  37. data/test/cases/adapter_test.rb +565 -0
  38. data/test/cases/adapters/mysql2/active_schema_test.rb +203 -0
  39. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  40. data/test/cases/adapters/mysql2/bind_parameter_test.rb +52 -0
  41. data/test/cases/adapters/mysql2/boolean_test.rb +102 -0
  42. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +65 -0
  43. data/test/cases/adapters/mysql2/charset_collation_test.rb +57 -0
  44. data/test/cases/adapters/mysql2/connection_test.rb +208 -0
  45. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  46. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +49 -0
  47. data/test/cases/adapters/mysql2/enum_test.rb +47 -0
  48. data/test/cases/adapters/mysql2/explain_test.rb +23 -0
  49. data/test/cases/adapters/mysql2/json_test.rb +24 -0
  50. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  51. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +238 -0
  52. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  53. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  54. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  55. data/test/cases/adapters/mysql2/schema_migrations_test.rb +64 -0
  56. data/test/cases/adapters/mysql2/schema_test.rb +128 -0
  57. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  58. data/test/cases/adapters/mysql2/sp_test.rb +38 -0
  59. data/test/cases/adapters/mysql2/sql_types_test.rb +16 -0
  60. data/test/cases/adapters/mysql2/table_options_test.rb +125 -0
  61. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  62. data/test/cases/adapters/mysql2/unsigned_type_test.rb +68 -0
  63. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  64. data/test/cases/adapters/postgresql/active_schema_test.rb +113 -0
  65. data/test/cases/adapters/postgresql/array_test.rb +394 -0
  66. data/test/cases/adapters/postgresql/bit_string_test.rb +84 -0
  67. data/test/cases/adapters/postgresql/bytea_test.rb +135 -0
  68. data/test/cases/adapters/postgresql/case_insensitive_test.rb +27 -0
  69. data/test/cases/adapters/postgresql/change_schema_test.rb +40 -0
  70. data/test/cases/adapters/postgresql/cidr_test.rb +27 -0
  71. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  72. data/test/cases/adapters/postgresql/collation_test.rb +55 -0
  73. data/test/cases/adapters/postgresql/composite_test.rb +134 -0
  74. data/test/cases/adapters/postgresql/connection_test.rb +245 -0
  75. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  76. data/test/cases/adapters/postgresql/datatype_test.rb +89 -0
  77. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  78. data/test/cases/adapters/postgresql/domain_test.rb +49 -0
  79. data/test/cases/adapters/postgresql/enum_test.rb +93 -0
  80. data/test/cases/adapters/postgresql/explain_test.rb +22 -0
  81. data/test/cases/adapters/postgresql/extension_migration_test.rb +64 -0
  82. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  83. data/test/cases/adapters/postgresql/full_text_test.rb +46 -0
  84. data/test/cases/adapters/postgresql/geometric_test.rb +372 -0
  85. data/test/cases/adapters/postgresql/hstore_test.rb +390 -0
  86. data/test/cases/adapters/postgresql/infinity_test.rb +108 -0
  87. data/test/cases/adapters/postgresql/integer_test.rb +27 -0
  88. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  89. data/test/cases/adapters/postgresql/json_test.rb +52 -0
  90. data/test/cases/adapters/postgresql/ltree_test.rb +51 -0
  91. data/test/cases/adapters/postgresql/money_test.rb +127 -0
  92. data/test/cases/adapters/postgresql/network_test.rb +102 -0
  93. data/test/cases/adapters/postgresql/numbers_test.rb +51 -0
  94. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  95. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  96. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  97. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +447 -0
  98. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  99. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  100. data/test/cases/adapters/postgresql/quoting_test.rb +50 -0
  101. data/test/cases/adapters/postgresql/range_test.rb +457 -0
  102. data/test/cases/adapters/postgresql/referential_integrity_test.rb +112 -0
  103. data/test/cases/adapters/postgresql/rename_table_test.rb +35 -0
  104. data/test/cases/adapters/postgresql/schema_authorization_test.rb +110 -0
  105. data/test/cases/adapters/postgresql/schema_test.rb +713 -0
  106. data/test/cases/adapters/postgresql/serial_test.rb +156 -0
  107. data/test/cases/adapters/postgresql/statement_pool_test.rb +61 -0
  108. data/test/cases/adapters/postgresql/timestamp_test.rb +92 -0
  109. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  110. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  111. data/test/cases/adapters/postgresql/type_lookup_test.rb +35 -0
  112. data/test/cases/adapters/postgresql/utils_test.rb +64 -0
  113. data/test/cases/adapters/postgresql/uuid_test.rb +411 -0
  114. data/test/cases/adapters/postgresql/xml_test.rb +50 -0
  115. data/test/cases/adapters/sqlite3/collation_test.rb +64 -0
  116. data/test/cases/adapters/sqlite3/copy_table_test.rb +101 -0
  117. data/test/cases/adapters/sqlite3/explain_test.rb +23 -0
  118. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  119. data/test/cases/adapters/sqlite3/quoting_test.rb +79 -0
  120. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  121. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +628 -0
  122. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  123. data/test/cases/adapters/sqlite3/statement_pool_test.rb +21 -0
  124. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  125. data/test/cases/aggregations_test.rb +170 -0
  126. data/test/cases/annotate_test.rb +46 -0
  127. data/test/cases/ar_schema_test.rb +213 -0
  128. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  129. data/test/cases/arel/attributes/math_test.rb +83 -0
  130. data/test/cases/arel/attributes_test.rb +27 -0
  131. data/test/cases/arel/collectors/bind_test.rb +40 -0
  132. data/test/cases/arel/collectors/composite_test.rb +47 -0
  133. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  134. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  135. data/test/cases/arel/crud_test.rb +65 -0
  136. data/test/cases/arel/delete_manager_test.rb +53 -0
  137. data/test/cases/arel/factory_methods_test.rb +46 -0
  138. data/test/cases/arel/helper.rb +45 -0
  139. data/test/cases/arel/insert_manager_test.rb +241 -0
  140. data/test/cases/arel/nodes/and_test.rb +30 -0
  141. data/test/cases/arel/nodes/as_test.rb +36 -0
  142. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  143. data/test/cases/arel/nodes/bin_test.rb +35 -0
  144. data/test/cases/arel/nodes/binary_test.rb +29 -0
  145. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  146. data/test/cases/arel/nodes/case_test.rb +96 -0
  147. data/test/cases/arel/nodes/casted_test.rb +18 -0
  148. data/test/cases/arel/nodes/comment_test.rb +22 -0
  149. data/test/cases/arel/nodes/count_test.rb +35 -0
  150. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  151. data/test/cases/arel/nodes/descending_test.rb +46 -0
  152. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  153. data/test/cases/arel/nodes/equality_test.rb +62 -0
  154. data/test/cases/arel/nodes/extract_test.rb +43 -0
  155. data/test/cases/arel/nodes/false_test.rb +21 -0
  156. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  157. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  158. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  159. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  160. data/test/cases/arel/nodes/node_test.rb +22 -0
  161. data/test/cases/arel/nodes/not_test.rb +31 -0
  162. data/test/cases/arel/nodes/or_test.rb +36 -0
  163. data/test/cases/arel/nodes/over_test.rb +69 -0
  164. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  165. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  166. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  167. data/test/cases/arel/nodes/sum_test.rb +35 -0
  168. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  169. data/test/cases/arel/nodes/true_test.rb +21 -0
  170. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  171. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  172. data/test/cases/arel/nodes/window_test.rb +81 -0
  173. data/test/cases/arel/nodes_test.rb +34 -0
  174. data/test/cases/arel/select_manager_test.rb +1238 -0
  175. data/test/cases/arel/support/fake_record.rb +135 -0
  176. data/test/cases/arel/table_test.rb +216 -0
  177. data/test/cases/arel/update_manager_test.rb +126 -0
  178. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  179. data/test/cases/arel/visitors/dot_test.rb +90 -0
  180. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  181. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  182. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  183. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  184. data/test/cases/associations/association_scope_test.rb +16 -0
  185. data/test/cases/associations/belongs_to_associations_test.rb +1493 -0
  186. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +43 -0
  187. data/test/cases/associations/callbacks_test.rb +208 -0
  188. data/test/cases/associations/cascaded_eager_loading_test.rb +245 -0
  189. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +156 -0
  190. data/test/cases/associations/eager_load_nested_include_test.rb +127 -0
  191. data/test/cases/associations/eager_singularization_test.rb +148 -0
  192. data/test/cases/associations/eager_test.rb +1658 -0
  193. data/test/cases/associations/extension_test.rb +93 -0
  194. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1025 -0
  195. data/test/cases/associations/has_many_associations_test.rb +3074 -0
  196. data/test/cases/associations/has_many_through_associations_test.rb +1580 -0
  197. data/test/cases/associations/has_one_associations_test.rb +872 -0
  198. data/test/cases/associations/has_one_through_associations_test.rb +429 -0
  199. data/test/cases/associations/inner_join_association_test.rb +215 -0
  200. data/test/cases/associations/inverse_associations_test.rb +941 -0
  201. data/test/cases/associations/join_model_test.rb +787 -0
  202. data/test/cases/associations/left_outer_join_association_test.rb +123 -0
  203. data/test/cases/associations/nested_through_associations_test.rb +636 -0
  204. data/test/cases/associations/required_test.rb +127 -0
  205. data/test/cases/associations_test.rb +516 -0
  206. data/test/cases/attribute_decorators_test.rb +126 -0
  207. data/test/cases/attribute_methods/read_test.rb +60 -0
  208. data/test/cases/attribute_methods_test.rb +1124 -0
  209. data/test/cases/attribute_set_test.rb +270 -0
  210. data/test/cases/attribute_test.rb +246 -0
  211. data/test/cases/attributes_test.rb +371 -0
  212. data/test/cases/autosave_association_test.rb +1953 -0
  213. data/test/cases/base_prevent_writes_test.rb +229 -0
  214. data/test/cases/base_test.rb +1770 -0
  215. data/test/cases/batches_test.rb +695 -0
  216. data/test/cases/binary_test.rb +39 -0
  217. data/test/cases/bind_parameter_test.rb +283 -0
  218. data/test/cases/boolean_test.rb +52 -0
  219. data/test/cases/cache_key_test.rb +131 -0
  220. data/test/cases/calculations_test.rb +1361 -0
  221. data/test/cases/callbacks_test.rb +503 -0
  222. data/test/cases/clone_test.rb +45 -0
  223. data/test/cases/coders/json_test.rb +17 -0
  224. data/test/cases/coders/yaml_column_test.rb +66 -0
  225. data/test/cases/collection_cache_key_test.rb +272 -0
  226. data/test/cases/column_alias_test.rb +19 -0
  227. data/test/cases/column_definition_test.rb +34 -0
  228. data/test/cases/comment_test.rb +204 -0
  229. data/test/cases/connection_adapters/adapter_leasing_test.rb +60 -0
  230. data/test/cases/connection_adapters/connection_handler_test.rb +467 -0
  231. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  232. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  233. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  234. data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
  235. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  236. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  237. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  238. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +436 -0
  239. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +81 -0
  240. data/test/cases/connection_adapters/quoting_test.rb +13 -0
  241. data/test/cases/connection_adapters/schema_cache_test.rb +294 -0
  242. data/test/cases/connection_adapters/type_lookup_test.rb +119 -0
  243. data/test/cases/connection_management_test.rb +114 -0
  244. data/test/cases/connection_pool_test.rb +754 -0
  245. data/test/cases/connection_specification/resolver_test.rb +131 -0
  246. data/test/cases/core_test.rb +136 -0
  247. data/test/cases/counter_cache_test.rb +368 -0
  248. data/test/cases/custom_locking_test.rb +19 -0
  249. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  250. data/test/cases/database_configurations/resolver_test.rb +150 -0
  251. data/test/cases/database_configurations_test.rb +145 -0
  252. data/test/cases/database_selector_test.rb +296 -0
  253. data/test/cases/database_statements_test.rb +36 -0
  254. data/test/cases/date_test.rb +36 -0
  255. data/test/cases/date_time_precision_test.rb +129 -0
  256. data/test/cases/date_time_test.rb +76 -0
  257. data/test/cases/defaults_test.rb +254 -0
  258. data/test/cases/delegated_type_test.rb +57 -0
  259. data/test/cases/dirty_test.rb +959 -0
  260. data/test/cases/disconnected_test.rb +30 -0
  261. data/test/cases/dup_test.rb +184 -0
  262. data/test/cases/enum_test.rb +823 -0
  263. data/test/cases/errors_test.rb +16 -0
  264. data/test/cases/explain_subscriber_test.rb +66 -0
  265. data/test/cases/explain_test.rb +79 -0
  266. data/test/cases/filter_attributes_test.rb +153 -0
  267. data/test/cases/finder_respond_to_test.rb +60 -0
  268. data/test/cases/finder_test.rb +1676 -0
  269. data/test/cases/fixture_set/file_test.rb +152 -0
  270. data/test/cases/fixtures_test.rb +1645 -0
  271. data/test/cases/forbidden_attributes_protection_test.rb +130 -0
  272. data/test/cases/habtm_destroy_order_test.rb +61 -0
  273. data/test/cases/helper.rb +233 -0
  274. data/test/cases/hot_compatibility_test.rb +143 -0
  275. data/test/cases/i18n_test.rb +46 -0
  276. data/test/cases/inheritance_test.rb +671 -0
  277. data/test/cases/insert_all_test.rb +489 -0
  278. data/test/cases/instrumentation_test.rb +101 -0
  279. data/test/cases/integration_test.rb +243 -0
  280. data/test/cases/invalid_connection_test.rb +26 -0
  281. data/test/cases/invertible_migration_test.rb +527 -0
  282. data/test/cases/json_attribute_test.rb +35 -0
  283. data/test/cases/json_serialization_test.rb +310 -0
  284. data/test/cases/json_shared_test_cases.rb +290 -0
  285. data/test/cases/locking_test.rb +787 -0
  286. data/test/cases/log_subscriber_test.rb +267 -0
  287. data/test/cases/marshal_serialization_test.rb +39 -0
  288. data/test/cases/migration/change_schema_test.rb +504 -0
  289. data/test/cases/migration/change_table_test.rb +364 -0
  290. data/test/cases/migration/check_constraint_test.rb +162 -0
  291. data/test/cases/migration/column_attributes_test.rb +186 -0
  292. data/test/cases/migration/column_positioning_test.rb +68 -0
  293. data/test/cases/migration/columns_test.rb +326 -0
  294. data/test/cases/migration/command_recorder_test.rb +437 -0
  295. data/test/cases/migration/compatibility_test.rb +673 -0
  296. data/test/cases/migration/create_join_table_test.rb +167 -0
  297. data/test/cases/migration/foreign_key_test.rb +581 -0
  298. data/test/cases/migration/helper.rb +40 -0
  299. data/test/cases/migration/index_test.rb +267 -0
  300. data/test/cases/migration/logger_test.rb +39 -0
  301. data/test/cases/migration/pending_migrations_test.rb +106 -0
  302. data/test/cases/migration/references_foreign_key_test.rb +235 -0
  303. data/test/cases/migration/references_index_test.rb +120 -0
  304. data/test/cases/migration/references_statements_test.rb +137 -0
  305. data/test/cases/migration/rename_table_test.rb +116 -0
  306. data/test/cases/migration_test.rb +1525 -0
  307. data/test/cases/migrator_test.rb +527 -0
  308. data/test/cases/mixin_test.rb +64 -0
  309. data/test/cases/modules_test.rb +174 -0
  310. data/test/cases/multi_db_migrator_test.rb +223 -0
  311. data/test/cases/multiparameter_attributes_test.rb +399 -0
  312. data/test/cases/multiple_db_test.rb +116 -0
  313. data/test/cases/nested_attributes_test.rb +1119 -0
  314. data/test/cases/nested_attributes_with_callbacks_test.rb +146 -0
  315. data/test/cases/null_relation_test.rb +84 -0
  316. data/test/cases/numeric_data_test.rb +93 -0
  317. data/test/cases/persistence_test.rb +1093 -0
  318. data/test/cases/pooled_connections_test.rb +73 -0
  319. data/test/cases/prepared_statement_status_test.rb +48 -0
  320. data/test/cases/primary_keys_test.rb +482 -0
  321. data/test/cases/query_cache_test.rb +915 -0
  322. data/test/cases/quoting_test.rb +303 -0
  323. data/test/cases/readonly_test.rb +120 -0
  324. data/test/cases/reaper_test.rb +199 -0
  325. data/test/cases/reflection_test.rb +520 -0
  326. data/test/cases/relation/delegation_test.rb +76 -0
  327. data/test/cases/relation/delete_all_test.rb +117 -0
  328. data/test/cases/relation/merging_test.rb +434 -0
  329. data/test/cases/relation/mutation_test.rb +145 -0
  330. data/test/cases/relation/or_test.rb +192 -0
  331. data/test/cases/relation/predicate_builder_test.rb +31 -0
  332. data/test/cases/relation/record_fetch_warning_test.rb +42 -0
  333. data/test/cases/relation/select_test.rb +67 -0
  334. data/test/cases/relation/update_all_test.rb +317 -0
  335. data/test/cases/relation/where_chain_test.rb +141 -0
  336. data/test/cases/relation/where_clause_test.rb +257 -0
  337. data/test/cases/relation/where_test.rb +429 -0
  338. data/test/cases/relation_test.rb +482 -0
  339. data/test/cases/relations_test.rb +2251 -0
  340. data/test/cases/reload_models_test.rb +26 -0
  341. data/test/cases/reserved_word_test.rb +141 -0
  342. data/test/cases/result_test.rb +141 -0
  343. data/test/cases/sanitize_test.rb +192 -0
  344. data/test/cases/schema_dumper_test.rb +550 -0
  345. data/test/cases/schema_loading_test.rb +53 -0
  346. data/test/cases/scoping/default_scoping_test.rb +569 -0
  347. data/test/cases/scoping/named_scoping_test.rb +649 -0
  348. data/test/cases/scoping/relation_scoping_test.rb +522 -0
  349. data/test/cases/secure_token_test.rb +47 -0
  350. data/test/cases/serialization_test.rb +106 -0
  351. data/test/cases/serialized_attribute_test.rb +455 -0
  352. data/test/cases/signed_id_test.rb +168 -0
  353. data/test/cases/statement_cache_test.rb +153 -0
  354. data/test/cases/statement_invalid_test.rb +42 -0
  355. data/test/cases/store_test.rb +320 -0
  356. data/test/cases/strict_loading_test.rb +473 -0
  357. data/test/cases/suppressor_test.rb +77 -0
  358. data/test/cases/tasks/database_tasks_test.rb +1526 -0
  359. data/test/cases/tasks/mysql_rake_test.rb +417 -0
  360. data/test/cases/tasks/postgresql_rake_test.rb +534 -0
  361. data/test/cases/tasks/sqlite_rake_test.rb +267 -0
  362. data/test/cases/test_case.rb +142 -0
  363. data/test/cases/test_databases_test.rb +79 -0
  364. data/test/cases/test_fixtures_test.rb +96 -0
  365. data/test/cases/time_precision_test.rb +125 -0
  366. data/test/cases/timestamp_test.rb +504 -0
  367. data/test/cases/touch_later_test.rb +123 -0
  368. data/test/cases/transaction_callbacks_test.rb +772 -0
  369. data/test/cases/transaction_isolation_test.rb +106 -0
  370. data/test/cases/transactions_test.rb +1285 -0
  371. data/test/cases/type/adapter_specific_registry_test.rb +145 -0
  372. data/test/cases/type/date_time_test.rb +16 -0
  373. data/test/cases/type/integer_test.rb +29 -0
  374. data/test/cases/type/string_test.rb +24 -0
  375. data/test/cases/type/time_test.rb +28 -0
  376. data/test/cases/type/type_map_test.rb +178 -0
  377. data/test/cases/type/unsigned_integer_test.rb +19 -0
  378. data/test/cases/type_test.rb +41 -0
  379. data/test/cases/types_test.rb +26 -0
  380. data/test/cases/unconnected_test.rb +46 -0
  381. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  382. data/test/cases/validations/absence_validation_test.rb +75 -0
  383. data/test/cases/validations/association_validation_test.rb +99 -0
  384. data/test/cases/validations/i18n_generate_message_validation_test.rb +102 -0
  385. data/test/cases/validations/i18n_validation_test.rb +87 -0
  386. data/test/cases/validations/length_validation_test.rb +80 -0
  387. data/test/cases/validations/numericality_validation_test.rb +181 -0
  388. data/test/cases/validations/presence_validation_test.rb +105 -0
  389. data/test/cases/validations/uniqueness_validation_test.rb +618 -0
  390. data/test/cases/validations_repair_helper.rb +21 -0
  391. data/test/cases/validations_test.rb +229 -0
  392. data/test/cases/view_test.rb +222 -0
  393. data/test/cases/yaml_serialization_test.rb +166 -0
  394. data/test/config.example.yml +97 -0
  395. data/test/config.rb +7 -0
  396. data/test/config.yml +220 -0
  397. data/test/connections/native_ibm_db/connection.rb +44 -0
  398. data/test/fixtures/accounts.yml +29 -0
  399. data/test/fixtures/admin/accounts.yml +2 -0
  400. data/test/fixtures/admin/randomly_named_a9.yml +7 -0
  401. data/test/fixtures/admin/randomly_named_b0.yml +7 -0
  402. data/test/fixtures/admin/users.yml +10 -0
  403. data/test/fixtures/all/admin +1 -0
  404. data/test/fixtures/all/developers.yml +0 -0
  405. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  406. data/test/fixtures/all/people.yml +0 -0
  407. data/test/fixtures/all/tasks.yml +0 -0
  408. data/test/fixtures/author_addresses.yml +11 -0
  409. data/test/fixtures/author_favorites.yml +4 -0
  410. data/test/fixtures/authors.yml +17 -0
  411. data/test/fixtures/bad_posts.yml +9 -0
  412. data/test/fixtures/binaries.yml +137 -0
  413. data/test/fixtures/books.yml +38 -0
  414. data/test/fixtures/bulbs.yml +5 -0
  415. data/test/fixtures/cars.yml +9 -0
  416. data/test/fixtures/categories/special_categories.yml +9 -0
  417. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  418. data/test/fixtures/categories.yml +19 -0
  419. data/test/fixtures/categories_ordered.yml +7 -0
  420. data/test/fixtures/categories_posts.yml +34 -0
  421. data/test/fixtures/categorizations.yml +23 -0
  422. data/test/fixtures/citations.yml +5 -0
  423. data/test/fixtures/clubs.yml +8 -0
  424. data/test/fixtures/collections.yml +3 -0
  425. data/test/fixtures/colleges.yml +3 -0
  426. data/test/fixtures/comments.yml +72 -0
  427. data/test/fixtures/companies.yml +72 -0
  428. data/test/fixtures/computers.yml +12 -0
  429. data/test/fixtures/content.yml +3 -0
  430. data/test/fixtures/content_positions.yml +3 -0
  431. data/test/fixtures/courses.yml +8 -0
  432. data/test/fixtures/customers.yml +35 -0
  433. data/test/fixtures/dashboards.yml +6 -0
  434. data/test/fixtures/dead_parrots.yml +5 -0
  435. data/test/fixtures/developers.yml +22 -0
  436. data/test/fixtures/developers_projects.yml +17 -0
  437. data/test/fixtures/dog_lovers.yml +7 -0
  438. data/test/fixtures/dogs.yml +4 -0
  439. data/test/fixtures/doubloons.yml +3 -0
  440. data/test/fixtures/edges.yml +5 -0
  441. data/test/fixtures/entrants.yml +14 -0
  442. data/test/fixtures/essays.yml +16 -0
  443. data/test/fixtures/faces.yml +11 -0
  444. data/test/fixtures/fk_test_has_fk.yml +3 -0
  445. data/test/fixtures/fk_test_has_pk.yml +2 -0
  446. data/test/fixtures/friendships.yml +4 -0
  447. data/test/fixtures/funny_jokes.yml +10 -0
  448. data/test/fixtures/humans.yml +5 -0
  449. data/test/fixtures/interests.yml +33 -0
  450. data/test/fixtures/items.yml +3 -0
  451. data/test/fixtures/jobs.yml +7 -0
  452. data/test/fixtures/legacy_things.yml +3 -0
  453. data/test/fixtures/live_parrots.yml +4 -0
  454. data/test/fixtures/mateys.yml +4 -0
  455. data/test/fixtures/member_details.yml +8 -0
  456. data/test/fixtures/member_types.yml +6 -0
  457. data/test/fixtures/members.yml +11 -0
  458. data/test/fixtures/memberships.yml +41 -0
  459. data/test/fixtures/men.yml +5 -0
  460. data/test/fixtures/minimalistics.yml +5 -0
  461. data/test/fixtures/minivans.yml +5 -0
  462. data/test/fixtures/mixed_case_monkeys.yml +6 -0
  463. data/test/fixtures/mixins.yml +29 -0
  464. data/test/fixtures/movies.yml +7 -0
  465. data/test/fixtures/naked/yml/accounts.yml +1 -0
  466. data/test/fixtures/naked/yml/companies.yml +1 -0
  467. data/test/fixtures/naked/yml/courses.yml +1 -0
  468. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  469. data/test/fixtures/naked/yml/parrots.yml +3 -0
  470. data/test/fixtures/naked/yml/trees.yml +3 -0
  471. data/test/fixtures/nodes.yml +29 -0
  472. data/test/fixtures/organizations.yml +5 -0
  473. data/test/fixtures/other_books.yml +26 -0
  474. data/test/fixtures/other_comments.yml +6 -0
  475. data/test/fixtures/other_dogs.yml +2 -0
  476. data/test/fixtures/other_posts.yml +8 -0
  477. data/test/fixtures/other_topics.yml +42 -0
  478. data/test/fixtures/owners.yml +9 -0
  479. data/test/fixtures/parrots.yml +33 -0
  480. data/test/fixtures/parrots_pirates.yml +7 -0
  481. data/test/fixtures/people.yml +24 -0
  482. data/test/fixtures/peoples_treasures.yml +3 -0
  483. data/test/fixtures/pets.yml +19 -0
  484. data/test/fixtures/pirates.yml +15 -0
  485. data/test/fixtures/posts.yml +88 -0
  486. data/test/fixtures/price_estimates.yml +16 -0
  487. data/test/fixtures/products.yml +4 -0
  488. data/test/fixtures/projects.yml +7 -0
  489. data/test/fixtures/randomly_named_a9.yml +7 -0
  490. data/test/fixtures/ratings.yml +14 -0
  491. data/test/fixtures/readers.yml +17 -0
  492. data/test/fixtures/references.yml +17 -0
  493. data/test/fixtures/reserved_words/distinct.yml +5 -0
  494. data/test/fixtures/reserved_words/distinct_select.yml +11 -0
  495. data/test/fixtures/reserved_words/group.yml +14 -0
  496. data/test/fixtures/reserved_words/select.yml +8 -0
  497. data/test/fixtures/reserved_words/values.yml +7 -0
  498. data/test/fixtures/ships.yml +6 -0
  499. data/test/fixtures/speedometers.yml +8 -0
  500. data/test/fixtures/sponsors.yml +15 -0
  501. data/test/fixtures/strict_zines.yml +2 -0
  502. data/test/fixtures/string_key_objects.yml +7 -0
  503. data/test/fixtures/subscribers.yml +11 -0
  504. data/test/fixtures/subscriptions.yml +12 -0
  505. data/test/fixtures/taggings.yml +78 -0
  506. data/test/fixtures/tags.yml +11 -0
  507. data/test/fixtures/tasks.yml +7 -0
  508. data/test/fixtures/teapots.yml +3 -0
  509. data/test/fixtures/to_be_linked/accounts.yml +2 -0
  510. data/test/fixtures/to_be_linked/users.yml +10 -0
  511. data/test/fixtures/topics.yml +49 -0
  512. data/test/fixtures/toys.yml +14 -0
  513. data/test/fixtures/traffic_lights.yml +10 -0
  514. data/test/fixtures/treasures.yml +10 -0
  515. data/test/fixtures/trees.yml +3 -0
  516. data/test/fixtures/uuid_children.yml +3 -0
  517. data/test/fixtures/uuid_parents.yml +2 -0
  518. data/test/fixtures/variants.yml +4 -0
  519. data/test/fixtures/vegetables.yml +20 -0
  520. data/test/fixtures/vertices.yml +4 -0
  521. data/test/fixtures/warehouse-things.yml +3 -0
  522. data/test/fixtures/warehouse_things.yml +3 -0
  523. data/test/fixtures/zines.yml +5 -0
  524. data/test/ibm_db_test.rb +25 -0
  525. data/test/migrations/10_urban/9_add_expressions.rb +13 -0
  526. data/test/migrations/decimal/1_give_me_big_numbers.rb +17 -0
  527. data/test/migrations/magic/1_currencies_have_symbols.rb +13 -0
  528. data/test/migrations/missing/1000_people_have_middle_names.rb +11 -0
  529. data/test/migrations/missing/1_people_have_last_names.rb +11 -0
  530. data/test/migrations/missing/3_we_need_reminders.rb +14 -0
  531. data/test/migrations/missing/4_innocent_jointable.rb +14 -0
  532. data/test/migrations/rename/1_we_need_things.rb +13 -0
  533. data/test/migrations/rename/2_rename_things.rb +11 -0
  534. data/test/migrations/to_copy/1_people_have_hobbies.rb +11 -0
  535. data/test/migrations/to_copy/2_people_have_descriptions.rb +11 -0
  536. data/test/migrations/to_copy2/1_create_articles.rb +9 -0
  537. data/test/migrations/to_copy2/2_create_comments.rb +9 -0
  538. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +11 -0
  539. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +11 -0
  540. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +11 -0
  541. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +9 -0
  542. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +9 -0
  543. data/test/migrations/valid/1_valid_people_have_last_names.rb +11 -0
  544. data/test/migrations/valid/2_we_need_reminders.rb +14 -0
  545. data/test/migrations/valid/3_innocent_jointable.rb +14 -0
  546. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +11 -0
  547. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +14 -0
  548. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +14 -0
  549. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +11 -0
  550. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +14 -0
  551. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +14 -0
  552. data/test/migrations/version_check/20131219224947_migration_version_check.rb +10 -0
  553. data/test/models/account.rb +46 -0
  554. data/test/models/admin/account.rb +5 -0
  555. data/test/models/admin/randomly_named_c1.rb +9 -0
  556. data/test/models/admin/user.rb +48 -0
  557. data/test/models/admin.rb +7 -0
  558. data/test/models/aircraft.rb +7 -0
  559. data/test/models/arunit2_model.rb +5 -0
  560. data/test/models/author.rb +260 -0
  561. data/test/models/auto_id.rb +6 -0
  562. data/test/models/autoloadable/extra_firm.rb +4 -0
  563. data/test/models/binary.rb +4 -0
  564. data/test/models/binary_field.rb +6 -0
  565. data/test/models/bird.rb +24 -0
  566. data/test/models/book.rb +33 -0
  567. data/test/models/book_destroy_async.rb +24 -0
  568. data/test/models/boolean.rb +7 -0
  569. data/test/models/bulb.rb +61 -0
  570. data/test/models/cake_designer.rb +5 -0
  571. data/test/models/car.rb +36 -0
  572. data/test/models/carrier.rb +4 -0
  573. data/test/models/cart.rb +5 -0
  574. data/test/models/cat.rb +12 -0
  575. data/test/models/categorization.rb +21 -0
  576. data/test/models/category.rb +47 -0
  577. data/test/models/chef.rb +10 -0
  578. data/test/models/citation.rb +7 -0
  579. data/test/models/club.rb +28 -0
  580. data/test/models/college.rb +12 -0
  581. data/test/models/column.rb +5 -0
  582. data/test/models/column_name.rb +5 -0
  583. data/test/models/comment.rb +98 -0
  584. data/test/models/company.rb +226 -0
  585. data/test/models/company_in_module.rb +99 -0
  586. data/test/models/computer.rb +5 -0
  587. data/test/models/contact.rb +43 -0
  588. data/test/models/content.rb +42 -0
  589. data/test/models/contract.rb +38 -0
  590. data/test/models/country.rb +5 -0
  591. data/test/models/course.rb +8 -0
  592. data/test/models/customer.rb +85 -0
  593. data/test/models/customer_carrier.rb +16 -0
  594. data/test/models/dashboard.rb +5 -0
  595. data/test/models/default.rb +4 -0
  596. data/test/models/department.rb +6 -0
  597. data/test/models/destroy_async_parent.rb +15 -0
  598. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  599. data/test/models/developer.rb +341 -0
  600. data/test/models/dl_keyed_belongs_to.rb +13 -0
  601. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  602. data/test/models/dl_keyed_has_many.rb +5 -0
  603. data/test/models/dl_keyed_has_many_through.rb +5 -0
  604. data/test/models/dl_keyed_has_one.rb +5 -0
  605. data/test/models/dl_keyed_join.rb +10 -0
  606. data/test/models/dog.rb +7 -0
  607. data/test/models/dog_lover.rb +7 -0
  608. data/test/models/doubloon.rb +14 -0
  609. data/test/models/drink_designer.rb +20 -0
  610. data/test/models/edge.rb +7 -0
  611. data/test/models/electron.rb +7 -0
  612. data/test/models/engine.rb +5 -0
  613. data/test/models/entrant.rb +5 -0
  614. data/test/models/entry.rb +5 -0
  615. data/test/models/essay.rb +8 -0
  616. data/test/models/essay_destroy_async.rb +12 -0
  617. data/test/models/event.rb +5 -0
  618. data/test/models/eye.rb +39 -0
  619. data/test/models/face.rb +17 -0
  620. data/test/models/family.rb +6 -0
  621. data/test/models/family_tree.rb +6 -0
  622. data/test/models/friendship.rb +8 -0
  623. data/test/models/frog.rb +8 -0
  624. data/test/models/guid.rb +4 -0
  625. data/test/models/guitar.rb +6 -0
  626. data/test/models/hotel.rb +13 -0
  627. data/test/models/human.rb +39 -0
  628. data/test/models/image.rb +5 -0
  629. data/test/models/interest.rb +16 -0
  630. data/test/models/invoice.rb +6 -0
  631. data/test/models/item.rb +9 -0
  632. data/test/models/job.rb +9 -0
  633. data/test/models/joke.rb +9 -0
  634. data/test/models/keyboard.rb +5 -0
  635. data/test/models/legacy_thing.rb +5 -0
  636. data/test/models/lesson.rb +13 -0
  637. data/test/models/line_item.rb +5 -0
  638. data/test/models/liquid.rb +6 -0
  639. data/test/models/man.rb +11 -0
  640. data/test/models/matey.rb +6 -0
  641. data/test/models/measurement.rb +4 -0
  642. data/test/models/member.rb +45 -0
  643. data/test/models/member_detail.rb +11 -0
  644. data/test/models/member_type.rb +5 -0
  645. data/test/models/membership.rb +38 -0
  646. data/test/models/mentor.rb +5 -0
  647. data/test/models/message.rb +5 -0
  648. data/test/models/minimalistic.rb +4 -0
  649. data/test/models/minivan.rb +10 -0
  650. data/test/models/mixed_case_monkey.rb +5 -0
  651. data/test/models/mocktail_designer.rb +2 -0
  652. data/test/models/molecule.rb +8 -0
  653. data/test/models/mouse.rb +6 -0
  654. data/test/models/movie.rb +7 -0
  655. data/test/models/node.rb +7 -0
  656. data/test/models/non_primary_key.rb +4 -0
  657. data/test/models/notification.rb +5 -0
  658. data/test/models/numeric_data.rb +12 -0
  659. data/test/models/order.rb +6 -0
  660. data/test/models/organization.rb +16 -0
  661. data/test/models/other_dog.rb +7 -0
  662. data/test/models/owner.rb +39 -0
  663. data/test/models/parrot.rb +36 -0
  664. data/test/models/person.rb +147 -0
  665. data/test/models/personal_legacy_thing.rb +6 -0
  666. data/test/models/pet.rb +20 -0
  667. data/test/models/pet_treasure.rb +8 -0
  668. data/test/models/pirate.rb +116 -0
  669. data/test/models/possession.rb +5 -0
  670. data/test/models/post.rb +371 -0
  671. data/test/models/price_estimate.rb +14 -0
  672. data/test/models/professor.rb +7 -0
  673. data/test/models/project.rb +42 -0
  674. data/test/models/publisher/article.rb +6 -0
  675. data/test/models/publisher/magazine.rb +5 -0
  676. data/test/models/publisher.rb +4 -0
  677. data/test/models/randomly_named_c1.rb +5 -0
  678. data/test/models/rating.rb +8 -0
  679. data/test/models/reader.rb +25 -0
  680. data/test/models/recipe.rb +5 -0
  681. data/test/models/record.rb +4 -0
  682. data/test/models/reference.rb +25 -0
  683. data/test/models/reply.rb +79 -0
  684. data/test/models/room.rb +6 -0
  685. data/test/models/section.rb +6 -0
  686. data/test/models/seminar.rb +6 -0
  687. data/test/models/session.rb +6 -0
  688. data/test/models/ship.rb +42 -0
  689. data/test/models/ship_part.rb +10 -0
  690. data/test/models/shop.rb +19 -0
  691. data/test/models/shop_account.rb +8 -0
  692. data/test/models/speedometer.rb +8 -0
  693. data/test/models/sponsor.rb +10 -0
  694. data/test/models/squeak.rb +6 -0
  695. data/test/models/strict_zine.rb +7 -0
  696. data/test/models/string_key_object.rb +5 -0
  697. data/test/models/student.rb +6 -0
  698. data/test/models/subject.rb +16 -0
  699. data/test/models/subscriber.rb +10 -0
  700. data/test/models/subscription.rb +8 -0
  701. data/test/models/tag.rb +16 -0
  702. data/test/models/tagging.rb +20 -0
  703. data/test/models/task.rb +7 -0
  704. data/test/models/topic.rb +153 -0
  705. data/test/models/toy.rb +10 -0
  706. data/test/models/traffic_light.rb +6 -0
  707. data/test/models/treasure.rb +16 -0
  708. data/test/models/treaty.rb +5 -0
  709. data/test/models/tree.rb +5 -0
  710. data/test/models/tuning_peg.rb +6 -0
  711. data/test/models/tyre.rb +13 -0
  712. data/test/models/user.rb +22 -0
  713. data/test/models/uuid_child.rb +5 -0
  714. data/test/models/uuid_item.rb +8 -0
  715. data/test/models/uuid_parent.rb +5 -0
  716. data/test/models/vegetables.rb +33 -0
  717. data/test/models/vehicle.rb +7 -0
  718. data/test/models/vertex.rb +11 -0
  719. data/test/models/warehouse_thing.rb +7 -0
  720. data/test/models/wheel.rb +5 -0
  721. data/test/models/without_table.rb +5 -0
  722. data/test/models/zine.rb +5 -0
  723. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  724. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  725. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  726. data/test/schema/mysql2_specific_schema.rb +82 -0
  727. data/test/schema/oracle_specific_schema.rb +38 -0
  728. data/test/schema/postgresql_specific_schema.rb +125 -0
  729. data/test/schema/schema.rb +1237 -0
  730. data/test/schema/schema.rb.original +1057 -0
  731. data/test/schema/sqlite_specific_schema.rb +11 -0
  732. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  733. data/test/support/config.rb +43 -0
  734. data/test/support/connection.rb +29 -0
  735. data/test/support/connection_helper.rb +16 -0
  736. data/test/support/ddl_helper.rb +10 -0
  737. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  738. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  739. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  740. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  741. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  742. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  743. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  744. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  745. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  746. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  747. data/test/support/schema_dumping_helper.rb +22 -0
  748. data/test/support/stubs/strong_parameters.rb +40 -0
  749. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  750. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  751. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  752. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  753. 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