ibm_db 5.2.0-x86-mingw32 → 5.3.2-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +15 -13
  5. data/ext/ibm_db.c +62 -57
  6. data/ext/ibm_db.o +0 -0
  7. data/ext/ibm_db.so +0 -0
  8. data/ext/mkmf.log +26 -24
  9. data/ext/ruby_ibm_db_cli.c +1 -0
  10. data/ext/ruby_ibm_db_cli.o +0 -0
  11. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  12. data/lib/ibm_db.so +1 -0
  13. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  14. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  15. data/test/activejob/destroy_association_async_test.rb +305 -0
  16. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  17. data/test/activejob/helper.rb +15 -0
  18. data/test/assets/schema_dump_5_1.yml +345 -0
  19. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  20. data/test/cases/adapter_test.rb +432 -218
  21. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  22. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  24. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  27. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  28. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  29. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  30. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  31. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  32. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  33. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  34. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  35. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  36. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  38. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  39. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  40. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  42. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  43. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  44. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  45. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  46. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  47. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  48. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  49. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  50. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  51. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  52. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  53. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  54. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  55. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  56. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  57. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  58. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  59. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  60. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  61. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  62. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  63. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  64. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  65. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  66. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  67. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  68. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  69. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  70. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  71. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  72. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  73. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  74. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  75. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  76. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  77. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  78. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  79. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  80. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  81. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  82. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  83. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  84. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  85. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  86. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  87. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  88. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  89. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  90. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  91. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  92. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  93. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  94. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  95. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  96. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  97. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  98. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  99. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  100. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  101. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  102. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  103. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  104. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  105. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  106. data/test/cases/aggregations_test.rb +14 -12
  107. data/test/cases/annotate_test.rb +46 -0
  108. data/test/cases/ar_schema_test.rb +153 -86
  109. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  110. data/test/cases/arel/attributes/math_test.rb +83 -0
  111. data/test/cases/arel/attributes_test.rb +27 -0
  112. data/test/cases/arel/collectors/bind_test.rb +40 -0
  113. data/test/cases/arel/collectors/composite_test.rb +47 -0
  114. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  115. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  116. data/test/cases/arel/crud_test.rb +65 -0
  117. data/test/cases/arel/delete_manager_test.rb +53 -0
  118. data/test/cases/arel/factory_methods_test.rb +46 -0
  119. data/test/cases/arel/helper.rb +45 -0
  120. data/test/cases/arel/insert_manager_test.rb +241 -0
  121. data/test/cases/arel/nodes/and_test.rb +30 -0
  122. data/test/cases/arel/nodes/as_test.rb +36 -0
  123. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  124. data/test/cases/arel/nodes/bin_test.rb +35 -0
  125. data/test/cases/arel/nodes/binary_test.rb +29 -0
  126. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  127. data/test/cases/arel/nodes/case_test.rb +96 -0
  128. data/test/cases/arel/nodes/casted_test.rb +18 -0
  129. data/test/cases/arel/nodes/comment_test.rb +22 -0
  130. data/test/cases/arel/nodes/count_test.rb +35 -0
  131. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  132. data/test/cases/arel/nodes/descending_test.rb +46 -0
  133. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  134. data/test/cases/arel/nodes/equality_test.rb +62 -0
  135. data/test/cases/arel/nodes/extract_test.rb +43 -0
  136. data/test/cases/arel/nodes/false_test.rb +21 -0
  137. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  138. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  139. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  140. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  141. data/test/cases/arel/nodes/node_test.rb +22 -0
  142. data/test/cases/arel/nodes/not_test.rb +31 -0
  143. data/test/cases/arel/nodes/or_test.rb +36 -0
  144. data/test/cases/arel/nodes/over_test.rb +69 -0
  145. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  146. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  147. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  148. data/test/cases/arel/nodes/sum_test.rb +35 -0
  149. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  150. data/test/cases/arel/nodes/true_test.rb +21 -0
  151. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  152. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  153. data/test/cases/arel/nodes/window_test.rb +81 -0
  154. data/test/cases/arel/nodes_test.rb +34 -0
  155. data/test/cases/arel/select_manager_test.rb +1238 -0
  156. data/test/cases/arel/support/fake_record.rb +135 -0
  157. data/test/cases/arel/table_test.rb +216 -0
  158. data/test/cases/arel/update_manager_test.rb +126 -0
  159. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  160. data/test/cases/arel/visitors/dot_test.rb +90 -0
  161. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  162. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  163. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  164. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  165. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  166. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  167. data/test/cases/associations/callbacks_test.rb +56 -38
  168. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  169. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  170. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  171. data/test/cases/associations/eager_singularization_test.rb +21 -21
  172. data/test/cases/associations/eager_test.rb +559 -415
  173. data/test/cases/associations/extension_test.rb +18 -12
  174. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  175. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  176. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  177. data/test/cases/associations/has_one_associations_test.rb +294 -129
  178. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  179. data/test/cases/associations/inner_join_association_test.rb +114 -38
  180. data/test/cases/associations/inverse_associations_test.rb +606 -398
  181. data/test/cases/associations/join_model_test.rb +158 -148
  182. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  183. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  184. data/test/cases/associations/required_test.rb +35 -10
  185. data/test/cases/associations_test.rb +241 -110
  186. data/test/cases/attribute_methods/read_test.rb +11 -11
  187. data/test/cases/attribute_methods_test.rb +413 -298
  188. data/test/cases/attributes_test.rb +145 -27
  189. data/test/cases/autosave_association_test.rb +681 -436
  190. data/test/cases/base_prevent_writes_test.rb +229 -0
  191. data/test/cases/base_test.rb +599 -542
  192. data/test/cases/batches_test.rb +288 -82
  193. data/test/cases/binary_test.rb +26 -31
  194. data/test/cases/bind_parameter_test.rb +194 -21
  195. data/test/cases/boolean_test.rb +52 -0
  196. data/test/cases/cache_key_test.rb +110 -5
  197. data/test/cases/calculations_test.rb +740 -177
  198. data/test/cases/callbacks_test.rb +74 -207
  199. data/test/cases/clone_test.rb +15 -10
  200. data/test/cases/coders/json_test.rb +2 -0
  201. data/test/cases/coders/yaml_column_test.rb +16 -13
  202. data/test/cases/collection_cache_key_test.rb +177 -20
  203. data/test/cases/column_alias_test.rb +9 -7
  204. data/test/cases/column_definition_test.rb +10 -68
  205. data/test/cases/comment_test.rb +166 -107
  206. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  207. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  208. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  209. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  210. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  211. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  212. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  213. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  214. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  215. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  216. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  217. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  218. data/test/cases/connection_management_test.rb +13 -11
  219. data/test/cases/connection_pool_test.rb +316 -83
  220. data/test/cases/core_test.rb +82 -58
  221. data/test/cases/counter_cache_test.rb +204 -50
  222. data/test/cases/custom_locking_test.rb +5 -3
  223. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  224. data/test/cases/database_configurations/resolver_test.rb +150 -0
  225. data/test/cases/database_configurations_test.rb +145 -0
  226. data/test/cases/database_selector_test.rb +296 -0
  227. data/test/cases/database_statements_test.rb +18 -16
  228. data/test/cases/date_test.rb +8 -16
  229. data/test/cases/date_time_precision_test.rb +100 -78
  230. data/test/cases/date_time_test.rb +23 -8
  231. data/test/cases/defaults_test.rb +106 -71
  232. data/test/cases/delegated_type_test.rb +57 -0
  233. data/test/cases/dirty_test.rb +419 -223
  234. data/test/cases/disconnected_test.rb +6 -6
  235. data/test/cases/dup_test.rb +54 -27
  236. data/test/cases/enum_test.rb +461 -82
  237. data/test/cases/errors_test.rb +7 -7
  238. data/test/cases/explain_subscriber_test.rb +17 -15
  239. data/test/cases/explain_test.rb +11 -19
  240. data/test/cases/filter_attributes_test.rb +153 -0
  241. data/test/cases/finder_respond_to_test.rb +14 -14
  242. data/test/cases/finder_test.rb +669 -287
  243. data/test/cases/fixture_set/file_test.rb +34 -38
  244. data/test/cases/fixtures_test.rb +833 -176
  245. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  246. data/test/cases/habtm_destroy_order_test.rb +25 -25
  247. data/test/cases/helper.rb +78 -49
  248. data/test/cases/hot_compatibility_test.rb +33 -32
  249. data/test/cases/i18n_test.rb +18 -17
  250. data/test/cases/inheritance_test.rb +180 -115
  251. data/test/cases/insert_all_test.rb +489 -0
  252. data/test/cases/instrumentation_test.rb +101 -0
  253. data/test/cases/integration_test.rb +119 -31
  254. data/test/cases/invalid_connection_test.rb +18 -16
  255. data/test/cases/invertible_migration_test.rb +183 -43
  256. data/test/cases/json_attribute_test.rb +35 -0
  257. data/test/cases/json_serialization_test.rb +57 -58
  258. data/test/cases/json_shared_test_cases.rb +290 -0
  259. data/test/cases/locking_test.rb +413 -119
  260. data/test/cases/log_subscriber_test.rb +68 -26
  261. data/test/cases/marshal_serialization_test.rb +39 -0
  262. data/test/cases/migration/change_schema_test.rb +118 -72
  263. data/test/cases/migration/change_table_test.rb +138 -30
  264. data/test/cases/migration/check_constraint_test.rb +162 -0
  265. data/test/cases/migration/column_attributes_test.rb +45 -35
  266. data/test/cases/migration/column_positioning_test.rb +18 -6
  267. data/test/cases/migration/columns_test.rb +93 -77
  268. data/test/cases/migration/command_recorder_test.rb +121 -34
  269. data/test/cases/migration/compatibility_test.rb +578 -23
  270. data/test/cases/migration/create_join_table_test.rb +35 -25
  271. data/test/cases/migration/foreign_key_test.rb +503 -284
  272. data/test/cases/migration/helper.rb +4 -3
  273. data/test/cases/migration/index_test.rb +119 -70
  274. data/test/cases/migration/logger_test.rb +9 -6
  275. data/test/cases/migration/pending_migrations_test.rb +88 -34
  276. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  277. data/test/cases/migration/references_index_test.rb +38 -19
  278. data/test/cases/migration/references_statements_test.rb +15 -14
  279. data/test/cases/migration/rename_table_test.rb +53 -30
  280. data/test/cases/migration_test.rb +637 -269
  281. data/test/cases/migrator_test.rb +191 -135
  282. data/test/cases/mixin_test.rb +7 -11
  283. data/test/cases/modules_test.rb +36 -34
  284. data/test/cases/multi_db_migrator_test.rb +223 -0
  285. data/test/cases/multiparameter_attributes_test.rb +60 -33
  286. data/test/cases/multiple_db_test.rb +16 -22
  287. data/test/cases/nested_attributes_test.rb +341 -320
  288. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  289. data/test/cases/null_relation_test.rb +84 -0
  290. data/test/cases/numeric_data_test.rb +93 -0
  291. data/test/cases/persistence_test.rb +361 -269
  292. data/test/cases/pooled_connections_test.rb +18 -26
  293. data/test/cases/prepared_statement_status_test.rb +48 -0
  294. data/test/cases/primary_keys_test.rb +210 -104
  295. data/test/cases/query_cache_test.rb +610 -141
  296. data/test/cases/quoting_test.rb +132 -31
  297. data/test/cases/readonly_test.rb +49 -48
  298. data/test/cases/reaper_test.rb +146 -32
  299. data/test/cases/reflection_test.rb +167 -156
  300. data/test/cases/relation/delegation_test.rb +49 -36
  301. data/test/cases/relation/delete_all_test.rb +117 -0
  302. data/test/cases/relation/merging_test.rb +319 -42
  303. data/test/cases/relation/mutation_test.rb +55 -93
  304. data/test/cases/relation/or_test.rb +129 -29
  305. data/test/cases/relation/predicate_builder_test.rb +21 -6
  306. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  307. data/test/cases/relation/select_test.rb +67 -0
  308. data/test/cases/relation/update_all_test.rb +317 -0
  309. data/test/cases/relation/where_chain_test.rb +68 -32
  310. data/test/cases/relation/where_clause_test.rb +136 -61
  311. data/test/cases/relation/where_test.rb +155 -48
  312. data/test/cases/relation_test.rb +266 -112
  313. data/test/cases/relations_test.rb +969 -744
  314. data/test/cases/reload_models_test.rb +13 -9
  315. data/test/cases/reserved_word_test.rb +141 -0
  316. data/test/cases/result_test.rb +68 -17
  317. data/test/cases/sanitize_test.rb +87 -71
  318. data/test/cases/schema_dumper_test.rb +221 -128
  319. data/test/cases/schema_loading_test.rb +3 -2
  320. data/test/cases/scoping/default_scoping_test.rb +185 -144
  321. data/test/cases/scoping/named_scoping_test.rb +177 -89
  322. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  323. data/test/cases/secure_token_test.rb +18 -3
  324. data/test/cases/serialization_test.rb +30 -28
  325. data/test/cases/serialized_attribute_test.rb +133 -42
  326. data/test/cases/signed_id_test.rb +168 -0
  327. data/test/cases/statement_cache_test.rb +41 -24
  328. data/test/cases/statement_invalid_test.rb +42 -0
  329. data/test/cases/store_test.rb +180 -55
  330. data/test/cases/strict_loading_test.rb +473 -0
  331. data/test/cases/suppressor_test.rb +26 -12
  332. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  333. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  334. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  335. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  336. data/test/cases/test_case.rb +51 -40
  337. data/test/cases/test_databases_test.rb +79 -0
  338. data/test/cases/test_fixtures_test.rb +79 -19
  339. data/test/cases/time_precision_test.rb +98 -76
  340. data/test/cases/timestamp_test.rb +102 -99
  341. data/test/cases/touch_later_test.rb +12 -10
  342. data/test/cases/transaction_callbacks_test.rb +344 -90
  343. data/test/cases/transaction_isolation_test.rb +12 -12
  344. data/test/cases/transactions_test.rb +612 -162
  345. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  346. data/test/cases/type/date_time_test.rb +4 -2
  347. data/test/cases/type/integer_test.rb +4 -2
  348. data/test/cases/type/string_test.rb +10 -8
  349. data/test/cases/type/time_test.rb +28 -0
  350. data/test/cases/type/type_map_test.rb +29 -28
  351. data/test/cases/type/unsigned_integer_test.rb +19 -0
  352. data/test/cases/type_test.rb +2 -0
  353. data/test/cases/types_test.rb +3 -1
  354. data/test/cases/unconnected_test.rb +14 -1
  355. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  356. data/test/cases/validations/absence_validation_test.rb +19 -17
  357. data/test/cases/validations/association_validation_test.rb +30 -28
  358. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  359. data/test/cases/validations/i18n_validation_test.rb +22 -21
  360. data/test/cases/validations/length_validation_test.rb +34 -33
  361. data/test/cases/validations/numericality_validation_test.rb +181 -0
  362. data/test/cases/validations/presence_validation_test.rb +21 -19
  363. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  364. data/test/cases/validations_repair_helper.rb +2 -0
  365. data/test/cases/validations_test.rb +61 -26
  366. data/test/cases/view_test.rb +122 -116
  367. data/test/cases/yaml_serialization_test.rb +79 -34
  368. data/test/config.example.yml +19 -19
  369. data/test/config.rb +3 -1
  370. data/test/config.yml +16 -6
  371. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  372. data/test/fixtures/author_addresses.yml +1 -8
  373. data/test/fixtures/authors.yml +1 -7
  374. data/test/fixtures/binaries.yml +4 -0
  375. data/test/fixtures/books.yml +9 -2
  376. data/test/fixtures/categories_posts.yml +3 -0
  377. data/test/fixtures/citations.yml +5 -0
  378. data/test/fixtures/comments.yml +7 -0
  379. data/test/fixtures/companies.yml +5 -0
  380. data/test/fixtures/computers.yml +2 -0
  381. data/test/fixtures/customers.yml +10 -1
  382. data/test/fixtures/developers.yml +1 -1
  383. data/test/fixtures/essays.yml +10 -0
  384. data/test/fixtures/faces.yml +3 -3
  385. data/test/fixtures/humans.yml +5 -0
  386. data/test/fixtures/interests.yml +7 -7
  387. data/test/fixtures/memberships.yml +7 -0
  388. data/test/fixtures/minimalistics.yml +3 -0
  389. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  390. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  391. data/test/fixtures/naked/yml/parrots.yml +1 -0
  392. data/test/fixtures/other_books.yml +26 -0
  393. data/test/fixtures/other_posts.yml +1 -0
  394. data/test/fixtures/parrots.yml +7 -1
  395. data/test/fixtures/pirates.yml +3 -0
  396. data/test/fixtures/posts.yml +11 -3
  397. data/test/fixtures/readers.yml +6 -0
  398. data/test/fixtures/reserved_words/values.yml +2 -2
  399. data/test/fixtures/sponsors.yml +3 -0
  400. data/test/fixtures/strict_zines.yml +2 -0
  401. data/test/fixtures/subscribers.yml +1 -1
  402. data/test/fixtures/tasks.yml +1 -1
  403. data/test/fixtures/warehouse-things.yml +3 -0
  404. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  405. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  406. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  407. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  408. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  409. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  410. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  411. data/test/migrations/rename/1_we_need_things.rb +2 -0
  412. data/test/migrations/rename/2_rename_things.rb +2 -0
  413. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  414. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  415. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  416. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  417. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  419. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  420. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  421. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  422. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  423. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  424. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  425. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  431. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  432. data/test/models/account.rb +46 -0
  433. data/test/models/admin/account.rb +3 -1
  434. data/test/models/admin/randomly_named_c1.rb +2 -0
  435. data/test/models/admin/user.rb +16 -8
  436. data/test/models/admin.rb +4 -2
  437. data/test/models/aircraft.rb +3 -1
  438. data/test/models/arunit2_model.rb +2 -0
  439. data/test/models/author.rb +153 -102
  440. data/test/models/auto_id.rb +2 -0
  441. data/test/models/autoloadable/extra_firm.rb +2 -0
  442. data/test/models/binary.rb +3 -1
  443. data/test/models/binary_field.rb +6 -0
  444. data/test/models/bird.rb +13 -1
  445. data/test/models/book.rb +14 -4
  446. data/test/models/book_destroy_async.rb +24 -0
  447. data/test/models/boolean.rb +5 -0
  448. data/test/models/bulb.rb +13 -4
  449. data/test/models/cake_designer.rb +2 -0
  450. data/test/models/car.rb +17 -10
  451. data/test/models/carrier.rb +2 -0
  452. data/test/models/cart.rb +5 -0
  453. data/test/models/cat.rb +2 -0
  454. data/test/models/categorization.rb +8 -6
  455. data/test/models/category.rb +28 -16
  456. data/test/models/chef.rb +2 -0
  457. data/test/models/citation.rb +5 -1
  458. data/test/models/club.rb +13 -10
  459. data/test/models/college.rb +4 -2
  460. data/test/models/column.rb +2 -0
  461. data/test/models/column_name.rb +2 -0
  462. data/test/models/comment.rb +32 -10
  463. data/test/models/company.rb +102 -106
  464. data/test/models/company_in_module.rb +27 -26
  465. data/test/models/computer.rb +3 -1
  466. data/test/models/contact.rb +15 -13
  467. data/test/models/content.rb +5 -3
  468. data/test/models/contract.rb +21 -3
  469. data/test/models/country.rb +2 -4
  470. data/test/models/course.rb +3 -1
  471. data/test/models/customer.rb +10 -8
  472. data/test/models/customer_carrier.rb +2 -0
  473. data/test/models/dashboard.rb +2 -0
  474. data/test/models/default.rb +2 -0
  475. data/test/models/department.rb +2 -0
  476. data/test/models/destroy_async_parent.rb +15 -0
  477. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  478. data/test/models/developer.rb +152 -85
  479. data/test/models/dl_keyed_belongs_to.rb +13 -0
  480. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  481. data/test/models/dl_keyed_has_many.rb +5 -0
  482. data/test/models/dl_keyed_has_many_through.rb +5 -0
  483. data/test/models/dl_keyed_has_one.rb +5 -0
  484. data/test/models/dl_keyed_join.rb +10 -0
  485. data/test/models/dog.rb +2 -0
  486. data/test/models/dog_lover.rb +2 -0
  487. data/test/models/doubloon.rb +3 -1
  488. data/test/models/drink_designer.rb +17 -0
  489. data/test/models/edge.rb +4 -2
  490. data/test/models/electron.rb +2 -0
  491. data/test/models/engine.rb +3 -2
  492. data/test/models/entrant.rb +2 -0
  493. data/test/models/entry.rb +5 -0
  494. data/test/models/essay.rb +6 -3
  495. data/test/models/essay_destroy_async.rb +12 -0
  496. data/test/models/event.rb +3 -1
  497. data/test/models/eye.rb +5 -3
  498. data/test/models/face.rb +14 -6
  499. data/test/models/family.rb +6 -0
  500. data/test/models/family_tree.rb +6 -0
  501. data/test/models/friendship.rb +5 -3
  502. data/test/models/frog.rb +8 -0
  503. data/test/models/guid.rb +3 -1
  504. data/test/models/guitar.rb +2 -0
  505. data/test/models/hotel.rb +5 -3
  506. data/test/models/human.rb +39 -0
  507. data/test/models/image.rb +3 -1
  508. data/test/models/interest.rb +14 -3
  509. data/test/models/invoice.rb +4 -2
  510. data/test/models/item.rb +3 -1
  511. data/test/models/job.rb +5 -3
  512. data/test/models/joke.rb +4 -2
  513. data/test/models/keyboard.rb +3 -1
  514. data/test/models/legacy_thing.rb +2 -0
  515. data/test/models/lesson.rb +2 -0
  516. data/test/models/line_item.rb +3 -1
  517. data/test/models/liquid.rb +2 -0
  518. data/test/models/matey.rb +3 -1
  519. data/test/models/measurement.rb +4 -0
  520. data/test/models/member.rb +23 -20
  521. data/test/models/member_detail.rb +3 -0
  522. data/test/models/member_type.rb +2 -0
  523. data/test/models/membership.rb +4 -1
  524. data/test/models/mentor.rb +3 -1
  525. data/test/models/message.rb +5 -0
  526. data/test/models/minimalistic.rb +2 -0
  527. data/test/models/minivan.rb +3 -2
  528. data/test/models/mixed_case_monkey.rb +3 -1
  529. data/test/models/molecule.rb +2 -0
  530. data/test/models/mouse.rb +6 -0
  531. data/test/models/movie.rb +2 -0
  532. data/test/models/node.rb +4 -2
  533. data/test/models/non_primary_key.rb +2 -0
  534. data/test/models/notification.rb +2 -0
  535. data/test/models/numeric_data.rb +12 -0
  536. data/test/models/order.rb +4 -2
  537. data/test/models/organization.rb +9 -7
  538. data/test/models/other_dog.rb +3 -1
  539. data/test/models/owner.rb +6 -4
  540. data/test/models/parrot.rb +12 -4
  541. data/test/models/person.rb +59 -54
  542. data/test/models/personal_legacy_thing.rb +3 -1
  543. data/test/models/pet.rb +4 -2
  544. data/test/models/pet_treasure.rb +2 -0
  545. data/test/models/pirate.rb +67 -43
  546. data/test/models/possession.rb +3 -1
  547. data/test/models/post.rb +184 -86
  548. data/test/models/price_estimate.rb +11 -1
  549. data/test/models/professor.rb +3 -1
  550. data/test/models/project.rb +14 -12
  551. data/test/models/publisher/article.rb +2 -0
  552. data/test/models/publisher/magazine.rb +2 -0
  553. data/test/models/publisher.rb +2 -0
  554. data/test/models/randomly_named_c1.rb +2 -0
  555. data/test/models/rating.rb +5 -1
  556. data/test/models/reader.rb +7 -5
  557. data/test/models/recipe.rb +2 -0
  558. data/test/models/record.rb +2 -0
  559. data/test/models/reference.rb +6 -3
  560. data/test/models/reply.rb +39 -21
  561. data/test/models/room.rb +6 -0
  562. data/test/models/section.rb +6 -0
  563. data/test/models/seminar.rb +6 -0
  564. data/test/models/session.rb +6 -0
  565. data/test/models/ship.rb +12 -9
  566. data/test/models/ship_part.rb +5 -3
  567. data/test/models/shop.rb +4 -2
  568. data/test/models/shop_account.rb +2 -0
  569. data/test/models/speedometer.rb +2 -0
  570. data/test/models/sponsor.rb +8 -5
  571. data/test/models/squeak.rb +6 -0
  572. data/test/models/strict_zine.rb +7 -0
  573. data/test/models/string_key_object.rb +2 -0
  574. data/test/models/student.rb +2 -0
  575. data/test/models/subscriber.rb +4 -2
  576. data/test/models/subscription.rb +5 -1
  577. data/test/models/tag.rb +6 -3
  578. data/test/models/tagging.rb +13 -6
  579. data/test/models/task.rb +2 -0
  580. data/test/models/topic.rb +54 -19
  581. data/test/models/toy.rb +4 -0
  582. data/test/models/traffic_light.rb +2 -0
  583. data/test/models/treasure.rb +5 -3
  584. data/test/models/treaty.rb +2 -4
  585. data/test/models/tree.rb +2 -0
  586. data/test/models/tuning_peg.rb +2 -0
  587. data/test/models/tyre.rb +2 -0
  588. data/test/models/user.rb +12 -4
  589. data/test/models/uuid_child.rb +2 -0
  590. data/test/models/uuid_item.rb +2 -0
  591. data/test/models/uuid_parent.rb +2 -0
  592. data/test/models/vegetables.rb +12 -3
  593. data/test/models/vertex.rb +6 -4
  594. data/test/models/warehouse_thing.rb +2 -0
  595. data/test/models/wheel.rb +3 -1
  596. data/test/models/without_table.rb +3 -1
  597. data/test/models/zine.rb +3 -1
  598. data/test/schema/mysql2_specific_schema.rb +49 -35
  599. data/test/schema/oracle_specific_schema.rb +13 -15
  600. data/test/schema/postgresql_specific_schema.rb +51 -40
  601. data/test/schema/schema.rb +334 -154
  602. data/test/schema/sqlite_specific_schema.rb +9 -16
  603. data/test/support/config.rb +26 -26
  604. data/test/support/connection.rb +14 -8
  605. data/test/support/connection_helper.rb +3 -1
  606. data/test/support/ddl_helper.rb +2 -0
  607. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  608. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  609. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  610. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  617. data/test/support/schema_dumping_helper.rb +2 -0
  618. data/test/support/stubs/strong_parameters.rb +40 -0
  619. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  620. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  621. metadata +190 -14
@@ -1,38 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/tag'
3
- require 'models/tagging'
4
- require 'models/post'
5
- require 'models/rating'
6
- require 'models/item'
7
- require 'models/comment'
8
- require 'models/author'
9
- require 'models/category'
10
- require 'models/categorization'
11
- require 'models/vertex'
12
- require 'models/edge'
13
- require 'models/book'
14
- require 'models/citation'
15
- require 'models/aircraft'
16
- require 'models/engine'
17
- require 'models/car'
4
+ require "models/tag"
5
+ require "models/tagging"
6
+ require "models/post"
7
+ require "models/rating"
8
+ require "models/item"
9
+ require "models/comment"
10
+ require "models/author"
11
+ require "models/category"
12
+ require "models/categorization"
13
+ require "models/vertex"
14
+ require "models/edge"
15
+ require "models/book"
16
+ require "models/citation"
17
+ require "models/aircraft"
18
+ require "models/engine"
19
+ require "models/car"
18
20
 
19
21
  class AssociationsJoinModelTest < ActiveRecord::TestCase
20
22
  self.use_transactional_tests = false unless supports_savepoints?
21
23
 
22
- fixtures :posts, :authors, :categories, :categorizations, :comments, :tags, :taggings, :author_favorites, :vertices, :items, :books,
24
+ fixtures :posts, :authors, :author_addresses, :categories, :categorizations, :comments, :tags, :taggings, :author_favorites, :vertices, :items, :books,
23
25
  # Reload edges table from fixtures as otherwise repeated test was failing
24
26
  :edges
25
27
 
26
28
  def test_has_many
27
- assert authors(:david).categories.include?(categories(:general))
29
+ assert_includes authors(:david).categories, categories(:general)
28
30
  end
29
31
 
30
32
  def test_has_many_inherited
31
- assert authors(:mary).categories.include?(categories(:sti_test))
33
+ assert_includes authors(:mary).categories, categories(:sti_test)
32
34
  end
33
35
 
34
36
  def test_inherited_has_many
35
- assert categories(:sti_test).authors.include?(authors(:mary))
37
+ assert_includes categories(:sti_test).authors, authors(:mary)
36
38
  end
37
39
 
38
40
  def test_has_many_distinct_through_join_model
@@ -42,11 +44,11 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
42
44
 
43
45
  def test_has_many_distinct_through_count
44
46
  author = authors(:mary)
45
- assert !authors(:mary).unique_categorized_posts.loaded?
47
+ assert_not_predicate authors(:mary).unique_categorized_posts, :loaded?
46
48
  assert_queries(1) { assert_equal 1, author.unique_categorized_posts.count }
47
49
  assert_queries(1) { assert_equal 1, author.unique_categorized_posts.count(:title) }
48
50
  assert_queries(1) { assert_equal 0, author.unique_categorized_posts.where(title: nil).count(:title) }
49
- assert !authors(:mary).unique_categorized_posts.loaded?
51
+ assert_not_predicate authors(:mary).unique_categorized_posts, :loaded?
50
52
  end
51
53
 
52
54
  def test_has_many_distinct_through_find
@@ -97,11 +99,11 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
97
99
  end
98
100
 
99
101
  def test_polymorphic_has_many_create_model_with_inheritance_and_custom_base_class
100
- post = SubStiPost.create :title => 'SubStiPost', :body => 'SubStiPost body'
101
- assert_instance_of SubStiPost, post
102
+ post = SubAbstractStiPost.create title: "SubAbstractStiPost", body: "SubAbstractStiPost body"
103
+ assert_instance_of SubAbstractStiPost, post
102
104
 
103
- tagging = tags(:misc).taggings.create(:taggable => post)
104
- assert_equal "SubStiPost", tagging.taggable_type
105
+ tagging = tags(:misc).taggings.create(taggable: post)
106
+ assert_equal "SubAbstractStiPost", tagging.taggable_type
105
107
  end
106
108
 
107
109
  def test_polymorphic_has_many_going_through_join_model_with_inheritance
@@ -116,12 +118,12 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
116
118
  post = posts(:thinking)
117
119
  assert_instance_of SpecialPost, post
118
120
 
119
- tagging = tags(:misc).taggings.create(:taggable => post)
121
+ tagging = tags(:misc).taggings.create(taggable: post)
120
122
  assert_equal "Post", tagging.taggable_type
121
123
  end
122
124
 
123
125
  def test_polymorphic_has_one_create_model_with_inheritance
124
- tagging = tags(:misc).create_tagging(:taggable => posts(:thinking))
126
+ tagging = tags(:misc).create_tagging(taggable: posts(:thinking))
125
127
  assert_equal "Post", tagging.taggable_type
126
128
  end
127
129
 
@@ -142,7 +144,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
142
144
 
143
145
  def test_set_polymorphic_has_one_on_new_record
144
146
  tagging = tags(:misc).taggings.create
145
- post = Post.new :title => "foo", :body => "bar"
147
+ post = Post.new title: "foo", body: "bar"
146
148
  post.tagging = tagging
147
149
  post.save!
148
150
 
@@ -153,50 +155,50 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
153
155
 
154
156
  def test_create_polymorphic_has_many_with_scope
155
157
  old_count = posts(:welcome).taggings.count
156
- tagging = posts(:welcome).taggings.create(:tag => tags(:misc))
158
+ tagging = posts(:welcome).taggings.create(tag: tags(:misc))
157
159
  assert_equal "Post", tagging.taggable_type
158
- assert_equal old_count+1, posts(:welcome).taggings.count
160
+ assert_equal old_count + 1, posts(:welcome).taggings.count
159
161
  end
160
162
 
161
163
  def test_create_bang_polymorphic_with_has_many_scope
162
164
  old_count = posts(:welcome).taggings.count
163
- tagging = posts(:welcome).taggings.create!(:tag => tags(:misc))
165
+ tagging = posts(:welcome).taggings.create!(tag: tags(:misc))
164
166
  assert_equal "Post", tagging.taggable_type
165
- assert_equal old_count+1, posts(:welcome).taggings.count
167
+ assert_equal old_count + 1, posts(:welcome).taggings.count
166
168
  end
167
169
 
168
170
  def test_create_polymorphic_has_one_with_scope
169
171
  old_count = Tagging.count
170
- tagging = posts(:welcome).create_tagging(:tag => tags(:misc))
172
+ tagging = posts(:welcome).create_tagging(tag: tags(:misc))
171
173
  assert_equal "Post", tagging.taggable_type
172
- assert_equal old_count+1, Tagging.count
174
+ assert_equal old_count + 1, Tagging.count
173
175
  end
174
176
 
175
177
  def test_delete_polymorphic_has_many_with_delete_all
176
178
  assert_equal 1, posts(:welcome).taggings.count
177
- posts(:welcome).taggings.first.update_columns taggable_type: 'PostWithHasManyDeleteAll'
179
+ posts(:welcome).taggings.first.update_columns taggable_type: "PostWithHasManyDeleteAll"
178
180
  post = find_post_with_dependency(1, :has_many, :taggings, :delete_all)
179
181
 
180
182
  old_count = Tagging.count
181
183
  post.destroy
182
- assert_equal old_count-1, Tagging.count
184
+ assert_equal old_count - 1, Tagging.count
183
185
  assert_equal 0, posts(:welcome).taggings.count
184
186
  end
185
187
 
186
188
  def test_delete_polymorphic_has_many_with_destroy
187
189
  assert_equal 1, posts(:welcome).taggings.count
188
- posts(:welcome).taggings.first.update_columns taggable_type: 'PostWithHasManyDestroy'
190
+ posts(:welcome).taggings.first.update_columns taggable_type: "PostWithHasManyDestroy"
189
191
  post = find_post_with_dependency(1, :has_many, :taggings, :destroy)
190
192
 
191
193
  old_count = Tagging.count
192
194
  post.destroy
193
- assert_equal old_count-1, Tagging.count
195
+ assert_equal old_count - 1, Tagging.count
194
196
  assert_equal 0, posts(:welcome).taggings.count
195
197
  end
196
198
 
197
199
  def test_delete_polymorphic_has_many_with_nullify
198
200
  assert_equal 1, posts(:welcome).taggings.count
199
- posts(:welcome).taggings.first.update_columns taggable_type: 'PostWithHasManyNullify'
201
+ posts(:welcome).taggings.first.update_columns taggable_type: "PostWithHasManyNullify"
200
202
  post = find_post_with_dependency(1, :has_many, :taggings, :nullify)
201
203
 
202
204
  old_count = Tagging.count
@@ -207,19 +209,19 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
207
209
 
208
210
  def test_delete_polymorphic_has_one_with_destroy
209
211
  assert posts(:welcome).tagging
210
- posts(:welcome).tagging.update_columns taggable_type: 'PostWithHasOneDestroy'
212
+ posts(:welcome).tagging.update_columns taggable_type: "PostWithHasOneDestroy"
211
213
  post = find_post_with_dependency(1, :has_one, :tagging, :destroy)
212
214
 
213
215
  old_count = Tagging.count
214
216
  post.destroy
215
- assert_equal old_count-1, Tagging.count
217
+ assert_equal old_count - 1, Tagging.count
216
218
  posts(:welcome).association(:tagging).reload
217
219
  assert_nil posts(:welcome).tagging
218
220
  end
219
221
 
220
222
  def test_delete_polymorphic_has_one_with_nullify
221
223
  assert posts(:welcome).tagging
222
- posts(:welcome).tagging.update_columns taggable_type: 'PostWithHasOneNullify'
224
+ posts(:welcome).tagging.update_columns taggable_type: "PostWithHasOneNullify"
223
225
  post = find_post_with_dependency(1, :has_one, :tagging, :nullify)
224
226
 
225
227
  old_count = Tagging.count
@@ -235,15 +237,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
235
237
 
236
238
  def test_create_through_has_many_with_piggyback
237
239
  category = categories(:sti_test)
238
- ernie = category.authors_with_select.create(:name => 'Ernie')
240
+ ernie = category.authors_with_select.create(name: "Ernie")
239
241
  assert_nothing_raised do
240
- assert_equal ernie, category.authors_with_select.detect {|a| a.name == 'Ernie'}
242
+ assert_equal ernie, category.authors_with_select.detect { |a| a.name == "Ernie" }
241
243
  end
242
244
  end
243
245
 
244
246
  def test_include_has_many_through
245
- posts = Post.all.merge!(:order => 'posts.id').to_a
246
- posts_with_authors = Post.all.merge!(:includes => :authors, :order => 'posts.id').to_a
247
+ posts = Post.all.merge!(order: "posts.id").to_a
248
+ posts_with_authors = Post.all.merge!(includes: :authors, order: "posts.id").to_a
247
249
  assert_equal posts.length, posts_with_authors.length
248
250
  posts.length.times do |i|
249
251
  assert_equal posts[i].authors.length, assert_no_queries { posts_with_authors[i].authors.length }
@@ -267,8 +269,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
267
269
  end
268
270
 
269
271
  def test_include_polymorphic_has_many_through
270
- posts = Post.all.merge!(:order => 'posts.id').to_a
271
- posts_with_tags = Post.all.merge!(:includes => :tags, :order => 'posts.id').to_a
272
+ posts = Post.all.merge!(order: "posts.id").to_a
273
+ posts_with_tags = Post.all.merge!(includes: :tags, order: "posts.id").to_a
272
274
  assert_equal posts.length, posts_with_tags.length
273
275
  posts.length.times do |i|
274
276
  assert_equal posts[i].tags.length, assert_no_queries { posts_with_tags[i].tags.length }
@@ -276,8 +278,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
276
278
  end
277
279
 
278
280
  def test_include_polymorphic_has_many
279
- posts = Post.all.merge!(:order => 'posts.id').to_a
280
- posts_with_taggings = Post.all.merge!(:includes => :taggings, :order => 'posts.id').to_a
281
+ posts = Post.all.merge!(order: "posts.id").to_a
282
+ posts_with_taggings = Post.all.merge!(includes: :taggings, order: "posts.id").to_a
281
283
  assert_equal posts.length, posts_with_taggings.length
282
284
  posts.length.times do |i|
283
285
  assert_equal posts[i].taggings.length, assert_no_queries { posts_with_taggings[i].taggings.length }
@@ -302,7 +304,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
302
304
  end
303
305
 
304
306
  def test_has_many_array_methods_called_by_method_missing
305
- assert authors(:david).categories.any? { |category| category.name == 'General' }
307
+ assert authors(:david).categories.any? { |category| category.name == "General" }
306
308
  assert_nothing_raised { authors(:david).categories.sort }
307
309
  end
308
310
 
@@ -324,12 +326,12 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
324
326
  end
325
327
 
326
328
  def test_has_many_through_with_custom_primary_key_on_has_many_source
327
- assert_equal [authors(:david), authors(:bob)], posts(:thinking).authors_using_custom_pk.order('authors.id')
329
+ assert_equal [authors(:david), authors(:bob)], posts(:thinking).authors_using_custom_pk.order("authors.id")
328
330
  end
329
331
 
330
332
  def test_belongs_to_polymorphic_with_counter_cache
331
333
  assert_equal 1, posts(:welcome)[:tags_count]
332
- tagging = posts(:welcome).taggings.create(:tag => tags(:general))
334
+ tagging = posts(:welcome).taggings.create(tag: tags(:general))
333
335
  assert_equal 2, posts(:welcome, :reload)[:tags_count]
334
336
  tagging.destroy
335
337
  assert_equal 1, posts(:welcome, :reload)[:tags_count]
@@ -339,6 +341,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
339
341
  assert_raise(ActiveRecord::HasManyThroughAssociationNotFoundError) { authors(:david).nothings }
340
342
  end
341
343
 
344
+ if defined?(DidYouMean) && DidYouMean.respond_to?(:correct_error)
345
+ def test_exceptions_have_suggestions_for_fix
346
+ error = assert_raise(ActiveRecord::HasManyThroughAssociationNotFoundError) {
347
+ authors(:david).nothings
348
+ }
349
+ assert_match "Did you mean?", error.message
350
+ end
351
+ end
352
+
342
353
  def test_has_many_through_join_model_with_conditions
343
354
  assert_equal [], posts(:welcome).invalid_taggings
344
355
  assert_equal [], posts(:welcome).invalid_tags
@@ -354,7 +365,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
354
365
  end
355
366
 
356
367
  assert_raise ActiveRecord::EagerLoadPolymorphicError do
357
- tags(:general).taggings.includes(:taggable).where('bogus_table.column = 1').references(:bogus_table).to_a
368
+ tags(:general).taggings.includes(:taggable).where("bogus_table.column = 1").references(:bogus_table).to_a
358
369
  end
359
370
  end
360
371
 
@@ -365,13 +376,13 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
365
376
 
366
377
  def test_has_many_polymorphic_associations_merges_through_scope
367
378
  Tag.has_many :null_taggings, -> { none }, class_name: :Tagging
368
- Tag.has_many :null_tagged_posts, :through => :null_taggings, :source => 'taggable', :source_type => 'Post'
379
+ Tag.has_many :null_tagged_posts, through: :null_taggings, source: "taggable", source_type: "Post"
369
380
  assert_equal [], tags(:general).null_tagged_posts
370
- refute_equal [], tags(:general).tagged_posts
381
+ assert_not_equal [], tags(:general).tagged_posts
371
382
  end
372
383
 
373
384
  def test_eager_has_many_polymorphic_with_source_type
374
- tag_with_include = Tag.all.merge!(:includes => :tagged_posts).find(tags(:general).id)
385
+ tag_with_include = Tag.all.merge!(includes: :tagged_posts).find(tags(:general).id)
375
386
  desired = posts(:welcome, :thinking)
376
387
  assert_no_queries do
377
388
  # added sort by ID as otherwise test using JRuby was failing as array elements were in different order
@@ -381,19 +392,19 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
381
392
  end
382
393
 
383
394
  def test_has_many_through_has_many_find_all
384
- assert_equal comments(:greetings), authors(:david).comments.order('comments.id').to_a.first
395
+ assert_equal comments(:greetings), authors(:david).comments.order("comments.id").to_a.first
385
396
  end
386
397
 
387
398
  def test_has_many_through_has_many_find_all_with_custom_class
388
- assert_equal comments(:greetings), authors(:david).funky_comments.order('comments.id').to_a.first
399
+ assert_equal comments(:greetings), authors(:david).funky_comments.order("comments.id").to_a.first
389
400
  end
390
401
 
391
402
  def test_has_many_through_has_many_find_first
392
- assert_equal comments(:greetings), authors(:david).comments.order('comments.id').first
403
+ assert_equal comments(:greetings), authors(:david).comments.order("comments.id").first
393
404
  end
394
405
 
395
406
  def test_has_many_through_has_many_find_conditions
396
- options = { :where => "comments.#{QUOTED_TYPE}='SpecialComment'", :order => 'comments.id' }
407
+ options = { where: "comments.#{QUOTED_TYPE}='SpecialComment'", order: "comments.id" }
397
408
  assert_equal comments(:does_it_hurt), authors(:david).comments.merge(options).first
398
409
  end
399
410
 
@@ -402,7 +413,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
402
413
  end
403
414
 
404
415
  def test_has_many_through_polymorphic_has_one
405
- assert_equal Tagging.find(1,2).sort_by(&:id), authors(:david).taggings_2
416
+ assert_equal Tagging.find(1, 2).sort_by(&:id), authors(:david).taggings_2.sort_by(&:id)
406
417
  end
407
418
 
408
419
  def test_has_many_through_polymorphic_has_many
@@ -413,20 +424,20 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
413
424
  author = Author.includes(:taggings).find authors(:david).id
414
425
  expected_taggings = taggings(:welcome_general, :thinking_general)
415
426
  assert_no_queries do
416
- assert_equal expected_taggings, author.taggings.distinct.sort_by(&:id)
427
+ assert_equal expected_taggings, author.taggings.uniq.sort_by(&:id)
417
428
  end
418
429
  end
419
430
 
420
431
  def test_eager_load_has_many_through_has_many
421
- author = Author.all.merge!(:where => ['name = ?', 'David'], :includes => :comments, :order => 'comments.id').first
432
+ author = Author.all.merge!(where: ["name = ?", "David"], includes: :comments, order: "comments.id").first
422
433
  SpecialComment.new; VerySpecialComment.new
423
434
  assert_no_queries do
424
- assert_equal [1,2,3,5,6,7,8,9,10,12], author.comments.collect(&:id)
435
+ assert_equal [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13], author.comments.collect(&:id)
425
436
  end
426
437
  end
427
438
 
428
439
  def test_eager_load_has_many_through_has_many_with_conditions
429
- post = Post.all.merge!(:includes => :invalid_tags).first
440
+ post = Post.all.merge!(includes: :invalid_tags).first
430
441
  assert_no_queries do
431
442
  post.invalid_tags
432
443
  end
@@ -434,8 +445,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
434
445
 
435
446
  def test_eager_belongs_to_and_has_one_not_singularized
436
447
  assert_nothing_raised do
437
- Author.all.merge!(:includes => :author_address).first
438
- AuthorAddress.all.merge!(:includes => :author).first
448
+ Author.all.merge!(includes: :author_address).first
449
+ AuthorAddress.all.merge!(includes: :author).first
439
450
  end
440
451
  end
441
452
 
@@ -445,15 +456,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
445
456
  end
446
457
 
447
458
  def test_add_to_self_referential_has_many_through
448
- new_author = Author.create(:name => "Bob")
449
- authors(:david).author_favorites.create :favorite_author => new_author
459
+ new_author = Author.create(name: "Bob")
460
+ authors(:david).author_favorites.create favorite_author: new_author
450
461
  assert_equal new_author, authors(:david).reload.favorite_authors.first
451
462
  end
452
463
 
453
464
  def test_has_many_through_uses_conditions_specified_on_the_has_many_association
454
465
  author = Author.first
455
- assert author.comments.present?
456
- assert author.nonexistent_comments.blank?
466
+ assert_predicate author.comments, :present?
467
+ assert_predicate author.nonexistent_comments, :blank?
457
468
  end
458
469
 
459
470
  def test_has_many_through_uses_correct_attributes
@@ -462,58 +473,57 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
462
473
 
463
474
  def test_associating_unsaved_records_with_has_many_through
464
475
  saved_post = posts(:thinking)
465
- new_tag = Tag.new(:name => "new")
476
+ new_tag = Tag.new(name: "new")
466
477
 
467
478
  saved_post.tags << new_tag
468
- assert new_tag.persisted? #consistent with habtm!
469
- assert saved_post.persisted?
470
- assert saved_post.tags.include?(new_tag)
471
-
472
- assert new_tag.persisted?
473
- assert saved_post.reload.tags.reload.include?(new_tag)
479
+ assert new_tag.persisted? # consistent with habtm!
480
+ assert_predicate saved_post, :persisted?
481
+ assert_includes saved_post.tags, new_tag
474
482
 
483
+ assert_predicate new_tag, :persisted?
484
+ assert_includes saved_post.reload.tags.reload, new_tag
475
485
 
476
- new_post = Post.new(:title => "Association replacement works!", :body => "You best believe it.")
486
+ new_post = Post.new(title: "Association replacement works!", body: "You best believe it.")
477
487
  saved_tag = tags(:general)
478
488
 
479
489
  new_post.tags << saved_tag
480
- assert !new_post.persisted?
481
- assert saved_tag.persisted?
482
- assert new_post.tags.include?(saved_tag)
490
+ assert_not_predicate new_post, :persisted?
491
+ assert_predicate saved_tag, :persisted?
492
+ assert_includes new_post.tags, saved_tag
483
493
 
484
494
  new_post.save!
485
- assert new_post.persisted?
486
- assert new_post.reload.tags.reload.include?(saved_tag)
495
+ assert_predicate new_post, :persisted?
496
+ assert_includes new_post.reload.tags.reload, saved_tag
487
497
 
488
- assert !posts(:thinking).tags.build.persisted?
489
- assert !posts(:thinking).tags.new.persisted?
498
+ assert_not_predicate posts(:thinking).tags.build, :persisted?
499
+ assert_not_predicate posts(:thinking).tags.new, :persisted?
490
500
  end
491
501
 
492
502
  def test_create_associate_when_adding_to_has_many_through
493
503
  count = posts(:thinking).tags.count
494
- push = Tag.create!(:name => 'pushme')
504
+ push = Tag.create!(name: "pushme")
495
505
  post_thinking = posts(:thinking)
496
506
  assert_nothing_raised { post_thinking.tags << push }
497
- assert_nil( wrong = post_thinking.tags.detect { |t| t.class != Tag },
498
- message = "Expected a Tag in tags collection, got #{wrong.class}.")
499
- assert_nil( wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
500
- message = "Expected a Tagging in taggings collection, got #{wrong.class}.")
507
+ assert_nil(wrong = post_thinking.tags.detect { |t| t.class != Tag },
508
+ "Expected a Tag in tags collection, got #{wrong.class}.")
509
+ assert_nil(wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
510
+ "Expected a Tagging in taggings collection, got #{wrong.class}.")
501
511
  assert_equal(count + 1, post_thinking.reload.tags.size)
502
512
  assert_equal(count + 1, post_thinking.tags.reload.size)
503
513
 
504
- assert_kind_of Tag, post_thinking.tags.create!(:name => 'foo')
505
- assert_nil( wrong = post_thinking.tags.detect { |t| t.class != Tag },
506
- message = "Expected a Tag in tags collection, got #{wrong.class}.")
507
- assert_nil( wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
508
- message = "Expected a Tagging in taggings collection, got #{wrong.class}.")
514
+ assert_kind_of Tag, post_thinking.tags.create!(name: "foo")
515
+ assert_nil(wrong = post_thinking.tags.detect { |t| t.class != Tag },
516
+ "Expected a Tag in tags collection, got #{wrong.class}.")
517
+ assert_nil(wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
518
+ "Expected a Tagging in taggings collection, got #{wrong.class}.")
509
519
  assert_equal(count + 2, post_thinking.reload.tags.size)
510
520
  assert_equal(count + 2, post_thinking.tags.reload.size)
511
521
 
512
- assert_nothing_raised { post_thinking.tags.concat(Tag.create!(:name => 'abc'), Tag.create!(:name => 'def')) }
513
- assert_nil( wrong = post_thinking.tags.detect { |t| t.class != Tag },
514
- message = "Expected a Tag in tags collection, got #{wrong.class}.")
515
- assert_nil( wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
516
- message = "Expected a Tagging in taggings collection, got #{wrong.class}.")
522
+ assert_nothing_raised { post_thinking.tags.concat(Tag.create!(name: "abc"), Tag.create!(name: "def")) }
523
+ assert_nil(wrong = post_thinking.tags.detect { |t| t.class != Tag },
524
+ "Expected a Tag in tags collection, got #{wrong.class}.")
525
+ assert_nil(wrong = post_thinking.taggings.detect { |t| t.class != Tagging },
526
+ "Expected a Tagging in taggings collection, got #{wrong.class}.")
517
527
  assert_equal(count + 4, post_thinking.reload.tags.size)
518
528
  assert_equal(count + 4, post_thinking.tags.reload.size)
519
529
 
@@ -527,15 +537,15 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
527
537
 
528
538
  def test_has_many_through_collection_size_doesnt_load_target_if_not_loaded
529
539
  author = authors(:david)
530
- assert_equal 10, author.comments.size
531
- assert !author.comments.loaded?
540
+ assert_equal 11, author.comments.size
541
+ assert_not_predicate author.comments, :loaded?
532
542
  end
533
543
 
534
544
  def test_has_many_through_collection_size_uses_counter_cache_if_it_exists
535
545
  c = categories(:general)
536
546
  c.categorizations_count = 100
537
547
  assert_equal 100, c.categorizations.size
538
- assert !c.categorizations.loaded?
548
+ assert_not_predicate c.categorizations, :loaded?
539
549
  end
540
550
 
541
551
  def test_adding_junk_to_has_many_through_should_raise_type_mismatch
@@ -550,7 +560,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
550
560
  def test_delete_associate_when_deleting_from_has_many_through_with_nonstandard_id
551
561
  count = books(:awdr).references.count
552
562
  references_before = books(:awdr).references
553
- book = Book.create!(:name => 'Getting Real')
563
+ book = Book.create!(name: "Getting Real")
554
564
  book_awdr = books(:awdr)
555
565
  book_awdr.references << book
556
566
  assert_equal(count + 1, book_awdr.references.reload.size)
@@ -564,7 +574,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
564
574
  def test_delete_associate_when_deleting_from_has_many_through
565
575
  count = posts(:thinking).tags.count
566
576
  tags_before = posts(:thinking).tags.sort
567
- tag = Tag.create!(:name => 'doomed')
577
+ tag = Tag.create!(name: "doomed")
568
578
  post_thinking = posts(:thinking)
569
579
  post_thinking.tags << tag
570
580
  assert_equal(count + 1, post_thinking.taggings.reload.size)
@@ -581,9 +591,9 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
581
591
  def test_delete_associate_when_deleting_from_has_many_through_with_multiple_tags
582
592
  count = posts(:thinking).tags.count
583
593
  tags_before = posts(:thinking).tags.sort
584
- doomed = Tag.create!(:name => 'doomed')
585
- doomed2 = Tag.create!(:name => 'doomed2')
586
- quaked = Tag.create!(:name => 'quaked')
594
+ doomed = Tag.create!(name: "doomed")
595
+ doomed2 = Tag.create!(name: "doomed2")
596
+ quaked = Tag.create!(name: "quaked")
587
597
  post_thinking = posts(:thinking)
588
598
  post_thinking.tags << doomed << doomed2
589
599
  assert_equal(count + 2, post_thinking.reload.tags.reload.size)
@@ -601,7 +611,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
601
611
  def test_deleting_by_integer_id_from_has_many_through
602
612
  post = posts(:thinking)
603
613
 
604
- assert_difference 'post.tags.count', -1 do
614
+ assert_difference "post.tags.count", -1 do
605
615
  assert_equal 1, post.tags.delete(1).size
606
616
  end
607
617
 
@@ -611,8 +621,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
611
621
  def test_deleting_by_string_id_from_has_many_through
612
622
  post = posts(:thinking)
613
623
 
614
- assert_difference 'post.tags.count', -1 do
615
- assert_equal 1, post.tags.delete('1').size
624
+ assert_difference "post.tags.count", -1 do
625
+ assert_equal 1, post.tags.delete("1").size
616
626
  end
617
627
 
618
628
  assert_equal 0, post.tags.size
@@ -642,26 +652,26 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
642
652
 
643
653
  def test_polymorphic_has_many
644
654
  expected = taggings(:welcome_general)
645
- p = Post.all.merge!(:includes => :taggings).find(posts(:welcome).id)
646
- assert_no_queries {assert p.taggings.include?(expected)}
647
- assert posts(:welcome).taggings.include?(taggings(:welcome_general))
655
+ p = Post.all.merge!(includes: :taggings).find(posts(:welcome).id)
656
+ assert_no_queries { assert_includes p.taggings, expected }
657
+ assert_includes posts(:welcome).taggings, taggings(:welcome_general)
648
658
  end
649
659
 
650
660
  def test_polymorphic_has_one
651
661
  expected = posts(:welcome)
652
662
 
653
- tagging = Tagging.all.merge!(:includes => :taggable).find(taggings(:welcome_general).id)
654
- assert_no_queries { assert_equal expected, tagging.taggable}
663
+ tagging = Tagging.all.merge!(includes: :taggable).find(taggings(:welcome_general).id)
664
+ assert_no_queries { assert_equal expected, tagging.taggable }
655
665
  end
656
666
 
657
667
  def test_polymorphic_belongs_to
658
- p = Post.all.merge!(:includes => {:taggings => :taggable}).find(posts(:welcome).id)
659
- assert_no_queries {assert_equal posts(:welcome), p.taggings.first.taggable}
668
+ p = Post.all.merge!(includes: { taggings: :taggable }).find(posts(:welcome).id)
669
+ assert_no_queries { assert_equal posts(:welcome), p.taggings.first.taggable }
660
670
  end
661
671
 
662
672
  def test_preload_polymorphic_has_many_through
663
- posts = Post.all.merge!(:order => 'posts.id').to_a
664
- posts_with_tags = Post.all.merge!(:includes => :tags, :order => 'posts.id').to_a
673
+ posts = Post.all.merge!(order: "posts.id").to_a
674
+ posts_with_tags = Post.all.merge!(includes: :tags, order: "posts.id").to_a
665
675
  assert_equal posts.length, posts_with_tags.length
666
676
  posts.length.times do |i|
667
677
  assert_equal posts[i].tags.length, assert_no_queries { posts_with_tags[i].tags.length }
@@ -669,26 +679,26 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
669
679
  end
670
680
 
671
681
  def test_preload_polymorph_many_types
672
- taggings = Tagging.all.merge!(:includes => :taggable, :where => ['taggable_type != ?', 'FakeModel']).to_a
682
+ taggings = Tagging.all.merge!(includes: :taggable, where: ["taggable_type != ?", "FakeModel"]).to_a
673
683
  assert_no_queries do
674
684
  taggings.first.taggable.id
675
685
  taggings[1].taggable.id
676
686
  end
677
687
 
678
688
  taggables = taggings.map(&:taggable)
679
- assert taggables.include?(items(:dvd))
680
- assert taggables.include?(posts(:welcome))
689
+ assert_includes taggables, items(:dvd)
690
+ assert_includes taggables, posts(:welcome)
681
691
  end
682
692
 
683
693
  def test_preload_nil_polymorphic_belongs_to
684
694
  assert_nothing_raised do
685
- Tagging.all.merge!(:includes => :taggable, :where => ['taggable_type IS NULL']).to_a
695
+ Tagging.all.merge!(includes: :taggable, where: ["taggable_type IS NULL"]).to_a
686
696
  end
687
697
  end
688
698
 
689
699
  def test_preload_polymorphic_has_many
690
- posts = Post.all.merge!(:order => 'posts.id').to_a
691
- posts_with_taggings = Post.all.merge!(:includes => :taggings, :order => 'posts.id').to_a
700
+ posts = Post.all.merge!(order: "posts.id").to_a
701
+ posts_with_taggings = Post.all.merge!(includes: :taggings, order: "posts.id").to_a
692
702
  assert_equal posts.length, posts_with_taggings.length
693
703
  posts.length.times do |i|
694
704
  assert_equal posts[i].taggings.length, assert_no_queries { posts_with_taggings[i].taggings.length }
@@ -696,7 +706,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
696
706
  end
697
707
 
698
708
  def test_belongs_to_shared_parent
699
- comments = Comment.all.merge!(:includes => :post, :where => 'post_id = 1').to_a
709
+ comments = Comment.all.merge!(includes: :post, where: "post_id = 1").to_a
700
710
  assert_no_queries do
701
711
  assert_equal comments.first.post, comments[1].post
702
712
  end
@@ -709,8 +719,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
709
719
  category = david.categories.first
710
720
 
711
721
  assert_no_queries do
712
- assert david.categories.loaded?
713
- assert david.categories.include?(category)
722
+ assert_predicate david.categories, :loaded?
723
+ assert_includes david.categories, category
714
724
  end
715
725
  end
716
726
 
@@ -719,47 +729,47 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
719
729
  category = david.categories.first
720
730
 
721
731
  david.reload
722
- assert ! david.categories.loaded?
732
+ assert_not_predicate david.categories, :loaded?
723
733
  assert_queries(1) do
724
- assert david.categories.include?(category)
734
+ assert_includes david.categories, category
725
735
  end
726
- assert ! david.categories.loaded?
736
+ assert_not_predicate david.categories, :loaded?
727
737
  end
728
738
 
729
739
  def test_has_many_through_include_returns_false_for_non_matching_record_to_verify_scoping
730
740
  david = authors(:david)
731
- category = Category.create!(:name => 'Not Associated')
741
+ category = Category.create!(name: "Not Associated")
732
742
 
733
- assert ! david.categories.loaded?
734
- assert ! david.categories.include?(category)
743
+ assert_not_predicate david.categories, :loaded?
744
+ assert_not david.categories.include?(category)
735
745
  end
736
746
 
737
747
  def test_has_many_through_goes_through_all_sti_classes
738
- sub_sti_post = SubStiPost.create!(:title => 'test', :body => 'test', :author_id => 1)
739
- new_comment = sub_sti_post.comments.create(:body => 'test')
748
+ sub_sti_post = SubStiPost.create!(title: "test", body: "test", author_id: 1)
749
+ new_comment = sub_sti_post.comments.create(body: "test")
740
750
 
741
- assert_equal [9, 10, new_comment.id], authors(:david).sti_post_comments.map(&:id).sort
751
+ assert_equal [9, 10, 13, new_comment.id], authors(:david).sti_post_comments.map(&:id).sort
742
752
  end
743
753
 
744
754
  def test_has_many_with_pluralize_table_names_false
745
- aircraft = Aircraft.create!(:name => "Airbus 380")
746
- engine = Engine.create!(:car_id => aircraft.id)
755
+ aircraft = Aircraft.create!(name: "Airbus 380")
756
+ engine = Engine.create!(car_id: aircraft.id)
747
757
  assert_equal aircraft.engines, [engine]
748
758
  end
749
759
 
750
760
  def test_proper_error_message_for_eager_load_and_includes_association_errors
751
761
  includes_error = assert_raises(ActiveRecord::ConfigurationError) {
752
- Post.includes(:nonexistent_relation).where(nonexistent_relation: {name: 'Rochester'}).find(1)
762
+ Post.includes(:nonexistent_relation).where(nonexistent_relation: { name: "Rochester" }).find(1)
753
763
  }
754
764
  assert_equal("Can't join 'Post' to association named 'nonexistent_relation'; perhaps you misspelled it?", includes_error.message)
755
765
 
756
766
  eager_load_error = assert_raises(ActiveRecord::ConfigurationError) {
757
- Post.eager_load(:nonexistent_relation).where(nonexistent_relation: {name: 'Rochester'}).find(1)
767
+ Post.eager_load(:nonexistent_relation).where(nonexistent_relation: { name: "Rochester" }).find(1)
758
768
  }
759
769
  assert_equal("Can't join 'Post' to association named 'nonexistent_relation'; perhaps you misspelled it?", eager_load_error.message)
760
770
 
761
771
  includes_and_eager_load_error = assert_raises(ActiveRecord::ConfigurationError) {
762
- Post.eager_load(:nonexistent_relation).includes(:nonexistent_relation).where(nonexistent_relation: {name: 'Rochester'}).find(1)
772
+ Post.eager_load(:nonexistent_relation).includes(:nonexistent_relation).where(nonexistent_relation: { name: "Rochester" }).find(1)
763
773
  }
764
774
  assert_equal("Can't join 'Post' to association named 'nonexistent_relation'; perhaps you misspelled it?", includes_and_eager_load_error.message)
765
775
  end
@@ -770,8 +780,8 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
770
780
  class_name = "PostWith#{association.to_s.classify}#{dependency.to_s.classify}"
771
781
  Post.find(post_id).update_columns type: class_name
772
782
  klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
773
- klass.table_name = 'posts'
774
- klass.send(association, association_name, :as => :taggable, :dependent => dependency)
783
+ klass.table_name = "posts"
784
+ klass.public_send(association, association_name, as: :taggable, dependent: dependency)
775
785
  klass.find(post_id)
776
786
  end
777
787
  end