ibm_db 5.1.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 (624) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +14 -14
  5. data/ext/extconf.rb +4 -4
  6. data/ext/ibm_db.c +62 -57
  7. data/ext/ibm_db.o +0 -0
  8. data/ext/ibm_db.so +0 -0
  9. data/ext/mkmf.log +11 -11
  10. data/ext/ruby_ibm_db_cli.c +1 -0
  11. data/ext/ruby_ibm_db_cli.o +0 -0
  12. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  13. data/lib/ibm_db.so +1 -0
  14. data/lib/mswin32/ibm_db.rb +7 -3
  15. data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -0
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  18. data/test/activejob/destroy_association_async_test.rb +305 -0
  19. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  20. data/test/activejob/helper.rb +15 -0
  21. data/test/assets/schema_dump_5_1.yml +345 -0
  22. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  23. data/test/cases/adapter_test.rb +432 -218
  24. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  25. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  27. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  30. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  31. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  32. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  33. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  34. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  35. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  36. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  37. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  38. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  39. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  40. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  41. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  42. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  43. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  44. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  45. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  46. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  47. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  48. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  50. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  52. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  55. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  56. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  57. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  58. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  59. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  60. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  61. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  62. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  63. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  64. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  65. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  66. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  67. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  68. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  69. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  70. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  71. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  72. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  73. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  74. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  75. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  76. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  77. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  78. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  79. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  80. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  81. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  83. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  84. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  85. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  86. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  87. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  88. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  89. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  90. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  91. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  92. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  93. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  94. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  95. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  96. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  97. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  98. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  99. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  100. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  101. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  102. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  103. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  104. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  106. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  107. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  108. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  109. data/test/cases/aggregations_test.rb +14 -12
  110. data/test/cases/annotate_test.rb +46 -0
  111. data/test/cases/ar_schema_test.rb +153 -86
  112. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  113. data/test/cases/arel/attributes/math_test.rb +83 -0
  114. data/test/cases/arel/attributes_test.rb +27 -0
  115. data/test/cases/arel/collectors/bind_test.rb +40 -0
  116. data/test/cases/arel/collectors/composite_test.rb +47 -0
  117. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  118. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  119. data/test/cases/arel/crud_test.rb +65 -0
  120. data/test/cases/arel/delete_manager_test.rb +53 -0
  121. data/test/cases/arel/factory_methods_test.rb +46 -0
  122. data/test/cases/arel/helper.rb +45 -0
  123. data/test/cases/arel/insert_manager_test.rb +241 -0
  124. data/test/cases/arel/nodes/and_test.rb +30 -0
  125. data/test/cases/arel/nodes/as_test.rb +36 -0
  126. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  127. data/test/cases/arel/nodes/bin_test.rb +35 -0
  128. data/test/cases/arel/nodes/binary_test.rb +29 -0
  129. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  130. data/test/cases/arel/nodes/case_test.rb +96 -0
  131. data/test/cases/arel/nodes/casted_test.rb +18 -0
  132. data/test/cases/arel/nodes/comment_test.rb +22 -0
  133. data/test/cases/arel/nodes/count_test.rb +35 -0
  134. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  135. data/test/cases/arel/nodes/descending_test.rb +46 -0
  136. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  137. data/test/cases/arel/nodes/equality_test.rb +62 -0
  138. data/test/cases/arel/nodes/extract_test.rb +43 -0
  139. data/test/cases/arel/nodes/false_test.rb +21 -0
  140. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  141. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  142. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  143. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  144. data/test/cases/arel/nodes/node_test.rb +22 -0
  145. data/test/cases/arel/nodes/not_test.rb +31 -0
  146. data/test/cases/arel/nodes/or_test.rb +36 -0
  147. data/test/cases/arel/nodes/over_test.rb +69 -0
  148. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  149. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  150. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  151. data/test/cases/arel/nodes/sum_test.rb +35 -0
  152. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  153. data/test/cases/arel/nodes/true_test.rb +21 -0
  154. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  155. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  156. data/test/cases/arel/nodes/window_test.rb +81 -0
  157. data/test/cases/arel/nodes_test.rb +34 -0
  158. data/test/cases/arel/select_manager_test.rb +1238 -0
  159. data/test/cases/arel/support/fake_record.rb +135 -0
  160. data/test/cases/arel/table_test.rb +216 -0
  161. data/test/cases/arel/update_manager_test.rb +126 -0
  162. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  163. data/test/cases/arel/visitors/dot_test.rb +90 -0
  164. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  165. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  166. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  167. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  168. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  169. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  170. data/test/cases/associations/callbacks_test.rb +56 -38
  171. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  172. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  173. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  174. data/test/cases/associations/eager_singularization_test.rb +21 -21
  175. data/test/cases/associations/eager_test.rb +559 -415
  176. data/test/cases/associations/extension_test.rb +18 -12
  177. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  178. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  179. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  180. data/test/cases/associations/has_one_associations_test.rb +294 -129
  181. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  182. data/test/cases/associations/inner_join_association_test.rb +114 -38
  183. data/test/cases/associations/inverse_associations_test.rb +606 -398
  184. data/test/cases/associations/join_model_test.rb +158 -148
  185. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  186. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  187. data/test/cases/associations/required_test.rb +35 -10
  188. data/test/cases/associations_test.rb +241 -110
  189. data/test/cases/attribute_methods/read_test.rb +11 -11
  190. data/test/cases/attribute_methods_test.rb +413 -298
  191. data/test/cases/attributes_test.rb +145 -27
  192. data/test/cases/autosave_association_test.rb +681 -436
  193. data/test/cases/base_prevent_writes_test.rb +229 -0
  194. data/test/cases/base_test.rb +599 -542
  195. data/test/cases/batches_test.rb +288 -82
  196. data/test/cases/binary_test.rb +26 -31
  197. data/test/cases/bind_parameter_test.rb +194 -21
  198. data/test/cases/boolean_test.rb +52 -0
  199. data/test/cases/cache_key_test.rb +110 -5
  200. data/test/cases/calculations_test.rb +740 -177
  201. data/test/cases/callbacks_test.rb +74 -207
  202. data/test/cases/clone_test.rb +15 -10
  203. data/test/cases/coders/json_test.rb +2 -0
  204. data/test/cases/coders/yaml_column_test.rb +16 -13
  205. data/test/cases/collection_cache_key_test.rb +177 -20
  206. data/test/cases/column_alias_test.rb +9 -7
  207. data/test/cases/column_definition_test.rb +10 -68
  208. data/test/cases/comment_test.rb +166 -107
  209. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  210. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  211. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  212. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  213. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  214. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  215. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  217. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  218. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  219. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  220. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  221. data/test/cases/connection_management_test.rb +13 -11
  222. data/test/cases/connection_pool_test.rb +316 -83
  223. data/test/cases/core_test.rb +82 -58
  224. data/test/cases/counter_cache_test.rb +204 -50
  225. data/test/cases/custom_locking_test.rb +5 -3
  226. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  227. data/test/cases/database_configurations/resolver_test.rb +150 -0
  228. data/test/cases/database_configurations_test.rb +145 -0
  229. data/test/cases/database_selector_test.rb +296 -0
  230. data/test/cases/database_statements_test.rb +18 -16
  231. data/test/cases/date_test.rb +8 -16
  232. data/test/cases/date_time_precision_test.rb +100 -78
  233. data/test/cases/date_time_test.rb +23 -8
  234. data/test/cases/defaults_test.rb +106 -71
  235. data/test/cases/delegated_type_test.rb +57 -0
  236. data/test/cases/dirty_test.rb +419 -223
  237. data/test/cases/disconnected_test.rb +6 -6
  238. data/test/cases/dup_test.rb +54 -27
  239. data/test/cases/enum_test.rb +461 -82
  240. data/test/cases/errors_test.rb +7 -7
  241. data/test/cases/explain_subscriber_test.rb +17 -15
  242. data/test/cases/explain_test.rb +11 -19
  243. data/test/cases/filter_attributes_test.rb +153 -0
  244. data/test/cases/finder_respond_to_test.rb +14 -14
  245. data/test/cases/finder_test.rb +669 -287
  246. data/test/cases/fixture_set/file_test.rb +34 -38
  247. data/test/cases/fixtures_test.rb +833 -176
  248. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  249. data/test/cases/habtm_destroy_order_test.rb +25 -25
  250. data/test/cases/helper.rb +78 -49
  251. data/test/cases/hot_compatibility_test.rb +33 -32
  252. data/test/cases/i18n_test.rb +18 -17
  253. data/test/cases/inheritance_test.rb +180 -115
  254. data/test/cases/insert_all_test.rb +489 -0
  255. data/test/cases/instrumentation_test.rb +101 -0
  256. data/test/cases/integration_test.rb +119 -31
  257. data/test/cases/invalid_connection_test.rb +18 -16
  258. data/test/cases/invertible_migration_test.rb +183 -43
  259. data/test/cases/json_attribute_test.rb +35 -0
  260. data/test/cases/json_serialization_test.rb +57 -58
  261. data/test/cases/json_shared_test_cases.rb +290 -0
  262. data/test/cases/locking_test.rb +413 -119
  263. data/test/cases/log_subscriber_test.rb +68 -26
  264. data/test/cases/marshal_serialization_test.rb +39 -0
  265. data/test/cases/migration/change_schema_test.rb +118 -72
  266. data/test/cases/migration/change_table_test.rb +138 -30
  267. data/test/cases/migration/check_constraint_test.rb +162 -0
  268. data/test/cases/migration/column_attributes_test.rb +45 -35
  269. data/test/cases/migration/column_positioning_test.rb +18 -6
  270. data/test/cases/migration/columns_test.rb +93 -77
  271. data/test/cases/migration/command_recorder_test.rb +121 -34
  272. data/test/cases/migration/compatibility_test.rb +578 -23
  273. data/test/cases/migration/create_join_table_test.rb +35 -25
  274. data/test/cases/migration/foreign_key_test.rb +503 -284
  275. data/test/cases/migration/helper.rb +4 -3
  276. data/test/cases/migration/index_test.rb +119 -70
  277. data/test/cases/migration/logger_test.rb +9 -6
  278. data/test/cases/migration/pending_migrations_test.rb +88 -34
  279. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  280. data/test/cases/migration/references_index_test.rb +38 -19
  281. data/test/cases/migration/references_statements_test.rb +15 -14
  282. data/test/cases/migration/rename_table_test.rb +53 -30
  283. data/test/cases/migration_test.rb +637 -269
  284. data/test/cases/migrator_test.rb +191 -135
  285. data/test/cases/mixin_test.rb +7 -11
  286. data/test/cases/modules_test.rb +36 -34
  287. data/test/cases/multi_db_migrator_test.rb +223 -0
  288. data/test/cases/multiparameter_attributes_test.rb +60 -33
  289. data/test/cases/multiple_db_test.rb +16 -22
  290. data/test/cases/nested_attributes_test.rb +341 -320
  291. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  292. data/test/cases/null_relation_test.rb +84 -0
  293. data/test/cases/numeric_data_test.rb +93 -0
  294. data/test/cases/persistence_test.rb +361 -269
  295. data/test/cases/pooled_connections_test.rb +18 -26
  296. data/test/cases/prepared_statement_status_test.rb +48 -0
  297. data/test/cases/primary_keys_test.rb +210 -104
  298. data/test/cases/query_cache_test.rb +610 -141
  299. data/test/cases/quoting_test.rb +132 -31
  300. data/test/cases/readonly_test.rb +49 -48
  301. data/test/cases/reaper_test.rb +146 -32
  302. data/test/cases/reflection_test.rb +167 -156
  303. data/test/cases/relation/delegation_test.rb +49 -36
  304. data/test/cases/relation/delete_all_test.rb +117 -0
  305. data/test/cases/relation/merging_test.rb +319 -42
  306. data/test/cases/relation/mutation_test.rb +55 -93
  307. data/test/cases/relation/or_test.rb +129 -29
  308. data/test/cases/relation/predicate_builder_test.rb +21 -6
  309. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  310. data/test/cases/relation/select_test.rb +67 -0
  311. data/test/cases/relation/update_all_test.rb +317 -0
  312. data/test/cases/relation/where_chain_test.rb +68 -32
  313. data/test/cases/relation/where_clause_test.rb +136 -61
  314. data/test/cases/relation/where_test.rb +155 -48
  315. data/test/cases/relation_test.rb +266 -112
  316. data/test/cases/relations_test.rb +969 -744
  317. data/test/cases/reload_models_test.rb +13 -9
  318. data/test/cases/reserved_word_test.rb +141 -0
  319. data/test/cases/result_test.rb +68 -17
  320. data/test/cases/sanitize_test.rb +87 -71
  321. data/test/cases/schema_dumper_test.rb +221 -128
  322. data/test/cases/schema_loading_test.rb +3 -2
  323. data/test/cases/scoping/default_scoping_test.rb +185 -144
  324. data/test/cases/scoping/named_scoping_test.rb +177 -89
  325. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  326. data/test/cases/secure_token_test.rb +18 -3
  327. data/test/cases/serialization_test.rb +30 -28
  328. data/test/cases/serialized_attribute_test.rb +133 -42
  329. data/test/cases/signed_id_test.rb +168 -0
  330. data/test/cases/statement_cache_test.rb +41 -24
  331. data/test/cases/statement_invalid_test.rb +42 -0
  332. data/test/cases/store_test.rb +180 -55
  333. data/test/cases/strict_loading_test.rb +473 -0
  334. data/test/cases/suppressor_test.rb +26 -12
  335. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  336. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  337. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  338. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  339. data/test/cases/test_case.rb +51 -40
  340. data/test/cases/test_databases_test.rb +79 -0
  341. data/test/cases/test_fixtures_test.rb +79 -19
  342. data/test/cases/time_precision_test.rb +98 -76
  343. data/test/cases/timestamp_test.rb +102 -99
  344. data/test/cases/touch_later_test.rb +12 -10
  345. data/test/cases/transaction_callbacks_test.rb +344 -90
  346. data/test/cases/transaction_isolation_test.rb +12 -12
  347. data/test/cases/transactions_test.rb +612 -162
  348. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  349. data/test/cases/type/date_time_test.rb +4 -2
  350. data/test/cases/type/integer_test.rb +4 -2
  351. data/test/cases/type/string_test.rb +10 -8
  352. data/test/cases/type/time_test.rb +28 -0
  353. data/test/cases/type/type_map_test.rb +29 -28
  354. data/test/cases/type/unsigned_integer_test.rb +19 -0
  355. data/test/cases/type_test.rb +2 -0
  356. data/test/cases/types_test.rb +3 -1
  357. data/test/cases/unconnected_test.rb +14 -1
  358. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  359. data/test/cases/validations/absence_validation_test.rb +19 -17
  360. data/test/cases/validations/association_validation_test.rb +30 -28
  361. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  362. data/test/cases/validations/i18n_validation_test.rb +22 -21
  363. data/test/cases/validations/length_validation_test.rb +34 -33
  364. data/test/cases/validations/numericality_validation_test.rb +181 -0
  365. data/test/cases/validations/presence_validation_test.rb +21 -19
  366. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  367. data/test/cases/validations_repair_helper.rb +2 -0
  368. data/test/cases/validations_test.rb +61 -26
  369. data/test/cases/view_test.rb +122 -116
  370. data/test/cases/yaml_serialization_test.rb +79 -34
  371. data/test/config.example.yml +19 -19
  372. data/test/config.rb +3 -1
  373. data/test/config.yml +16 -6
  374. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  375. data/test/fixtures/author_addresses.yml +1 -8
  376. data/test/fixtures/authors.yml +1 -7
  377. data/test/fixtures/binaries.yml +4 -0
  378. data/test/fixtures/books.yml +9 -2
  379. data/test/fixtures/categories_posts.yml +3 -0
  380. data/test/fixtures/citations.yml +5 -0
  381. data/test/fixtures/comments.yml +7 -0
  382. data/test/fixtures/companies.yml +5 -0
  383. data/test/fixtures/computers.yml +2 -0
  384. data/test/fixtures/customers.yml +10 -1
  385. data/test/fixtures/developers.yml +1 -1
  386. data/test/fixtures/essays.yml +10 -0
  387. data/test/fixtures/faces.yml +3 -3
  388. data/test/fixtures/humans.yml +5 -0
  389. data/test/fixtures/interests.yml +7 -7
  390. data/test/fixtures/memberships.yml +7 -0
  391. data/test/fixtures/minimalistics.yml +3 -0
  392. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  393. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  394. data/test/fixtures/naked/yml/parrots.yml +1 -0
  395. data/test/fixtures/other_books.yml +26 -0
  396. data/test/fixtures/other_posts.yml +1 -0
  397. data/test/fixtures/parrots.yml +7 -1
  398. data/test/fixtures/pirates.yml +3 -0
  399. data/test/fixtures/posts.yml +11 -3
  400. data/test/fixtures/readers.yml +6 -0
  401. data/test/fixtures/reserved_words/values.yml +2 -2
  402. data/test/fixtures/sponsors.yml +3 -0
  403. data/test/fixtures/strict_zines.yml +2 -0
  404. data/test/fixtures/subscribers.yml +1 -1
  405. data/test/fixtures/tasks.yml +1 -1
  406. data/test/fixtures/warehouse-things.yml +3 -0
  407. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  408. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  409. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  410. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  411. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  412. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  413. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  414. data/test/migrations/rename/1_we_need_things.rb +2 -0
  415. data/test/migrations/rename/2_rename_things.rb +2 -0
  416. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  417. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  418. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  419. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  420. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  421. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  424. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  425. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  431. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  432. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  434. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  435. data/test/models/account.rb +46 -0
  436. data/test/models/admin/account.rb +3 -1
  437. data/test/models/admin/randomly_named_c1.rb +2 -0
  438. data/test/models/admin/user.rb +16 -8
  439. data/test/models/admin.rb +4 -2
  440. data/test/models/aircraft.rb +3 -1
  441. data/test/models/arunit2_model.rb +2 -0
  442. data/test/models/author.rb +153 -102
  443. data/test/models/auto_id.rb +2 -0
  444. data/test/models/autoloadable/extra_firm.rb +2 -0
  445. data/test/models/binary.rb +3 -1
  446. data/test/models/binary_field.rb +6 -0
  447. data/test/models/bird.rb +13 -1
  448. data/test/models/book.rb +14 -4
  449. data/test/models/book_destroy_async.rb +24 -0
  450. data/test/models/boolean.rb +5 -0
  451. data/test/models/bulb.rb +13 -4
  452. data/test/models/cake_designer.rb +2 -0
  453. data/test/models/car.rb +17 -10
  454. data/test/models/carrier.rb +2 -0
  455. data/test/models/cart.rb +5 -0
  456. data/test/models/cat.rb +2 -0
  457. data/test/models/categorization.rb +8 -6
  458. data/test/models/category.rb +28 -16
  459. data/test/models/chef.rb +2 -0
  460. data/test/models/citation.rb +5 -1
  461. data/test/models/club.rb +13 -10
  462. data/test/models/college.rb +4 -2
  463. data/test/models/column.rb +2 -0
  464. data/test/models/column_name.rb +2 -0
  465. data/test/models/comment.rb +32 -10
  466. data/test/models/company.rb +102 -106
  467. data/test/models/company_in_module.rb +27 -26
  468. data/test/models/computer.rb +3 -1
  469. data/test/models/contact.rb +15 -13
  470. data/test/models/content.rb +5 -3
  471. data/test/models/contract.rb +21 -3
  472. data/test/models/country.rb +2 -4
  473. data/test/models/course.rb +3 -1
  474. data/test/models/customer.rb +10 -8
  475. data/test/models/customer_carrier.rb +2 -0
  476. data/test/models/dashboard.rb +2 -0
  477. data/test/models/default.rb +2 -0
  478. data/test/models/department.rb +2 -0
  479. data/test/models/destroy_async_parent.rb +15 -0
  480. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  481. data/test/models/developer.rb +152 -85
  482. data/test/models/dl_keyed_belongs_to.rb +13 -0
  483. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  484. data/test/models/dl_keyed_has_many.rb +5 -0
  485. data/test/models/dl_keyed_has_many_through.rb +5 -0
  486. data/test/models/dl_keyed_has_one.rb +5 -0
  487. data/test/models/dl_keyed_join.rb +10 -0
  488. data/test/models/dog.rb +2 -0
  489. data/test/models/dog_lover.rb +2 -0
  490. data/test/models/doubloon.rb +3 -1
  491. data/test/models/drink_designer.rb +17 -0
  492. data/test/models/edge.rb +4 -2
  493. data/test/models/electron.rb +2 -0
  494. data/test/models/engine.rb +3 -2
  495. data/test/models/entrant.rb +2 -0
  496. data/test/models/entry.rb +5 -0
  497. data/test/models/essay.rb +6 -3
  498. data/test/models/essay_destroy_async.rb +12 -0
  499. data/test/models/event.rb +3 -1
  500. data/test/models/eye.rb +5 -3
  501. data/test/models/face.rb +14 -6
  502. data/test/models/family.rb +6 -0
  503. data/test/models/family_tree.rb +6 -0
  504. data/test/models/friendship.rb +5 -3
  505. data/test/models/frog.rb +8 -0
  506. data/test/models/guid.rb +3 -1
  507. data/test/models/guitar.rb +2 -0
  508. data/test/models/hotel.rb +5 -3
  509. data/test/models/human.rb +39 -0
  510. data/test/models/image.rb +3 -1
  511. data/test/models/interest.rb +14 -3
  512. data/test/models/invoice.rb +4 -2
  513. data/test/models/item.rb +3 -1
  514. data/test/models/job.rb +5 -3
  515. data/test/models/joke.rb +4 -2
  516. data/test/models/keyboard.rb +3 -1
  517. data/test/models/legacy_thing.rb +2 -0
  518. data/test/models/lesson.rb +2 -0
  519. data/test/models/line_item.rb +3 -1
  520. data/test/models/liquid.rb +2 -0
  521. data/test/models/matey.rb +3 -1
  522. data/test/models/measurement.rb +4 -0
  523. data/test/models/member.rb +23 -20
  524. data/test/models/member_detail.rb +3 -0
  525. data/test/models/member_type.rb +2 -0
  526. data/test/models/membership.rb +4 -1
  527. data/test/models/mentor.rb +3 -1
  528. data/test/models/message.rb +5 -0
  529. data/test/models/minimalistic.rb +2 -0
  530. data/test/models/minivan.rb +3 -2
  531. data/test/models/mixed_case_monkey.rb +3 -1
  532. data/test/models/molecule.rb +2 -0
  533. data/test/models/mouse.rb +6 -0
  534. data/test/models/movie.rb +2 -0
  535. data/test/models/node.rb +4 -2
  536. data/test/models/non_primary_key.rb +2 -0
  537. data/test/models/notification.rb +2 -0
  538. data/test/models/numeric_data.rb +12 -0
  539. data/test/models/order.rb +4 -2
  540. data/test/models/organization.rb +9 -7
  541. data/test/models/other_dog.rb +3 -1
  542. data/test/models/owner.rb +6 -4
  543. data/test/models/parrot.rb +12 -4
  544. data/test/models/person.rb +59 -54
  545. data/test/models/personal_legacy_thing.rb +3 -1
  546. data/test/models/pet.rb +4 -2
  547. data/test/models/pet_treasure.rb +2 -0
  548. data/test/models/pirate.rb +67 -43
  549. data/test/models/possession.rb +3 -1
  550. data/test/models/post.rb +184 -86
  551. data/test/models/price_estimate.rb +11 -1
  552. data/test/models/professor.rb +3 -1
  553. data/test/models/project.rb +14 -12
  554. data/test/models/publisher/article.rb +2 -0
  555. data/test/models/publisher/magazine.rb +2 -0
  556. data/test/models/publisher.rb +2 -0
  557. data/test/models/randomly_named_c1.rb +2 -0
  558. data/test/models/rating.rb +5 -1
  559. data/test/models/reader.rb +7 -5
  560. data/test/models/recipe.rb +2 -0
  561. data/test/models/record.rb +2 -0
  562. data/test/models/reference.rb +6 -3
  563. data/test/models/reply.rb +39 -21
  564. data/test/models/room.rb +6 -0
  565. data/test/models/section.rb +6 -0
  566. data/test/models/seminar.rb +6 -0
  567. data/test/models/session.rb +6 -0
  568. data/test/models/ship.rb +12 -9
  569. data/test/models/ship_part.rb +5 -3
  570. data/test/models/shop.rb +4 -2
  571. data/test/models/shop_account.rb +2 -0
  572. data/test/models/speedometer.rb +2 -0
  573. data/test/models/sponsor.rb +8 -5
  574. data/test/models/squeak.rb +6 -0
  575. data/test/models/strict_zine.rb +7 -0
  576. data/test/models/string_key_object.rb +2 -0
  577. data/test/models/student.rb +2 -0
  578. data/test/models/subscriber.rb +4 -2
  579. data/test/models/subscription.rb +5 -1
  580. data/test/models/tag.rb +6 -3
  581. data/test/models/tagging.rb +13 -6
  582. data/test/models/task.rb +2 -0
  583. data/test/models/topic.rb +54 -19
  584. data/test/models/toy.rb +4 -0
  585. data/test/models/traffic_light.rb +2 -0
  586. data/test/models/treasure.rb +5 -3
  587. data/test/models/treaty.rb +2 -4
  588. data/test/models/tree.rb +2 -0
  589. data/test/models/tuning_peg.rb +2 -0
  590. data/test/models/tyre.rb +2 -0
  591. data/test/models/user.rb +12 -4
  592. data/test/models/uuid_child.rb +2 -0
  593. data/test/models/uuid_item.rb +2 -0
  594. data/test/models/uuid_parent.rb +2 -0
  595. data/test/models/vegetables.rb +12 -3
  596. data/test/models/vertex.rb +6 -4
  597. data/test/models/warehouse_thing.rb +2 -0
  598. data/test/models/wheel.rb +3 -1
  599. data/test/models/without_table.rb +3 -1
  600. data/test/models/zine.rb +3 -1
  601. data/test/schema/mysql2_specific_schema.rb +49 -35
  602. data/test/schema/oracle_specific_schema.rb +13 -15
  603. data/test/schema/postgresql_specific_schema.rb +51 -40
  604. data/test/schema/schema.rb +334 -154
  605. data/test/schema/sqlite_specific_schema.rb +9 -16
  606. data/test/support/config.rb +26 -26
  607. data/test/support/connection.rb +14 -8
  608. data/test/support/connection_helper.rb +3 -1
  609. data/test/support/ddl_helper.rb +2 -0
  610. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  620. data/test/support/schema_dumping_helper.rb +2 -0
  621. data/test/support/stubs/strong_parameters.rb +40 -0
  622. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  624. metadata +196 -11
@@ -1,8 +1,9 @@
1
- require 'cases/helper'
2
- require 'models/person'
3
- require 'models/topic'
4
- require 'pp'
5
- require 'active_support/core_ext/string/strip'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/person"
5
+ require "models/topic"
6
+ require "pp"
6
7
 
7
8
  class NonExistentTable < ActiveRecord::Base; end
8
9
 
@@ -10,14 +11,25 @@ class CoreTest < ActiveRecord::TestCase
10
11
  fixtures :topics
11
12
 
12
13
  def test_inspect_class
13
- assert_equal 'ActiveRecord::Base', ActiveRecord::Base.inspect
14
- assert_equal 'LoosePerson(abstract)', LoosePerson.inspect
14
+ assert_equal "ActiveRecord::Base", ActiveRecord::Base.inspect
15
+ assert_equal "LoosePerson(abstract)", LoosePerson.inspect
15
16
  assert_match(/^Topic\(id: integer, title: string/, Topic.inspect)
16
17
  end
17
18
 
18
19
  def test_inspect_instance
19
20
  topic = topics(:first)
20
- assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "#{topic.written_on.to_s(:db)}", bonus_time: "#{topic.bonus_time.to_s(:db)}", last_read: "#{topic.last_read.to_s(:db)}", content: "Have a nice day", important: nil, approved: false, replies_count: 1, unique_replies_count: 0, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "#{topic.created_at.to_s(:db)}", updated_at: "#{topic.updated_at.to_s(:db)}">), topic.inspect
21
+ assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "#{topic.written_on.to_s(:inspect)}", bonus_time: "#{topic.bonus_time.to_s(:inspect)}", last_read: "#{topic.last_read.to_s(:inspect)}", content: "Have a nice day", important: nil, approved: false, replies_count: 1, unique_replies_count: 0, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "#{topic.created_at.to_s(:inspect)}", updated_at: "#{topic.updated_at.to_s(:inspect)}">), topic.inspect
22
+ end
23
+
24
+ def test_inspect_instance_with_lambda_date_formatter
25
+ before = Time::DATE_FORMATS[:inspect]
26
+ Time::DATE_FORMATS[:inspect] = ->(date) { "my_format" }
27
+ topic = topics(:first)
28
+
29
+ assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "my_format", bonus_time: "my_format", last_read: "2004-04-15", content: "Have a nice day", important: nil, approved: false, replies_count: 1, unique_replies_count: 0, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "my_format", updated_at: "my_format">), topic.inspect
30
+
31
+ ensure
32
+ Time::DATE_FORMATS[:inspect] = before
21
33
  end
22
34
 
23
35
  def test_inspect_new_instance
@@ -25,8 +37,13 @@ class CoreTest < ActiveRecord::TestCase
25
37
  end
26
38
 
27
39
  def test_inspect_limited_select_instance
28
- assert_equal %(#<Topic id: 1>), Topic.all.merge!(:select => 'id', :where => 'id = 1').first.inspect
29
- assert_equal %(#<Topic id: 1, title: "The First Topic">), Topic.all.merge!(:select => 'id, title', :where => 'id = 1').first.inspect
40
+ assert_equal %(#<Topic id: 1>), Topic.all.merge!(select: "id", where: "id = 1").first.inspect
41
+ assert_equal %(#<Topic id: 1, title: "The First Topic">), Topic.all.merge!(select: "id, title", where: "id = 1").first.inspect
42
+ end
43
+
44
+ def test_inspect_instance_with_non_primary_key_id_attribute
45
+ topic = topics(:first).becomes(TitlePrimaryKeyTopic)
46
+ assert_match(/id: 1/, topic.inspect)
30
47
  end
31
48
 
32
49
  def test_inspect_class_without_table
@@ -35,68 +52,68 @@ class CoreTest < ActiveRecord::TestCase
35
52
 
36
53
  def test_pretty_print_new
37
54
  topic = Topic.new
38
- actual = ''
55
+ actual = +""
39
56
  PP.pp(topic, StringIO.new(actual))
40
- expected = <<-PRETTY.strip_heredoc
41
- #<Topic:0xXXXXXX
42
- id: nil,
43
- title: nil,
44
- author_name: nil,
45
- author_email_address: "test@test.com",
46
- written_on: nil,
47
- bonus_time: nil,
48
- last_read: nil,
49
- content: nil,
50
- important: nil,
51
- approved: true,
52
- replies_count: 0,
53
- unique_replies_count: 0,
54
- parent_id: nil,
55
- parent_title: nil,
56
- type: nil,
57
- group: nil,
58
- created_at: nil,
59
- updated_at: nil>
57
+ expected = <<~PRETTY
58
+ #<Topic:0xXXXXXX
59
+ id: nil,
60
+ title: nil,
61
+ author_name: nil,
62
+ author_email_address: "test@test.com",
63
+ written_on: nil,
64
+ bonus_time: nil,
65
+ last_read: nil,
66
+ content: nil,
67
+ important: nil,
68
+ approved: true,
69
+ replies_count: 0,
70
+ unique_replies_count: 0,
71
+ parent_id: nil,
72
+ parent_title: nil,
73
+ type: nil,
74
+ group: nil,
75
+ created_at: nil,
76
+ updated_at: nil>
60
77
  PRETTY
61
- assert actual.start_with?(expected.split('XXXXXX').first)
62
- assert actual.end_with?(expected.split('XXXXXX').last)
78
+ assert actual.start_with?(expected.split("XXXXXX").first)
79
+ assert actual.end_with?(expected.split("XXXXXX").last)
63
80
  end
64
81
 
65
82
  def test_pretty_print_persisted
66
83
  topic = topics(:first)
67
- actual = ''
84
+ actual = +""
68
85
  PP.pp(topic, StringIO.new(actual))
69
- expected = <<-PRETTY.strip_heredoc
70
- #<Topic:0x\\w+
71
- id: 1,
72
- title: "The First Topic",
73
- author_name: "David",
74
- author_email_address: "david@loudthinking.com",
75
- written_on: 2003-07-16 14:28:11 UTC,
76
- bonus_time: 2000-01-01 14:28:00 UTC,
77
- last_read: Thu, 15 Apr 2004,
78
- content: "Have a nice day",
79
- important: nil,
80
- approved: false,
81
- replies_count: 1,
82
- unique_replies_count: 0,
83
- parent_id: nil,
84
- parent_title: nil,
85
- type: nil,
86
- group: nil,
87
- created_at: [^,]+,
88
- updated_at: [^,>]+>
86
+ expected = <<~PRETTY
87
+ #<Topic:0x\\w+
88
+ id: 1,
89
+ title: "The First Topic",
90
+ author_name: "David",
91
+ author_email_address: "david@loudthinking.com",
92
+ written_on: 2003-07-16 14:28:11(?:\.2233)? UTC,
93
+ bonus_time: 2000-01-01 14:28:00 UTC,
94
+ last_read: Thu, 15 Apr 2004,
95
+ content: "Have a nice day",
96
+ important: nil,
97
+ approved: false,
98
+ replies_count: 1,
99
+ unique_replies_count: 0,
100
+ parent_id: nil,
101
+ parent_title: nil,
102
+ type: nil,
103
+ group: nil,
104
+ created_at: [^,]+,
105
+ updated_at: [^,>]+>
89
106
  PRETTY
90
107
  assert_match(/\A#{expected}\z/, actual)
91
108
  end
92
109
 
93
110
  def test_pretty_print_uninitialized
94
111
  topic = Topic.allocate
95
- actual = ''
112
+ actual = +""
96
113
  PP.pp(topic, StringIO.new(actual))
97
114
  expected = "#<Topic:XXXXXX not initialized>\n"
98
- assert actual.start_with?(expected.split('XXXXXX').first)
99
- assert actual.end_with?(expected.split('XXXXXX').last)
115
+ assert actual.start_with?(expected.split("XXXXXX").first)
116
+ assert actual.end_with?(expected.split("XXXXXX").last)
100
117
  end
101
118
 
102
119
  def test_pretty_print_overridden_by_inspect
@@ -105,8 +122,15 @@ class CoreTest < ActiveRecord::TestCase
105
122
  "inspecting topic"
106
123
  end
107
124
  end
108
- actual = ''
125
+ actual = +""
109
126
  PP.pp(subtopic.new, StringIO.new(actual))
110
127
  assert_equal "inspecting topic\n", actual
111
128
  end
129
+
130
+ def test_pretty_print_with_non_primary_key_id_attribute
131
+ topic = topics(:first).becomes(TitlePrimaryKeyTopic)
132
+ actual = +""
133
+ PP.pp(topic, StringIO.new(actual))
134
+ assert_match(/id: 1/, actual)
135
+ end
112
136
  end
@@ -1,30 +1,33 @@
1
- require 'cases/helper'
2
- require 'models/topic'
3
- require 'models/car'
4
- require 'models/aircraft'
5
- require 'models/wheel'
6
- require 'models/engine'
7
- require 'models/reply'
8
- require 'models/category'
9
- require 'models/categorization'
10
- require 'models/dog'
11
- require 'models/dog_lover'
12
- require 'models/person'
13
- require 'models/friendship'
14
- require 'models/subscriber'
15
- require 'models/subscription'
16
- require 'models/book'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/topic"
5
+ require "models/car"
6
+ require "models/aircraft"
7
+ require "models/wheel"
8
+ require "models/engine"
9
+ require "models/reply"
10
+ require "models/category"
11
+ require "models/categorization"
12
+ require "models/dog"
13
+ require "models/dog_lover"
14
+ require "models/person"
15
+ require "models/friendship"
16
+ require "models/subscriber"
17
+ require "models/subscription"
18
+ require "models/book"
19
+ require "active_support/core_ext/enumerable"
17
20
 
18
21
  class CounterCacheTest < ActiveRecord::TestCase
19
22
  fixtures :topics, :categories, :categorizations, :cars, :dogs, :dog_lovers, :people, :friendships, :subscribers, :subscriptions, :books
20
23
 
21
24
  class ::SpecialTopic < ::Topic
22
- has_many :special_replies, :foreign_key => 'parent_id'
23
- has_many :lightweight_special_replies, -> { select('topics.id, topics.title') }, :foreign_key => 'parent_id', :class_name => 'SpecialReply'
25
+ has_many :special_replies, foreign_key: "parent_id"
26
+ has_many :lightweight_special_replies, -> { select("topics.id, topics.title") }, foreign_key: "parent_id", class_name: "SpecialReply"
24
27
  end
25
28
 
26
29
  class ::SpecialReply < ::Reply
27
- belongs_to :special_topic, :foreign_key => 'parent_id', :counter_cache => 'replies_count'
30
+ belongs_to :special_topic, foreign_key: "parent_id", counter_cache: "replies_count"
28
31
  end
29
32
 
30
33
  setup do
@@ -32,13 +35,13 @@ class CounterCacheTest < ActiveRecord::TestCase
32
35
  end
33
36
 
34
37
  test "increment counter" do
35
- assert_difference '@topic.reload.replies_count' do
38
+ assert_difference "@topic.reload.replies_count" do
36
39
  Topic.increment_counter(:replies_count, @topic.id)
37
40
  end
38
41
  end
39
42
 
40
43
  test "decrement counter" do
41
- assert_difference '@topic.reload.replies_count', -1 do
44
+ assert_difference "@topic.reload.replies_count", -1 do
42
45
  Topic.decrement_counter(:replies_count, @topic.id)
43
46
  end
44
47
  end
@@ -48,7 +51,7 @@ class CounterCacheTest < ActiveRecord::TestCase
48
51
  Topic.increment_counter(:replies_count, @topic.id)
49
52
 
50
53
  # check that it gets reset
51
- assert_difference '@topic.reload.replies_count', -1 do
54
+ assert_difference "@topic.reload.replies_count", -1 do
52
55
  Topic.reset_counters(@topic.id, :replies)
53
56
  end
54
57
  end
@@ -58,31 +61,31 @@ class CounterCacheTest < ActiveRecord::TestCase
58
61
  Topic.increment_counter(:replies_count, @topic.id)
59
62
 
60
63
  # check that it gets reset
61
- assert_difference '@topic.reload.replies_count', -1 do
64
+ assert_difference "@topic.reload.replies_count", -1 do
62
65
  Topic.reset_counters(@topic.id, :replies_count)
63
66
  end
64
67
  end
65
68
 
66
- test 'reset multiple counters' do
69
+ test "reset multiple counters" do
67
70
  Topic.update_counters @topic.id, replies_count: 1, unique_replies_count: 1
68
- assert_difference ['@topic.reload.replies_count', '@topic.reload.unique_replies_count'], -1 do
71
+ assert_difference ["@topic.reload.replies_count", "@topic.reload.unique_replies_count"], -1 do
69
72
  Topic.reset_counters(@topic.id, :replies, :unique_replies)
70
73
  end
71
74
  end
72
75
 
73
76
  test "reset counters with string argument" do
74
- Topic.increment_counter('replies_count', @topic.id)
77
+ Topic.increment_counter("replies_count", @topic.id)
75
78
 
76
- assert_difference '@topic.reload.replies_count', -1 do
77
- Topic.reset_counters(@topic.id, 'replies')
79
+ assert_difference "@topic.reload.replies_count", -1 do
80
+ Topic.reset_counters(@topic.id, "replies")
78
81
  end
79
82
  end
80
83
 
81
84
  test "reset counters with modularized and camelized classnames" do
82
- special = SpecialTopic.create!(:title => 'Special')
85
+ special = SpecialTopic.create!(title: "Special")
83
86
  SpecialTopic.increment_counter(:replies_count, special.id)
84
87
 
85
- assert_difference 'special.reload.replies_count', -1 do
88
+ assert_difference "special.reload.replies_count", -1 do
86
89
  SpecialTopic.reset_counters(special.id, :special_replies)
87
90
  end
88
91
  end
@@ -103,10 +106,10 @@ class CounterCacheTest < ActiveRecord::TestCase
103
106
  DogLover.increment_counter(:bred_dogs_count, david.id)
104
107
  DogLover.increment_counter(:trained_dogs_count, david.id)
105
108
 
106
- assert_difference 'david.reload.bred_dogs_count', -1 do
109
+ assert_difference "david.reload.bred_dogs_count", -1 do
107
110
  DogLover.reset_counters(david.id, :bred_dogs)
108
111
  end
109
- assert_difference 'david.reload.trained_dogs_count', -1 do
112
+ assert_difference "david.reload.trained_dogs_count", -1 do
110
113
  DogLover.reset_counters(david.id, :trained_dogs)
111
114
  end
112
115
  end
@@ -116,35 +119,35 @@ class CounterCacheTest < ActiveRecord::TestCase
116
119
  assert_equal 2, category.categorizations.count
117
120
  assert_nil category.categorizations_count
118
121
 
119
- Category.update_counters(category.id, :categorizations_count => category.categorizations.count)
122
+ Category.update_counters(category.id, categorizations_count: category.categorizations.count)
120
123
  assert_equal 2, category.reload.categorizations_count
121
124
  end
122
125
 
123
126
  test "update counter for decrement" do
124
- assert_difference '@topic.reload.replies_count', -3 do
125
- Topic.update_counters(@topic.id, :replies_count => -3)
127
+ assert_difference "@topic.reload.replies_count", -3 do
128
+ Topic.update_counters(@topic.id, replies_count: -3)
126
129
  end
127
130
  end
128
131
 
129
132
  test "update counters of multiple records" do
130
133
  t1, t2 = topics(:first, :second)
131
134
 
132
- assert_difference ['t1.reload.replies_count', 't2.reload.replies_count'], 2 do
133
- Topic.update_counters([t1.id, t2.id], :replies_count => 2)
135
+ assert_difference ["t1.reload.replies_count", "t2.reload.replies_count"], 2 do
136
+ Topic.update_counters([t1.id, t2.id], replies_count: 2)
134
137
  end
135
138
  end
136
139
 
137
- test 'update multiple counters' do
138
- assert_difference ['@topic.reload.replies_count', '@topic.reload.unique_replies_count'], 2 do
140
+ test "update multiple counters" do
141
+ assert_difference ["@topic.reload.replies_count", "@topic.reload.unique_replies_count"], 2 do
139
142
  Topic.update_counters @topic.id, replies_count: 2, unique_replies_count: 2
140
143
  end
141
144
  end
142
145
 
143
146
  test "update other counters on parent destroy" do
144
147
  david, joanna = dog_lovers(:david, :joanna)
145
- joanna = joanna # squelch a warning
148
+ _ = joanna # squelch a warning
146
149
 
147
- assert_difference 'joanna.reload.dogs_count', -1 do
150
+ assert_difference "joanna.reload.dogs_count", -1 do
148
151
  david.destroy
149
152
  end
150
153
  end
@@ -157,12 +160,12 @@ class CounterCacheTest < ActiveRecord::TestCase
157
160
  end
158
161
 
159
162
  test "reset counter of has_many :through association" do
160
- subscriber = subscribers('second')
161
- Subscriber.reset_counters(subscriber.id, 'books')
162
- Subscriber.increment_counter('books_count', subscriber.id)
163
+ subscriber = subscribers("second")
164
+ Subscriber.reset_counters(subscriber.id, "books")
165
+ Subscriber.increment_counter("books_count", subscriber.id)
163
166
 
164
- assert_difference 'subscriber.reload.books_count', -1 do
165
- Subscriber.reset_counters(subscriber.id, 'books')
167
+ assert_difference "subscriber.reload.books_count", -1 do
168
+ Subscriber.reset_counters(subscriber.id, "books")
166
169
  end
167
170
  end
168
171
 
@@ -174,10 +177,10 @@ class CounterCacheTest < ActiveRecord::TestCase
174
177
  end
175
178
 
176
179
  test "reset counter works with select declared on association" do
177
- special = SpecialTopic.create!(:title => 'Special')
180
+ special = SpecialTopic.create!(title: "Special")
178
181
  SpecialTopic.increment_counter(:replies_count, special.id)
179
182
 
180
- assert_difference 'special.reload.replies_count', -1 do
183
+ assert_difference "special.reload.replies_count", -1 do
181
184
  SpecialTopic.reset_counters(special.id, :lightweight_special_replies)
182
185
  end
183
186
  end
@@ -203,12 +206,163 @@ class CounterCacheTest < ActiveRecord::TestCase
203
206
  test "update counters in a polymorphic relationship" do
204
207
  aircraft = Aircraft.create!
205
208
 
206
- assert_difference 'aircraft.reload.wheels_count' do
209
+ assert_difference "aircraft.reload.wheels_count" do
207
210
  aircraft.wheels << Wheel.create!
208
211
  end
209
212
 
210
- assert_difference 'aircraft.reload.wheels_count', -1 do
213
+ assert_difference "aircraft.reload.wheels_count", -1 do
211
214
  aircraft.wheels.first.destroy
212
215
  end
213
216
  end
217
+
218
+ test "update counters doesn't touch timestamps by default" do
219
+ @topic.update_column :updated_at, 5.minutes.ago
220
+ previously_updated_at = @topic.updated_at
221
+
222
+ Topic.update_counters(@topic.id, replies_count: -1)
223
+
224
+ assert_equal previously_updated_at, @topic.updated_at
225
+ end
226
+
227
+ test "update counters doesn't touch timestamps with touch: []" do
228
+ @topic.update_column :updated_at, 5.minutes.ago
229
+ previously_updated_at = @topic.updated_at
230
+
231
+ Topic.update_counters(@topic.id, replies_count: -1, touch: [])
232
+
233
+ assert_equal previously_updated_at, @topic.updated_at
234
+ end
235
+
236
+ test "update counters with touch: true" do
237
+ assert_touching @topic, :updated_at do
238
+ Topic.update_counters(@topic.id, replies_count: -1, touch: true)
239
+ end
240
+ end
241
+
242
+ test "update counters of multiple records with touch: true" do
243
+ t1, t2 = topics(:first, :second)
244
+
245
+ assert_touching t1, :updated_at do
246
+ assert_difference ["t1.reload.replies_count", "t2.reload.replies_count"], 2 do
247
+ Topic.update_counters([t1.id, t2.id], replies_count: 2, touch: true)
248
+ end
249
+ end
250
+ end
251
+
252
+ test "update multiple counters with touch: true" do
253
+ assert_touching @topic, :updated_at do
254
+ Topic.update_counters(@topic.id, replies_count: 2, unique_replies_count: 2, touch: true)
255
+ end
256
+ end
257
+
258
+ test "reset counters with touch: true" do
259
+ assert_touching @topic, :updated_at do
260
+ Topic.reset_counters(@topic.id, :replies, touch: true)
261
+ end
262
+ end
263
+
264
+ test "reset multiple counters with touch: true" do
265
+ assert_touching @topic, :updated_at do
266
+ Topic.update_counters(@topic.id, replies_count: 1, unique_replies_count: 1)
267
+ Topic.reset_counters(@topic.id, :replies, :unique_replies, touch: { time: Time.now.utc })
268
+ end
269
+ end
270
+
271
+ test "increment counters with touch: true" do
272
+ assert_touching @topic, :updated_at do
273
+ Topic.increment_counter(:replies_count, @topic.id, touch: true)
274
+ end
275
+ end
276
+
277
+ test "decrement counters with touch: true" do
278
+ assert_touching @topic, :updated_at do
279
+ Topic.decrement_counter(:replies_count, @topic.id, touch: true)
280
+ end
281
+ end
282
+
283
+ test "update counters with touch: :written_on" do
284
+ assert_touching @topic, :updated_at, :written_on do
285
+ Topic.update_counters(@topic.id, replies_count: -1, touch: :written_on)
286
+ end
287
+ end
288
+
289
+ test "update multiple counters with touch: :written_on" do
290
+ assert_touching @topic, :updated_at, :written_on do
291
+ Topic.update_counters(@topic.id, replies_count: 2, unique_replies_count: 2, touch: :written_on)
292
+ end
293
+ end
294
+
295
+ test "reset counters with touch: :written_on" do
296
+ assert_touching @topic, :updated_at, :written_on do
297
+ Topic.reset_counters(@topic.id, :replies, touch: :written_on)
298
+ end
299
+ end
300
+
301
+ test "reset multiple counters with touch: :written_on" do
302
+ assert_touching @topic, :updated_at, :written_on do
303
+ Topic.update_counters(@topic.id, replies_count: 1, unique_replies_count: 1)
304
+ Topic.reset_counters(@topic.id, :replies, :unique_replies, touch: :written_on)
305
+ end
306
+ end
307
+
308
+ test "increment counters with touch: :written_on" do
309
+ assert_touching @topic, :updated_at, :written_on do
310
+ Topic.increment_counter(:replies_count, @topic.id, touch: :written_on)
311
+ end
312
+ end
313
+
314
+ test "decrement counters with touch: :written_on" do
315
+ assert_touching @topic, :updated_at, :written_on do
316
+ Topic.decrement_counter(:replies_count, @topic.id, touch: :written_on)
317
+ end
318
+ end
319
+
320
+ test "update counters with touch: %i( updated_at written_on )" do
321
+ assert_touching @topic, :updated_at, :written_on do
322
+ Topic.update_counters(@topic.id, replies_count: -1, touch: %i( updated_at written_on ))
323
+ end
324
+ end
325
+
326
+ test "update multiple counters with touch: %i( updated_at written_on )" do
327
+ assert_touching @topic, :updated_at, :written_on do
328
+ Topic.update_counters(@topic.id, replies_count: 2, unique_replies_count: 2, touch: %i( updated_at written_on ))
329
+ end
330
+ end
331
+
332
+ test "reset counters with touch: %i( updated_at written_on )" do
333
+ assert_touching @topic, :updated_at, :written_on do
334
+ Topic.reset_counters(@topic.id, :replies, touch: %i( updated_at written_on ))
335
+ end
336
+ end
337
+
338
+ test "reset multiple counters with touch: %i( updated_at written_on )" do
339
+ assert_touching @topic, :updated_at, :written_on do
340
+ Topic.update_counters(@topic.id, replies_count: 1, unique_replies_count: 1)
341
+ Topic.reset_counters(@topic.id, :replies, :unique_replies, touch: %i( updated_at written_on ))
342
+ end
343
+ end
344
+
345
+ test "increment counters with touch: %i( updated_at written_on )" do
346
+ assert_touching @topic, :updated_at, :written_on do
347
+ Topic.increment_counter(:replies_count, @topic.id, touch: %i( updated_at written_on ))
348
+ end
349
+ end
350
+
351
+ test "decrement counters with touch: %i( updated_at written_on )" do
352
+ assert_touching @topic, :updated_at, :written_on do
353
+ Topic.decrement_counter(:replies_count, @topic.id, touch: %i( updated_at written_on ))
354
+ end
355
+ end
356
+
357
+ private
358
+ def assert_touching(record, *attributes)
359
+ record.update_columns attributes.index_with(5.minutes.ago)
360
+ touch_times = attributes.index_with { |attr| record.public_send(attr) }
361
+
362
+ yield
363
+
364
+ touch_times.each do |attr, previous_touch_time|
365
+ assert_operator previous_touch_time, :<, record.reload.public_send(attr)
366
+ end
367
+ end
214
368
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/person'
4
+ require "models/person"
3
5
 
4
6
  module ActiveRecord
5
7
  class CustomLockingTest < ActiveRecord::TestCase
@@ -7,9 +9,9 @@ module ActiveRecord
7
9
 
8
10
  def test_custom_lock
9
11
  if current_adapter?(:Mysql2Adapter)
10
- assert_match 'SHARE MODE', Person.lock('LOCK IN SHARE MODE').to_sql
12
+ assert_match "SHARE MODE", Person.lock("LOCK IN SHARE MODE").to_sql
11
13
  assert_sql(/LOCK IN SHARE MODE/) do
12
- Person.all.merge!(:lock => 'LOCK IN SHARE MODE').find(1)
14
+ Person.all.merge!(lock: "LOCK IN SHARE MODE").find(1)
13
15
  end
14
16
  end
15
17
  end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+
5
+ module ActiveRecord
6
+ class DatabaseConfigurations
7
+ class HashConfigTest < ActiveRecord::TestCase
8
+ def test_pool_default_when_nil
9
+ config = HashConfig.new("default_env", "primary", pool: nil)
10
+ assert_equal 5, config.pool
11
+ end
12
+
13
+ def test_pool_overrides_with_value
14
+ config = HashConfig.new("default_env", "primary", pool: "0")
15
+ assert_equal 0, config.pool
16
+ end
17
+
18
+ def test_when_no_pool_uses_default
19
+ config = HashConfig.new("default_env", "primary", {})
20
+ assert_equal 5, config.pool
21
+ end
22
+
23
+ def test_checkout_timeout_default_when_nil
24
+ config = HashConfig.new("default_env", "primary", checkout_timeout: nil)
25
+ assert_equal 5.0, config.checkout_timeout
26
+ end
27
+
28
+ def test_checkout_timeout_overrides_with_value
29
+ config = HashConfig.new("default_env", "primary", checkout_timeout: "0")
30
+ assert_equal 0.0, config.checkout_timeout
31
+ end
32
+
33
+ def test_when_no_checkout_timeout_uses_default
34
+ config = HashConfig.new("default_env", "primary", {})
35
+ assert_equal 5.0, config.checkout_timeout
36
+ end
37
+
38
+ def test_reaping_frequency_default_when_nil
39
+ config = HashConfig.new("default_env", "primary", reaping_frequency: nil)
40
+ assert_nil config.reaping_frequency
41
+ end
42
+
43
+ def test_reaping_frequency_overrides_with_value
44
+ config = HashConfig.new("default_env", "primary", reaping_frequency: "0")
45
+ assert_equal 0.0, config.reaping_frequency
46
+ end
47
+
48
+ def test_when_no_reaping_frequency_uses_default
49
+ config = HashConfig.new("default_env", "primary", {})
50
+ assert_equal 60.0, config.reaping_frequency
51
+ end
52
+
53
+ def test_idle_timeout_default_when_nil
54
+ config = HashConfig.new("default_env", "primary", idle_timeout: nil)
55
+ assert_nil config.idle_timeout
56
+ end
57
+
58
+ def test_idle_timeout_overrides_with_value
59
+ config = HashConfig.new("default_env", "primary", idle_timeout: "1")
60
+ assert_equal 1.0, config.idle_timeout
61
+ end
62
+
63
+ def test_when_no_idle_timeout_uses_default
64
+ config = HashConfig.new("default_env", "primary", {})
65
+ assert_equal 300.0, config.idle_timeout
66
+ end
67
+
68
+ def test_idle_timeout_nil_when_less_than_or_equal_to_zero
69
+ config = HashConfig.new("default_env", "primary", idle_timeout: "0")
70
+ assert_nil config.idle_timeout
71
+ end
72
+ end
73
+ end
74
+ end