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,83 +1,49 @@
1
- require 'cases/helper'
2
- require 'active_support/core_ext/hash/indifferent_access'
1
+ # frozen_string_literal: true
3
2
 
4
- require 'models/company'
5
- require 'models/person'
6
- require 'models/ship'
7
- require 'models/ship_part'
8
- require 'models/treasure'
9
-
10
- class ProtectedParams
11
- attr_accessor :permitted
12
- alias :permitted? :permitted
13
-
14
- delegate :keys, :key?, :has_key?, :empty?, to: :@parameters
15
-
16
- def initialize(attributes)
17
- @parameters = attributes.with_indifferent_access
18
- @permitted = false
19
- end
20
-
21
- def permit!
22
- @permitted = true
23
- self
24
- end
25
-
26
- def [](key)
27
- @parameters[key]
28
- end
29
-
30
- def to_h
31
- @parameters
32
- end
33
-
34
- def stringify_keys
35
- dup
36
- end
37
-
38
- def dup
39
- super.tap do |duplicate|
40
- duplicate.instance_variable_set :@permitted, @permitted
41
- end
42
- end
43
- end
3
+ require "cases/helper"
4
+ require "models/company"
5
+ require "models/person"
6
+ require "models/ship"
7
+ require "models/ship_part"
8
+ require "models/treasure"
9
+ require "support/stubs/strong_parameters"
44
10
 
45
11
  class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
46
12
  def test_forbidden_attributes_cannot_be_used_for_mass_assignment
47
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
13
+ params = ProtectedParams.new(first_name: "Guille", gender: "m")
48
14
  assert_raises(ActiveModel::ForbiddenAttributesError) do
49
15
  Person.new(params)
50
16
  end
51
17
  end
52
18
 
53
19
  def test_permitted_attributes_can_be_used_for_mass_assignment
54
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
20
+ params = ProtectedParams.new(first_name: "Guille", gender: "m")
55
21
  params.permit!
56
22
  person = Person.new(params)
57
23
 
58
- assert_equal 'Guille', person.first_name
59
- assert_equal 'm', person.gender
24
+ assert_equal "Guille", person.first_name
25
+ assert_equal "m", person.gender
60
26
  end
61
27
 
62
28
  def test_forbidden_attributes_cannot_be_used_for_sti_inheritance_column
63
- params = ProtectedParams.new(type: 'Client')
29
+ params = ProtectedParams.new(type: "Client")
64
30
  assert_raises(ActiveModel::ForbiddenAttributesError) do
65
31
  Company.new(params)
66
32
  end
67
33
  end
68
34
 
69
35
  def test_permitted_attributes_can_be_used_for_sti_inheritance_column
70
- params = ProtectedParams.new(type: 'Client')
36
+ params = ProtectedParams.new(type: "Client")
71
37
  params.permit!
72
38
  person = Company.new(params)
73
39
  assert_equal person.class, Client
74
40
  end
75
41
 
76
42
  def test_regular_hash_should_still_be_used_for_mass_assignment
77
- person = Person.new(first_name: 'Guille', gender: 'm')
43
+ person = Person.new(first_name: "Guille", gender: "m")
78
44
 
79
- assert_equal 'Guille', person.first_name
80
- assert_equal 'm', person.gender
45
+ assert_equal "Guille", person.first_name
46
+ assert_equal "m", person.gender
81
47
  end
82
48
 
83
49
  def test_blank_attributes_should_not_raise
@@ -86,7 +52,7 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
86
52
  end
87
53
 
88
54
  def test_create_with_checks_permitted
89
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
55
+ params = ProtectedParams.new(first_name: "Guille", gender: "m")
90
56
 
91
57
  assert_raises(ActiveModel::ForbiddenAttributesError) do
92
58
  Person.create_with(params).create!
@@ -94,21 +60,21 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
94
60
  end
95
61
 
96
62
  def test_create_with_works_with_permitted_params
97
- params = ProtectedParams.new(first_name: 'Guille').permit!
63
+ params = ProtectedParams.new(first_name: "Guille").permit!
98
64
 
99
65
  person = Person.create_with(params).create!
100
- assert_equal 'Guille', person.first_name
66
+ assert_equal "Guille", person.first_name
101
67
  end
102
68
 
103
69
  def test_create_with_works_with_params_values
104
- params = ProtectedParams.new(first_name: 'Guille')
70
+ params = ProtectedParams.new(first_name: "Guille")
105
71
 
106
72
  person = Person.create_with(first_name: params[:first_name]).create!
107
- assert_equal 'Guille', person.first_name
73
+ assert_equal "Guille", person.first_name
108
74
  end
109
75
 
110
76
  def test_where_checks_permitted
111
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
77
+ params = ProtectedParams.new(first_name: "Guille", gender: "m")
112
78
 
113
79
  assert_raises(ActiveModel::ForbiddenAttributesError) do
114
80
  Person.where(params).create!
@@ -116,21 +82,21 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
116
82
  end
117
83
 
118
84
  def test_where_works_with_permitted_params
119
- params = ProtectedParams.new(first_name: 'Guille').permit!
85
+ params = ProtectedParams.new(first_name: "Guille").permit!
120
86
 
121
87
  person = Person.where(params).create!
122
- assert_equal 'Guille', person.first_name
88
+ assert_equal "Guille", person.first_name
123
89
  end
124
90
 
125
91
  def test_where_works_with_params_values
126
- params = ProtectedParams.new(first_name: 'Guille')
92
+ params = ProtectedParams.new(first_name: "Guille")
127
93
 
128
94
  person = Person.where(first_name: params[:first_name]).create!
129
- assert_equal 'Guille', person.first_name
95
+ assert_equal "Guille", person.first_name
130
96
  end
131
97
 
132
98
  def test_where_not_checks_permitted
133
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
99
+ params = ProtectedParams.new(first_name: "Guille", gender: "m")
134
100
 
135
101
  assert_raises(ActiveModel::ForbiddenAttributesError) do
136
102
  Person.where().not(params)
@@ -138,13 +104,13 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
138
104
  end
139
105
 
140
106
  def test_where_not_works_with_permitted_params
141
- params = ProtectedParams.new(first_name: 'Guille').permit!
107
+ params = ProtectedParams.new(first_name: "Guille").permit!
142
108
  Person.create!(params)
143
- assert_empty Person.where.not(params).select {|p| p.first_name == 'Guille' }
109
+ assert_empty Person.where.not(params).select { |p| p.first_name == "Guille" }
144
110
  end
145
111
 
146
112
  def test_strong_params_style_objects_work_with_singular_associations
147
- params = ProtectedParams.new( name: "Stern", ship_attributes: ProtectedParams.new(name: "The Black Rock").permit!).permit!
113
+ params = ProtectedParams.new(name: "Stern", ship_attributes: ProtectedParams.new(name: "The Black Rock").permit!).permit!
148
114
  part = ShipPart.new(params)
149
115
 
150
116
  assert_equal "Stern", part.name
@@ -155,11 +121,10 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
155
121
  params = ProtectedParams.new(
156
122
  trinkets_attributes: ProtectedParams.new(
157
123
  "0" => ProtectedParams.new(name: "Necklace").permit!,
158
- "1" => ProtectedParams.new(name: "Spoon").permit! ) ).permit!
124
+ "1" => ProtectedParams.new(name: "Spoon").permit!)).permit!
159
125
  part = ShipPart.new(params)
160
126
 
161
127
  assert_equal "Necklace", part.trinkets[0].name
162
128
  assert_equal "Spoon", part.trinkets[1].name
163
129
  end
164
-
165
130
  end
@@ -1,24 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
  require "models/lesson"
3
5
  require "models/student"
4
6
 
5
7
  class HabtmDestroyOrderTest < ActiveRecord::TestCase
6
8
  test "may not delete a lesson with students" do
7
- sicp = Lesson.new(:name => "SICP")
8
- ben = Student.new(:name => "Ben Bitdiddle")
9
+ sicp = Lesson.new(name: "SICP")
10
+ ben = Student.new(name: "Ben Bitdiddle")
9
11
  sicp.students << ben
10
12
  sicp.save!
11
13
  assert_raises LessonError do
12
- assert_no_difference('Lesson.count') do
14
+ assert_no_difference("Lesson.count") do
13
15
  sicp.destroy
14
16
  end
15
17
  end
16
- assert !sicp.destroyed?
18
+ assert_not_predicate sicp, :destroyed?
17
19
  end
18
20
 
19
- test 'should not raise error if have foreign key in the join table' do
20
- student = Student.new(:name => "Ben Bitdiddle")
21
- lesson = Lesson.new(:name => "SICP")
21
+ test "should not raise error if have foreign key in the join table" do
22
+ student = Student.new(name: "Ben Bitdiddle")
23
+ lesson = Lesson.new(name: "SICP")
22
24
  lesson.students << student
23
25
  lesson.save!
24
26
  assert_nothing_raised do
@@ -28,34 +30,32 @@ class HabtmDestroyOrderTest < ActiveRecord::TestCase
28
30
 
29
31
  test "not destroying a student with lessons leaves student<=>lesson association intact" do
30
32
  # test a normal before_destroy doesn't destroy the habtm joins
31
- begin
32
- sicp = Lesson.new(:name => "SICP")
33
- ben = Student.new(:name => "Ben Bitdiddle")
34
- # add a before destroy to student
35
- Student.class_eval do
36
- before_destroy do
37
- raise ActiveRecord::Rollback unless lessons.empty?
38
- end
33
+ sicp = Lesson.new(name: "SICP")
34
+ ben = Student.new(name: "Ben Bitdiddle")
35
+ # add a before destroy to student
36
+ Student.class_eval do
37
+ before_destroy do
38
+ raise ActiveRecord::Rollback unless lessons.empty?
39
39
  end
40
- ben.lessons << sicp
41
- ben.save!
42
- ben.destroy
43
- assert !ben.reload.lessons.empty?
44
- ensure
45
- # get rid of it so Student is still like it was
46
- Student.reset_callbacks(:destroy)
47
40
  end
41
+ ben.lessons << sicp
42
+ ben.save!
43
+ ben.destroy
44
+ assert_not_empty ben.reload.lessons
45
+ ensure
46
+ # get rid of it so Student is still like it was
47
+ Student.reset_callbacks(:destroy)
48
48
  end
49
49
 
50
50
  test "not destroying a lesson with students leaves student<=>lesson association intact" do
51
51
  # test a more aggressive before_destroy doesn't destroy the habtm joins and still throws the exception
52
- sicp = Lesson.new(:name => "SICP")
53
- ben = Student.new(:name => "Ben Bitdiddle")
52
+ sicp = Lesson.new(name: "SICP")
53
+ ben = Student.new(name: "Ben Bitdiddle")
54
54
  sicp.students << ben
55
55
  sicp.save!
56
56
  assert_raises LessonError do
57
57
  sicp.destroy
58
58
  end
59
- assert !sicp.reload.students.empty?
59
+ assert_not_empty sicp.reload.students
60
60
  end
61
61
  end
data/test/cases/helper.rb CHANGED
@@ -1,17 +1,17 @@
1
- require 'config'
1
+ # frozen_string_literal: true
2
2
 
3
- require 'active_support/testing/autorun'
4
- require 'active_support/testing/method_call_assertions'
5
- require 'stringio'
3
+ require "config"
6
4
 
7
- require 'active_record'
8
- require 'cases/test_case'
9
- require 'active_support/dependencies'
10
- require 'active_support/logger'
11
- require 'active_support/core_ext/string/strip'
5
+ require "stringio"
12
6
 
13
- require 'support/config'
14
- require 'support/connection'
7
+ require "active_record"
8
+ require "cases/test_case"
9
+ require "active_support/dependencies"
10
+ require "active_support/logger"
11
+ require "active_support/core_ext/kernel/singleton_class"
12
+
13
+ require "support/config"
14
+ require "support/connection"
15
15
 
16
16
  # TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
17
17
 
@@ -27,10 +27,7 @@ I18n.enforce_available_locales = false
27
27
  ARTest.connect
28
28
 
29
29
  # Quote "type" if it's a reserved word for the current connection.
30
- QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
31
-
32
- # FIXME: Remove this when the deprecation cycle on TZ aware types by default ends.
33
- ActiveRecord::Base.time_zone_aware_types << :time
30
+ QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name("type")
34
31
 
35
32
  def current_adapter?(*types)
36
33
  types.any? do |type|
@@ -41,26 +38,53 @@ end
41
38
 
42
39
  def in_memory_db?
43
40
  current_adapter?(:SQLite3Adapter) &&
44
- ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
41
+ ActiveRecord::Base.connection_pool.db_config.database == ":memory:"
45
42
  end
46
43
 
47
- def subsecond_precision_supported?
48
- ActiveRecord::Base.connection.supports_datetime_with_precision?
44
+ def mysql_enforcing_gtid_consistency?
45
+ current_adapter?(:Mysql2Adapter) && "ON" == ActiveRecord::Base.connection.show_variable("enforce_gtid_consistency")
49
46
  end
50
47
 
51
- def mysql_enforcing_gtid_consistency?
52
- current_adapter?(:Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
48
+ def supports_default_expression?
49
+ if current_adapter?(:PostgreSQLAdapter)
50
+ true
51
+ elsif current_adapter?(:Mysql2Adapter)
52
+ conn = ActiveRecord::Base.connection
53
+ !conn.mariadb? && conn.database_version >= "8.0.13"
54
+ end
53
55
  end
54
56
 
55
- def supports_savepoints?
56
- ActiveRecord::Base.connection.supports_savepoints?
57
+ def supports_text_column_with_default?
58
+ if current_adapter?(:Mysql2Adapter)
59
+ conn = ActiveRecord::Base.connection
60
+ conn.mariadb? && conn.database_version >= "10.2.1"
61
+ else
62
+ true
63
+ end
64
+ end
65
+
66
+ %w[
67
+ supports_savepoints?
68
+ supports_partial_index?
69
+ supports_partitioned_indexes?
70
+ supports_expression_index?
71
+ supports_insert_returning?
72
+ supports_insert_on_duplicate_skip?
73
+ supports_insert_on_duplicate_update?
74
+ supports_insert_conflict_target?
75
+ supports_optimizer_hints?
76
+ supports_datetime_with_precision?
77
+ ].each do |method_name|
78
+ define_method method_name do
79
+ ActiveRecord::Base.connection.public_send(method_name)
80
+ end
57
81
  end
58
82
 
59
- def with_env_tz(new_tz = 'US/Eastern')
60
- old_tz, ENV['TZ'] = ENV['TZ'], new_tz
83
+ def with_env_tz(new_tz = "US/Eastern")
84
+ old_tz, ENV["TZ"] = ENV["TZ"], new_tz
61
85
  yield
62
86
  ensure
63
- old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
87
+ old_tz ? ENV["TZ"] = old_tz : ENV.delete("TZ")
64
88
  end
65
89
 
66
90
  def with_timezone_config(cfg)
@@ -134,18 +158,24 @@ def disable_extension!(extension, connection)
134
158
  connection.reconnect!
135
159
  end
136
160
 
137
- require "cases/validations_repair_helper"
138
- class ActiveSupport::TestCase
139
- include ActiveRecord::TestFixtures
140
- include ActiveRecord::ValidationsRepairHelper
141
- include ActiveSupport::Testing::MethodCallAssertions
161
+ def clean_up_legacy_connection_handlers
162
+ handler = ActiveRecord::Base.default_connection_handler
163
+ ActiveRecord::Base.connection_handlers = {}
142
164
 
143
- self.fixture_path = FIXTURES_ROOT
144
- self.use_instantiated_fixtures = false
145
- self.use_transactional_tests = true
165
+ handler.connection_pool_names.each do |name|
166
+ next if ["ActiveRecord::Base", "ARUnit2Model", "Contact", "ContactSti", "FirstAbstractClass", "SecondAbstractClass"].include?(name)
146
167
 
147
- def create_fixtures(*fixture_set_names, &block)
148
- ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
168
+ handler.send(:owner_to_pool_manager).delete(name)
169
+ end
170
+ end
171
+
172
+ def clean_up_connection_handler
173
+ handler = ActiveRecord::Base.connection_handler
174
+ handler.instance_variable_get(:@owner_to_pool_manager).each do |owner, pool_manager|
175
+ pool_manager.role_names.each do |role_name|
176
+ next if role_name == ActiveRecord::Base.default_role
177
+ pool_manager.remove_role(role_name)
178
+ end
149
179
  end
150
180
  end
151
181
 
@@ -162,6 +192,8 @@ def load_schema
162
192
  if File.exist?(adapter_specific_schema_file)
163
193
  load adapter_specific_schema_file
164
194
  end
195
+
196
+ ActiveRecord::FixtureSet.reset_cache
165
197
  ensure
166
198
  $stdout = original_stdout
167
199
  end
@@ -187,18 +219,15 @@ end
187
219
 
188
220
  module InTimeZone
189
221
  private
190
-
191
- def in_time_zone(zone)
192
- old_zone = Time.zone
193
- old_tz = ActiveRecord::Base.time_zone_aware_attributes
194
-
195
- Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
196
- ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
197
- yield
198
- ensure
199
- Time.zone = old_zone
200
- ActiveRecord::Base.time_zone_aware_attributes = old_tz
201
- end
222
+ def in_time_zone(zone)
223
+ old_zone = Time.zone
224
+ old_tz = ActiveRecord::Base.time_zone_aware_attributes
225
+
226
+ Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
227
+ ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
228
+ yield
229
+ ensure
230
+ Time.zone = old_zone
231
+ ActiveRecord::Base.time_zone_aware_attributes = old_tz
232
+ end
202
233
  end
203
-
204
- require 'mocha/setup' # FIXME: stop using mocha
@@ -1,5 +1,7 @@
1
- require 'cases/helper'
2
- require 'support/connection_helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/connection_helper"
3
5
 
4
6
  class HotCompatibilityTest < ActiveRecord::TestCase
5
7
  self.use_transactional_tests = false
@@ -12,7 +14,7 @@ class HotCompatibilityTest < ActiveRecord::TestCase
12
14
  t.string :bar
13
15
  end
14
16
 
15
- def self.name; 'HotCompatibility'; end
17
+ def self.name; "HotCompatibility"; end
16
18
  end
17
19
  end
18
20
 
@@ -35,29 +37,29 @@ class HotCompatibilityTest < ActiveRecord::TestCase
35
37
 
36
38
  # but we can successfully create a record so long as we don't
37
39
  # reference the removed column
38
- record = @klass.create! foo: 'foo'
40
+ record = @klass.create! foo: "foo"
39
41
  record.reload
40
- assert_equal 'foo', record.foo
42
+ assert_equal "foo", record.foo
41
43
  end
42
44
 
43
45
  test "update after remove_column" do
44
- record = @klass.create! foo: 'foo'
46
+ record = @klass.create! foo: "foo"
45
47
  assert_equal 3, @klass.columns.length
46
48
  @klass.connection.remove_column :hot_compatibilities, :bar
47
49
  assert_equal 3, @klass.columns.length
48
50
 
49
51
  record.reload
50
- assert_equal 'foo', record.foo
51
- record.foo = 'bar'
52
+ assert_equal "foo", record.foo
53
+ record.foo = "bar"
52
54
  record.save!
53
55
  record.reload
54
- assert_equal 'bar', record.foo
56
+ assert_equal "bar", record.foo
55
57
  end
56
58
 
57
- if current_adapter?(:PostgreSQLAdapter)
59
+ if current_adapter?(:PostgreSQLAdapter) && ActiveRecord::Base.connection.prepared_statements
58
60
  test "cleans up after prepared statement failure in a transaction" do
59
61
  with_two_connections do |original_connection, ddl_connection|
60
- record = @klass.create! bar: 'bar'
62
+ record = @klass.create! bar: "bar"
61
63
 
62
64
  # prepare the reload statement in a transaction
63
65
  @klass.transaction do
@@ -83,7 +85,7 @@ class HotCompatibilityTest < ActiveRecord::TestCase
83
85
 
84
86
  test "cleans up after prepared statement failure in nested transactions" do
85
87
  with_two_connections do |original_connection, ddl_connection|
86
- record = @klass.create! bar: 'bar'
88
+ record = @klass.create! bar: "bar"
87
89
 
88
90
  # prepare the reload statement in a transaction
89
91
  @klass.transaction do
@@ -113,30 +115,29 @@ class HotCompatibilityTest < ActiveRecord::TestCase
113
115
  end
114
116
 
115
117
  private
118
+ def get_prepared_statement_cache(connection)
119
+ connection.instance_variable_get(:@statements)
120
+ .instance_variable_get(:@cache)[Process.pid]
121
+ end
116
122
 
117
- def get_prepared_statement_cache(connection)
118
- connection.instance_variable_get(:@statements)
119
- .instance_variable_get(:@cache)[Process.pid]
120
- end
121
-
122
- # Rails will automatically clear the prepared statements on the connection
123
- # that runs the migration, so we use two connections to simulate what would
124
- # actually happen on a production system; we'd have one connection running the
125
- # migration from the rake task ("ddl_connection" here), and we'd have another
126
- # connection in a web worker.
127
- def with_two_connections
128
- run_without_connection do |original_connection|
129
- ActiveRecord::Base.establish_connection(original_connection.merge(pool_size: 2))
130
- begin
131
- ddl_connection = ActiveRecord::Base.connection_pool.checkout
123
+ # Rails will automatically clear the prepared statements on the connection
124
+ # that runs the migration, so we use two connections to simulate what would
125
+ # actually happen on a production system; we'd have one connection running the
126
+ # migration from the rake task ("ddl_connection" here), and we'd have another
127
+ # connection in a web worker.
128
+ def with_two_connections
129
+ run_without_connection do |original_connection|
130
+ ActiveRecord::Base.establish_connection(original_connection.merge(pool_size: 2))
132
131
  begin
133
- yield original_connection, ddl_connection
132
+ ddl_connection = ActiveRecord::Base.connection_pool.checkout
133
+ begin
134
+ yield original_connection, ddl_connection
135
+ ensure
136
+ ActiveRecord::Base.connection_pool.checkin ddl_connection
137
+ end
134
138
  ensure
135
- ActiveRecord::Base.connection_pool.checkin ddl_connection
139
+ ActiveRecord::Base.clear_all_connections!
136
140
  end
137
- ensure
138
- ActiveRecord::Base.clear_all_connections!
139
141
  end
140
142
  end
141
- end
142
143
  end
@@ -1,45 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/topic'
3
- require 'models/reply'
4
+ require "models/topic"
5
+ require "models/reply"
4
6
 
5
7
  class ActiveRecordI18nTests < ActiveRecord::TestCase
6
-
7
8
  def setup
8
9
  I18n.backend = I18n::Backend::Simple.new
9
10
  end
10
11
 
11
12
  def test_translated_model_attributes
12
- I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
13
- assert_equal 'topic title attribute', Topic.human_attribute_name('title')
13
+ I18n.backend.store_translations "en", activerecord: { attributes: { topic: { title: "topic title attribute" } } }
14
+ assert_equal "topic title attribute", Topic.human_attribute_name("title")
14
15
  end
15
16
 
16
17
  def test_translated_model_attributes_with_symbols
17
- I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
18
- assert_equal 'topic title attribute', Topic.human_attribute_name(:title)
18
+ I18n.backend.store_translations "en", activerecord: { attributes: { topic: { title: "topic title attribute" } } }
19
+ assert_equal "topic title attribute", Topic.human_attribute_name(:title)
19
20
  end
20
21
 
21
22
  def test_translated_model_attributes_with_sti
22
- I18n.backend.store_translations 'en', :activerecord => {:attributes => {:reply => {:title => 'reply title attribute'} } }
23
- assert_equal 'reply title attribute', Reply.human_attribute_name('title')
23
+ I18n.backend.store_translations "en", activerecord: { attributes: { reply: { title: "reply title attribute" } } }
24
+ assert_equal "reply title attribute", Reply.human_attribute_name("title")
24
25
  end
25
26
 
26
27
  def test_translated_model_attributes_with_sti_fallback
27
- I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
28
- assert_equal 'topic title attribute', Reply.human_attribute_name('title')
28
+ I18n.backend.store_translations "en", activerecord: { attributes: { topic: { title: "topic title attribute" } } }
29
+ assert_equal "topic title attribute", Reply.human_attribute_name("title")
29
30
  end
30
31
 
31
32
  def test_translated_model_names
32
- I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
33
- assert_equal 'topic model', Topic.model_name.human
33
+ I18n.backend.store_translations "en", activerecord: { models: { topic: "topic model" } }
34
+ assert_equal "topic model", Topic.model_name.human
34
35
  end
35
36
 
36
37
  def test_translated_model_names_with_sti
37
- I18n.backend.store_translations 'en', :activerecord => {:models => {:reply => 'reply model'} }
38
- assert_equal 'reply model', Reply.model_name.human
38
+ I18n.backend.store_translations "en", activerecord: { models: { reply: "reply model" } }
39
+ assert_equal "reply model", Reply.model_name.human
39
40
  end
40
41
 
41
42
  def test_translated_model_names_with_sti_fallback
42
- I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
43
- assert_equal 'topic model', Reply.model_name.human
43
+ I18n.backend.store_translations "en", activerecord: { models: { topic: "topic model" } }
44
+ assert_equal "topic model", Reply.model_name.human
44
45
  end
45
46
  end