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,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/content"
5
+
6
+ class BidirectionalDestroyDependenciesTest < ActiveRecord::TestCase
7
+ fixtures :content, :content_positions
8
+
9
+ def setup
10
+ Content.destroyed_ids.clear
11
+ ContentPosition.destroyed_ids.clear
12
+ end
13
+
14
+ def test_bidirectional_dependence_when_destroying_item_with_belongs_to_association
15
+ content_position = ContentPosition.find(1)
16
+ content = content_position.content
17
+ assert_not_nil content
18
+
19
+ content_position.destroy
20
+
21
+ assert_equal [content_position.id], ContentPosition.destroyed_ids
22
+ assert_equal [content.id], Content.destroyed_ids
23
+ end
24
+
25
+ def test_bidirectional_dependence_when_destroying_item_with_has_one_association
26
+ content = Content.find(1)
27
+ content_position = content.content_position
28
+ assert_not_nil content_position
29
+
30
+ content.destroy
31
+
32
+ assert_equal [content.id], Content.destroyed_ids
33
+ assert_equal [content_position.id], ContentPosition.destroyed_ids
34
+ end
35
+
36
+ def test_bidirectional_dependence_when_destroying_item_with_has_one_association_fails_first_time
37
+ content = ContentWhichRequiresTwoDestroyCalls.find(1)
38
+
39
+ 2.times { content.destroy }
40
+
41
+ assert_equal content.destroyed?, true
42
+ end
43
+ end
@@ -0,0 +1,208 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/post"
5
+ require "models/author"
6
+ require "models/project"
7
+ require "models/developer"
8
+ require "models/computer"
9
+ require "models/company"
10
+
11
+ class AssociationCallbacksTest < ActiveRecord::TestCase
12
+ fixtures :posts, :authors, :author_addresses, :projects, :developers
13
+
14
+ def setup
15
+ @david = authors(:david)
16
+ @thinking = posts(:thinking)
17
+ @authorless = posts(:authorless)
18
+ assert_empty @david.post_log
19
+ end
20
+
21
+ def test_adding_macro_callbacks
22
+ @david.posts_with_callbacks << @thinking
23
+ assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
24
+ @david.posts_with_callbacks << @thinking
25
+ assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}", "before_adding#{@thinking.id}",
26
+ "after_adding#{@thinking.id}"], @david.post_log
27
+ end
28
+
29
+ def test_adding_with_proc_callbacks
30
+ @david.posts_with_proc_callbacks << @thinking
31
+ assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}"], @david.post_log
32
+ @david.posts_with_proc_callbacks << @thinking
33
+ assert_equal ["before_adding#{@thinking.id}", "after_adding#{@thinking.id}", "before_adding#{@thinking.id}",
34
+ "after_adding#{@thinking.id}"], @david.post_log
35
+ end
36
+
37
+ def test_removing_with_macro_callbacks
38
+ first_post, second_post = @david.posts_with_callbacks[0, 2]
39
+ @david.posts_with_callbacks.delete(first_post)
40
+ assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}"], @david.post_log
41
+ @david.posts_with_callbacks.delete(second_post)
42
+ assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}", "before_removing#{second_post.id}",
43
+ "after_removing#{second_post.id}"], @david.post_log
44
+ end
45
+
46
+ def test_removing_with_proc_callbacks
47
+ first_post, second_post = @david.posts_with_callbacks[0, 2]
48
+ @david.posts_with_proc_callbacks.delete(first_post)
49
+ assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}"], @david.post_log
50
+ @david.posts_with_proc_callbacks.delete(second_post)
51
+ assert_equal ["before_removing#{first_post.id}", "after_removing#{first_post.id}", "before_removing#{second_post.id}",
52
+ "after_removing#{second_post.id}"], @david.post_log
53
+ end
54
+
55
+ def test_multiple_callbacks
56
+ @david.posts_with_multiple_callbacks << @thinking
57
+ assert_equal ["before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}", "after_adding#{@thinking.id}",
58
+ "after_adding_proc#{@thinking.id}"], @david.post_log
59
+ @david.posts_with_multiple_callbacks << @thinking
60
+ assert_equal ["before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}", "after_adding#{@thinking.id}",
61
+ "after_adding_proc#{@thinking.id}", "before_adding#{@thinking.id}", "before_adding_proc#{@thinking.id}",
62
+ "after_adding#{@thinking.id}", "after_adding_proc#{@thinking.id}"], @david.post_log
63
+ end
64
+
65
+ def test_has_many_callbacks_halt_execution_when_abort_is_trown_when_adding_to_association
66
+ author = Author.create!(name: "Roger")
67
+ post = Post.create!(title: "hello", body: "abc")
68
+ author.posts_with_thrown_callbacks << post
69
+
70
+ assert_empty(author.posts_with_callbacks)
71
+ end
72
+
73
+ def test_has_many_callbacks_halt_execution_when_abort_is_trown_when_removing_from_association
74
+ author = Author.create!(name: "Roger")
75
+ post = Post.create!(title: "hello", body: "abc", author: author)
76
+
77
+ assert_equal(1, author.posts_with_thrown_callbacks.size)
78
+ author.posts_with_thrown_callbacks.destroy(post.id)
79
+ assert_equal(1, author.posts_with_thrown_callbacks.size)
80
+ end
81
+
82
+ def test_has_many_callbacks_with_create
83
+ morten = Author.create name: "Morten"
84
+ post = morten.posts_with_proc_callbacks.create! title: "Hello", body: "How are you doing?"
85
+ assert_equal ["before_adding<new>", "after_adding#{post.id}"], morten.post_log
86
+ end
87
+
88
+ def test_has_many_callbacks_with_create!
89
+ morten = Author.create! name: "Morten"
90
+ post = morten.posts_with_proc_callbacks.create title: "Hello", body: "How are you doing?"
91
+ assert_equal ["before_adding<new>", "after_adding#{post.id}"], morten.post_log
92
+ end
93
+
94
+ def test_has_many_callbacks_for_save_on_parent
95
+ jack = Author.new name: "Jack"
96
+ jack.posts_with_callbacks.build title: "Call me back!", body: "Before you wake up and after you sleep"
97
+
98
+ callback_log = ["before_adding<new>", "after_adding#{jack.posts_with_callbacks.first.id}"]
99
+ assert_equal callback_log, jack.post_log
100
+ assert jack.save
101
+ assert_equal 1, jack.posts_with_callbacks.count
102
+ assert_equal callback_log, jack.post_log
103
+ end
104
+
105
+ def test_has_many_callbacks_for_destroy_on_parent
106
+ firm = Firm.create! name: "Firm"
107
+ client = firm.clients.create! name: "Client"
108
+ firm.destroy
109
+
110
+ assert_equal ["before_remove#{client.id}", "after_remove#{client.id}"], firm.log
111
+ end
112
+
113
+ def test_has_and_belongs_to_many_add_callback
114
+ david = developers(:david)
115
+ ar = projects(:active_record)
116
+ assert_empty ar.developers_log
117
+ ar.developers_with_callbacks << david
118
+ assert_equal ["before_adding#{david.id}", "after_adding#{david.id}"], ar.developers_log
119
+ ar.developers_with_callbacks << david
120
+ assert_equal ["before_adding#{david.id}", "after_adding#{david.id}", "before_adding#{david.id}",
121
+ "after_adding#{david.id}"], ar.developers_log
122
+ end
123
+
124
+ def test_has_and_belongs_to_many_before_add_called_before_save
125
+ dev = nil
126
+ new_dev = nil
127
+ klass = Class.new(Project) do
128
+ def self.name; Project.name; end
129
+ has_and_belongs_to_many :developers_with_callbacks,
130
+ class_name: "Developer",
131
+ before_add: lambda { |o, r|
132
+ dev = r
133
+ new_dev = r.new_record?
134
+ }
135
+ end
136
+ rec = klass.create!
137
+ alice = Developer.new(name: "alice")
138
+ rec.developers_with_callbacks << alice
139
+ assert_equal alice, dev
140
+ assert_not_nil new_dev
141
+ assert new_dev, "record should not have been saved"
142
+ assert_not_predicate alice, :new_record?
143
+ end
144
+
145
+ def test_has_and_belongs_to_many_after_add_called_after_save
146
+ ar = projects(:active_record)
147
+ assert_empty ar.developers_log
148
+ alice = Developer.new(name: "alice")
149
+ ar.developers_with_callbacks << alice
150
+ assert_equal "after_adding#{alice.id}", ar.developers_log.last
151
+
152
+ bob = ar.developers_with_callbacks.create(name: "bob")
153
+ assert_equal "after_adding#{bob.id}", ar.developers_log.last
154
+
155
+ ar.developers_with_callbacks.build(name: "charlie")
156
+ assert_equal "after_adding<new>", ar.developers_log.last
157
+ end
158
+
159
+ def test_has_and_belongs_to_many_remove_callback
160
+ david = developers(:david)
161
+ jamis = developers(:jamis)
162
+ activerecord = projects(:active_record)
163
+ assert_empty activerecord.developers_log
164
+ activerecord.developers_with_callbacks.delete(david)
165
+ assert_equal ["before_removing#{david.id}", "after_removing#{david.id}"], activerecord.developers_log
166
+
167
+ activerecord.developers_with_callbacks.delete(jamis)
168
+ assert_equal ["before_removing#{david.id}", "after_removing#{david.id}", "before_removing#{jamis.id}",
169
+ "after_removing#{jamis.id}"], activerecord.developers_log
170
+ end
171
+
172
+ def test_has_and_belongs_to_many_does_not_fire_callbacks_on_clear
173
+ activerecord = projects(:active_record)
174
+ assert_empty activerecord.developers_log
175
+ if activerecord.developers_with_callbacks.size == 0
176
+ activerecord.developers << developers(:david)
177
+ activerecord.developers << developers(:jamis)
178
+ activerecord.reload
179
+ assert activerecord.developers_with_callbacks.size == 2
180
+ end
181
+ activerecord.developers_with_callbacks.flat_map { |d| ["before_removing#{d.id}", "after_removing#{d.id}"] }.sort
182
+ assert activerecord.developers_with_callbacks.clear
183
+ assert_empty activerecord.developers_log
184
+ end
185
+
186
+ def test_has_and_belongs_to_many_callbacks_for_save_on_parent
187
+ project = Project.new name: "Callbacks"
188
+ project.developers_with_callbacks.build name: "Jack", salary: 95000
189
+
190
+ callback_log = ["before_adding<new>", "after_adding<new>"]
191
+ assert_equal callback_log, project.developers_log
192
+ assert project.save
193
+ assert_equal 1, project.developers_with_callbacks.size
194
+ assert_equal callback_log, project.developers_log
195
+ end
196
+
197
+ def test_dont_add_if_before_callback_raises_exception
198
+ assert_not_includes @david.unchangeable_posts, @authorless
199
+ begin
200
+ @david.unchangeable_posts << @authorless
201
+ rescue Exception
202
+ end
203
+ assert_empty @david.post_log
204
+ assert_not_includes @david.unchangeable_posts, @authorless
205
+ @david.reload
206
+ assert_not_includes @david.unchangeable_posts, @authorless
207
+ end
208
+ end
@@ -0,0 +1,245 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/post"
5
+ require "models/comment"
6
+ require "models/author"
7
+ require "models/categorization"
8
+ require "models/category"
9
+ require "models/company"
10
+ require "models/topic"
11
+ require "models/reply"
12
+ require "models/person"
13
+ require "models/vertex"
14
+ require "models/edge"
15
+
16
+ class CascadedEagerLoadingTest < ActiveRecord::TestCase
17
+ fixtures :authors, :author_addresses, :mixins, :companies, :posts, :topics, :accounts, :comments,
18
+ :categorizations, :people, :categories, :edges, :vertices
19
+
20
+ def test_eager_association_loading_with_cascaded_two_levels
21
+ authors = Author.includes(posts: :comments).order(:id).to_a
22
+ assert_equal 3, authors.size
23
+ assert_equal 5, authors[0].posts.size
24
+ assert_equal 3, authors[1].posts.size
25
+ assert_equal 11, authors[0].posts.collect { |post| post.comments.size }.inject(0) { |sum, i| sum + i }
26
+ end
27
+
28
+ def test_eager_association_loading_with_cascaded_two_levels_and_one_level
29
+ authors = Author.includes({ posts: :comments }, :categorizations).order(:id).to_a
30
+ assert_equal 3, authors.size
31
+ assert_equal 5, authors[0].posts.size
32
+ assert_equal 3, authors[1].posts.size
33
+ assert_equal 11, authors[0].posts.collect { |post| post.comments.size }.inject(0) { |sum, i| sum + i }
34
+ assert_equal 1, authors[0].categorizations.size
35
+ assert_equal 2, authors[1].categorizations.size
36
+ end
37
+
38
+ def test_eager_association_loading_with_hmt_does_not_table_name_collide_when_joining_associations
39
+ authors = Author.joins(:posts).eager_load(:comments).where(posts: { tags_count: 1 }).order(:id).to_a
40
+ assert_equal 3, assert_queries(0) { authors.size }
41
+ assert_equal 11, assert_queries(0) { authors[0].comments.size }
42
+ end
43
+
44
+ def test_eager_association_loading_grafts_stashed_associations_to_correct_parent
45
+ assert_equal people(:michael), Person.eager_load(primary_contact: :primary_contact).where("primary_contacts_people_2.first_name = ?", "Susan").order("people.id").first
46
+ end
47
+
48
+ def test_cascaded_eager_association_loading_with_join_for_count
49
+ categories = Category.joins(:categorizations).includes([{ posts: :comments }, :authors])
50
+
51
+ assert_equal 4, categories.count
52
+ assert_equal 4, categories.to_a.count
53
+ assert_equal 3, categories.distinct.count
54
+ assert_equal 3, categories.to_a.uniq.size # Must uniq since instantiating with inner joins will get dupes
55
+ end
56
+
57
+ def test_cascaded_eager_association_loading_with_duplicated_includes
58
+ categories = Category.includes(:categorizations).includes(categorizations: :author).where("categorizations.id is not null").references(:categorizations)
59
+ assert_nothing_raised do
60
+ assert_equal 3, categories.count
61
+ assert_equal 3, categories.to_a.size
62
+ end
63
+ end
64
+
65
+ def test_cascaded_eager_association_loading_with_twice_includes_edge_cases
66
+ categories = Category.includes(categorizations: :author).includes(categorizations: :post).where("posts.id is not null").references(:posts)
67
+ assert_nothing_raised do
68
+ assert_equal 3, categories.count
69
+ assert_equal 3, categories.to_a.size
70
+ end
71
+ end
72
+
73
+ def test_eager_association_loading_with_join_for_count
74
+ authors = Author.joins(:special_posts).includes([:posts, :categorizations])
75
+
76
+ assert_nothing_raised { authors.count }
77
+ assert_queries(3) { authors.to_a }
78
+ end
79
+
80
+ def test_eager_association_loading_with_cascaded_two_levels_with_two_has_many_associations
81
+ authors = Author.all.merge!(includes: { posts: [:comments, :categorizations] }, order: "authors.id").to_a
82
+ assert_equal 3, authors.size
83
+ assert_equal 5, authors[0].posts.size
84
+ assert_equal 3, authors[1].posts.size
85
+ assert_equal 11, authors[0].posts.collect { |post| post.comments.size }.inject(0) { |sum, i| sum + i }
86
+ end
87
+
88
+ def test_eager_association_loading_with_cascaded_two_levels_and_self_table_reference
89
+ authors = Author.all.merge!(includes: { posts: [:comments, :author] }, order: "authors.id").to_a
90
+ assert_equal 3, authors.size
91
+ assert_equal 5, authors[0].posts.size
92
+ assert_equal authors(:david).name, authors[0].name
93
+ assert_equal [authors(:david).name], authors[0].posts.collect { |post| post.author.name }.uniq
94
+ end
95
+
96
+ def test_eager_association_loading_with_cascaded_two_levels_with_condition
97
+ authors = Author.all.merge!(includes: { posts: :comments }, where: "authors.id=1", order: "authors.id").to_a
98
+ assert_equal 1, authors.size
99
+ assert_equal 5, authors[0].posts.size
100
+ end
101
+
102
+ def test_eager_association_loading_with_cascaded_three_levels_by_ping_pong
103
+ firms = Firm.all.merge!(includes: { account: { firm: :account } }, order: "companies.id").to_a
104
+ assert_equal 3, firms.size
105
+ assert_equal firms.first.account, firms.first.account.firm.account
106
+ assert_equal companies(:first_firm).account, assert_queries(0) { firms.first.account.firm.account }
107
+ assert_equal companies(:first_firm).account.firm.account, assert_queries(0) { firms.first.account.firm.account }
108
+ end
109
+
110
+ def test_eager_association_loading_with_has_many_sti
111
+ topics = Topic.all.merge!(includes: :replies, order: "topics.id").to_a
112
+ first, second, = topics(:first).replies.size, topics(:second).replies.size
113
+ assert_queries(0) do
114
+ assert_equal first, topics[0].replies.size
115
+ assert_equal second, topics[1].replies.size
116
+ end
117
+ end
118
+
119
+ def test_eager_association_loading_with_has_many_sti_and_subclasses
120
+ reply = Reply.new(title: "gaga", content: "boo-boo", parent_id: 1)
121
+ assert reply.save
122
+
123
+ topics = Topic.all.merge!(includes: :replies, order: ["topics.id", "replies_topics.id"]).to_a
124
+ assert_queries(0) do
125
+ assert_equal 2, topics[0].replies.size
126
+ assert_equal 0, topics[1].replies.size
127
+ end
128
+ end
129
+
130
+ def test_eager_association_loading_with_belongs_to_sti
131
+ replies = Reply.all.merge!(includes: :topic, order: "topics.id").to_a
132
+ assert_includes replies, topics(:second)
133
+ assert_not_includes replies, topics(:first)
134
+ assert_equal topics(:first), assert_queries(0) { replies.first.topic }
135
+ end
136
+
137
+ def test_eager_association_loading_with_multiple_stis_and_order
138
+ author = Author.all.merge!(includes: { posts: [ :special_comments, :very_special_comment ] }, order: ["authors.name", "comments.body", "very_special_comments_posts.body"], where: "posts.id = 4").first
139
+ assert_equal authors(:david), author
140
+ assert_queries(0) do
141
+ author.posts.first.special_comments
142
+ author.posts.first.very_special_comment
143
+ end
144
+ end
145
+
146
+ def test_eager_association_loading_of_stis_with_multiple_references
147
+ authors = Author.all.merge!(includes: { posts: { special_comments: { post: [ :special_comments, :very_special_comment ] } } }, order: "comments.body, very_special_comments_posts.body", where: "posts.id = 4").to_a
148
+ assert_equal [authors(:david)], authors
149
+ assert_queries(0) do
150
+ authors.first.posts.first.special_comments.first.post.special_comments
151
+ authors.first.posts.first.special_comments.first.post.very_special_comment
152
+ end
153
+ end
154
+
155
+ def test_eager_association_loading_where_first_level_returns_nil
156
+ authors = Author.all.merge!(includes: { post_about_thinking: :comments }, order: "authors.id DESC").to_a
157
+ assert_equal [authors(:bob), authors(:mary), authors(:david)], authors
158
+ assert_queries(0) do
159
+ authors[2].post_about_thinking.comments.first
160
+ end
161
+ end
162
+
163
+ def test_preload_through_missing_records
164
+ post = Post.where.not(author_id: Author.select(:id)).preload(author: { comments: :post }).first!
165
+ assert_queries(0) { assert_nil post.author }
166
+ end
167
+
168
+ def test_eager_association_loading_with_missing_first_record
169
+ posts = Post.where(id: 3).preload(author: { comments: :post }).to_a
170
+ assert_equal posts.size, 1
171
+ end
172
+
173
+ def test_eager_association_loading_with_recursive_cascading_four_levels_has_many_through
174
+ source = Vertex.all.merge!(includes: { sinks: { sinks: { sinks: :sinks } } }, order: "vertices.id").first
175
+ assert_equal vertices(:vertex_4), assert_queries(0) { source.sinks.first.sinks.first.sinks.first }
176
+ end
177
+
178
+ def test_eager_association_loading_with_recursive_cascading_four_levels_has_and_belongs_to_many
179
+ sink = Vertex.all.merge!(includes: { sources: { sources: { sources: :sources } } }, order: "vertices.id DESC").first
180
+ assert_equal vertices(:vertex_1), assert_queries(0) { sink.sources.first.sources.first.sources.first.sources.first }
181
+ end
182
+
183
+ def test_eager_association_loading_with_cascaded_interdependent_one_level_and_two_levels
184
+ authors_relation = Author.all.merge!(includes: [:comments, { posts: :categorizations }], order: "authors.id")
185
+ authors = authors_relation.to_a
186
+ assert_equal 3, authors.size
187
+ assert_equal 11, authors[0].comments.size
188
+ assert_equal 1, authors[1].comments.size
189
+ assert_equal 5, authors[0].posts.size
190
+ assert_equal 3, authors[1].posts.size
191
+ assert_equal 3, authors[0].posts.collect { |post| post.categorizations.size }.inject(0) { |sum, i| sum + i }
192
+ end
193
+
194
+ def test_preloaded_records_are_not_duplicated
195
+ author = Author.first
196
+ expected = Post.where(author: author)
197
+ .includes(author: :first_posts).map { |post| post.author.first_posts.size }
198
+ actual = author.posts
199
+ .includes(author: :first_posts).map { |post| post.author.first_posts.size }
200
+
201
+ assert_equal expected, actual
202
+ end
203
+
204
+ def test_preloading_across_has_one_constrains_loaded_records
205
+ author = authors(:david)
206
+
207
+ old_post = author.posts.create!(title: "first post", body: "test")
208
+ old_post.comments.create!(author: authors(:mary), body: "a response")
209
+
210
+ recent_post = author.posts.create!(title: "first post", body: "test")
211
+ last_comment = recent_post.comments.create!(author: authors(:bob), body: "a response")
212
+
213
+ authors = Author.where(id: author.id)
214
+ retrieved_comments = []
215
+
216
+ reset_callbacks(Comment, :initialize) do
217
+ Comment.after_initialize { |record| retrieved_comments << record }
218
+ authors.preload(recent_post: :comments).load
219
+ end
220
+
221
+ assert_equal 1, retrieved_comments.size
222
+ assert_equal [last_comment], retrieved_comments
223
+ end
224
+
225
+ def test_preloading_across_has_one_through_constrains_loaded_records
226
+ author = authors(:david)
227
+
228
+ old_post = author.posts.create!(title: "first post", body: "test")
229
+ old_post.comments.create!(author: authors(:mary), body: "a response")
230
+
231
+ recent_post = author.posts.create!(title: "first post", body: "test")
232
+ recent_post.comments.create!(author: authors(:bob), body: "a response")
233
+
234
+ authors = Author.where(id: author.id)
235
+ retrieved_authors = []
236
+
237
+ reset_callbacks(Author, :initialize) do
238
+ Author.after_initialize { |record| retrieved_authors << record }
239
+ authors.preload(recent_response: :author).load
240
+ end
241
+
242
+ assert_equal 2, retrieved_authors.size
243
+ assert_equal [author, authors(:bob)], retrieved_authors
244
+ end
245
+ end
@@ -0,0 +1,156 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/post"
5
+ require "models/tagging"
6
+
7
+ module Namespaced
8
+ class Post < ActiveRecord::Base
9
+ self.table_name = "posts"
10
+ has_one :tagging, as: :taggable, class_name: "Tagging"
11
+ end
12
+ end
13
+
14
+ module FullStiClassNamesSharedTest
15
+ def setup
16
+ @old_store_full_sti_class = ActiveRecord::Base.store_full_sti_class
17
+ ActiveRecord::Base.store_full_sti_class = store_full_sti_class
18
+
19
+ post = Namespaced::Post.create(title: "Great stuff", body: "This is not", author_id: 1)
20
+ @tagging = post.create_tagging!
21
+ end
22
+
23
+ def teardown
24
+ ActiveRecord::Base.store_full_sti_class = @old_store_full_sti_class
25
+ end
26
+
27
+ def test_class_names
28
+ ActiveRecord::Base.store_full_sti_class = !store_full_sti_class
29
+ post = Namespaced::Post.find_by_title("Great stuff")
30
+ assert_equal @tagging, post.tagging
31
+
32
+ ActiveRecord::Base.store_full_sti_class = store_full_sti_class
33
+ post = Namespaced::Post.find_by_title("Great stuff")
34
+ assert_equal @tagging, post.tagging
35
+ end
36
+
37
+ def test_class_names_with_includes
38
+ ActiveRecord::Base.store_full_sti_class = !store_full_sti_class
39
+ post = Namespaced::Post.includes(:tagging).find_by_title("Great stuff")
40
+ assert_equal @tagging, post.tagging
41
+
42
+ ActiveRecord::Base.store_full_sti_class = store_full_sti_class
43
+ post = Namespaced::Post.includes(:tagging).find_by_title("Great stuff")
44
+ assert_equal @tagging, post.tagging
45
+ end
46
+
47
+ def test_class_names_with_eager_load
48
+ ActiveRecord::Base.store_full_sti_class = !store_full_sti_class
49
+ post = Namespaced::Post.eager_load(:tagging).find_by_title("Great stuff")
50
+ assert_equal @tagging, post.tagging
51
+
52
+ ActiveRecord::Base.store_full_sti_class = store_full_sti_class
53
+ post = Namespaced::Post.eager_load(:tagging).find_by_title("Great stuff")
54
+ assert_equal @tagging, post.tagging
55
+ end
56
+
57
+ def test_class_names_with_find_by
58
+ post = Namespaced::Post.find_by_title("Great stuff")
59
+
60
+ ActiveRecord::Base.store_full_sti_class = !store_full_sti_class
61
+ assert_equal @tagging, Tagging.find_by(taggable: post)
62
+
63
+ ActiveRecord::Base.store_full_sti_class = store_full_sti_class
64
+ assert_equal @tagging, Tagging.find_by(taggable: post)
65
+ end
66
+ end
67
+
68
+ class FullStiClassNamesTest < ActiveRecord::TestCase
69
+ include FullStiClassNamesSharedTest
70
+
71
+ private
72
+ def store_full_sti_class
73
+ true
74
+ end
75
+ end
76
+
77
+ class NonFullStiClassNamesTest < ActiveRecord::TestCase
78
+ include FullStiClassNamesSharedTest
79
+
80
+ private
81
+ def store_full_sti_class
82
+ false
83
+ end
84
+ end
85
+
86
+ module PolymorphicFullClassNamesSharedTest
87
+ def setup
88
+ @old_store_full_class_name = ActiveRecord::Base.store_full_class_name
89
+ ActiveRecord::Base.store_full_class_name = store_full_class_name
90
+
91
+ post = Namespaced::Post.create(title: "Great stuff", body: "This is not", author_id: 1)
92
+ @tagging = post.create_tagging!
93
+ end
94
+
95
+ def teardown
96
+ ActiveRecord::Base.store_full_class_name = @old_store_full_class_name
97
+ end
98
+
99
+ def test_class_names
100
+ ActiveRecord::Base.store_full_class_name = !store_full_class_name
101
+ post = Namespaced::Post.find_by_title("Great stuff")
102
+ assert_nil post.tagging
103
+
104
+ ActiveRecord::Base.store_full_class_name = store_full_class_name
105
+ post = Namespaced::Post.find_by_title("Great stuff")
106
+ assert_equal @tagging, post.tagging
107
+ end
108
+
109
+ def test_class_names_with_includes
110
+ ActiveRecord::Base.store_full_class_name = !store_full_class_name
111
+ post = Namespaced::Post.includes(:tagging).find_by_title("Great stuff")
112
+ assert_nil post.tagging
113
+
114
+ ActiveRecord::Base.store_full_class_name = store_full_class_name
115
+ post = Namespaced::Post.includes(:tagging).find_by_title("Great stuff")
116
+ assert_equal @tagging, post.tagging
117
+ end
118
+
119
+ def test_class_names_with_eager_load
120
+ ActiveRecord::Base.store_full_class_name = !store_full_class_name
121
+ post = Namespaced::Post.eager_load(:tagging).find_by_title("Great stuff")
122
+ assert_nil post.tagging
123
+
124
+ ActiveRecord::Base.store_full_class_name = store_full_class_name
125
+ post = Namespaced::Post.eager_load(:tagging).find_by_title("Great stuff")
126
+ assert_equal @tagging, post.tagging
127
+ end
128
+
129
+ def test_class_names_with_find_by
130
+ post = Namespaced::Post.find_by_title("Great stuff")
131
+
132
+ ActiveRecord::Base.store_full_class_name = !store_full_class_name
133
+ assert_nil Tagging.find_by(taggable: post)
134
+
135
+ ActiveRecord::Base.store_full_class_name = store_full_class_name
136
+ assert_equal @tagging, Tagging.find_by(taggable: post)
137
+ end
138
+ end
139
+
140
+ class PolymorphicFullClassNamesTest < ActiveRecord::TestCase
141
+ include PolymorphicFullClassNamesSharedTest
142
+
143
+ private
144
+ def store_full_class_name
145
+ true
146
+ end
147
+ end
148
+
149
+ class PolymorphicNonFullClassNamesTest < ActiveRecord::TestCase
150
+ include PolymorphicFullClassNamesSharedTest
151
+
152
+ private
153
+ def store_full_class_name
154
+ false
155
+ end
156
+ end