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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
4
 
3
5
  class Mixin < ActiveRecord::Base
@@ -10,10 +12,6 @@ class TouchTest < ActiveRecord::TestCase
10
12
  travel_to Time.now
11
13
  end
12
14
 
13
- teardown do
14
- travel_back
15
- end
16
-
17
15
  def test_update
18
16
  stamped = Mixin.new
19
17
 
@@ -41,13 +39,12 @@ class TouchTest < ActiveRecord::TestCase
41
39
 
42
40
  old_updated_at = stamped.updated_at
43
41
 
44
- travel 5.minutes do
45
- stamped.lft_will_change!
46
- stamped.save
42
+ travel 5.minutes
43
+ stamped.lft_will_change!
44
+ stamped.save
47
45
 
48
- assert_equal Time.now, stamped.updated_at
49
- assert_equal old_updated_at, stamped.created_at
50
- end
46
+ assert_equal Time.now, stamped.updated_at
47
+ assert_equal old_updated_at, stamped.created_at
51
48
  end
52
49
 
53
50
  def test_create_turned_off
@@ -64,5 +61,4 @@ class TouchTest < ActiveRecord::TestCase
64
61
  ensure
65
62
  Mixin.record_timestamps = true
66
63
  end
67
-
68
64
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/company_in_module'
3
- require 'models/shop'
4
- require 'models/developer'
5
- require 'models/computer'
4
+ require "models/company_in_module"
5
+ require "models/shop"
6
+ require "models/developer"
7
+ require "models/computer"
6
8
 
7
9
  class ModulesTest < ActiveRecord::TestCase
8
10
  fixtures :accounts, :companies, :projects, :developers, :collections, :products, :variants
@@ -22,7 +24,7 @@ class ModulesTest < ActiveRecord::TestCase
22
24
  teardown do
23
25
  # reinstate the constants that we undefined in the setup
24
26
  @undefined_consts.each do |constant, value|
25
- Object.send :const_set, constant, value unless value.nil?
27
+ Object.const_set constant, value unless value.nil?
26
28
  end
27
29
 
28
30
  ActiveRecord::Base.store_full_sti_class = true
@@ -30,8 +32,8 @@ class ModulesTest < ActiveRecord::TestCase
30
32
 
31
33
  def test_module_spanning_associations
32
34
  firm = MyApplication::Business::Firm.first
33
- assert !firm.clients.empty?, "Firm should have clients"
34
- assert_nil firm.class.table_name.match('::'), "Firm shouldn't have the module appear in its table name"
35
+ assert_not firm.clients.empty?, "Firm should have clients"
36
+ assert_nil firm.class.table_name.match("::"), "Firm shouldn't have the module appear in its table name"
35
37
  end
36
38
 
37
39
  def test_module_spanning_has_and_belongs_to_many_associations
@@ -41,7 +43,7 @@ class ModulesTest < ActiveRecord::TestCase
41
43
  end
42
44
 
43
45
  def test_associations_spanning_cross_modules
44
- account = MyApplication::Billing::Account.all.merge!(:order => 'id').first
46
+ account = MyApplication::Billing::Account.all.merge!(order: "id").first
45
47
  assert_kind_of MyApplication::Business::Firm, account.firm
46
48
  assert_kind_of MyApplication::Billing::Firm, account.qualified_billing_firm
47
49
  assert_kind_of MyApplication::Billing::Firm, account.unqualified_billing_firm
@@ -50,14 +52,14 @@ class ModulesTest < ActiveRecord::TestCase
50
52
  end
51
53
 
52
54
  def test_find_account_and_include_company
53
- account = MyApplication::Billing::Account.all.merge!(:includes => :firm).find(1)
55
+ account = MyApplication::Billing::Account.all.merge!(includes: :firm).find(1)
54
56
  assert_kind_of MyApplication::Business::Firm, account.firm
55
57
  end
56
58
 
57
59
  def test_table_name
58
- assert_equal 'accounts', MyApplication::Billing::Account.table_name, 'table_name for ActiveRecord model in module'
59
- assert_equal 'companies', MyApplication::Business::Client.table_name, 'table_name for ActiveRecord model subclass'
60
- assert_equal 'company_contacts', MyApplication::Business::Client::Contact.table_name, 'table_name for ActiveRecord model enclosed by another ActiveRecord model'
60
+ assert_equal "accounts", MyApplication::Billing::Account.table_name, "table_name for ActiveRecord model in module"
61
+ assert_equal "companies", MyApplication::Business::Client.table_name, "table_name for ActiveRecord model subclass"
62
+ assert_equal "company_contacts", MyApplication::Business::Client::Contact.table_name, "table_name for ActiveRecord model enclosed by another ActiveRecord model"
61
63
  end
62
64
 
63
65
  def test_assign_ids
@@ -73,8 +75,8 @@ class ModulesTest < ActiveRecord::TestCase
73
75
  clients = []
74
76
 
75
77
  assert_nothing_raised do
76
- clients << MyApplication::Business::Client.references(:accounts).merge!(:includes => {:firm => :account}, :where => 'accounts.id IS NOT NULL').find(3)
77
- clients << MyApplication::Business::Client.includes(:firm => :account).find(3)
78
+ clients << MyApplication::Business::Client.references(:accounts).merge!(includes: { firm: :account }, where: "accounts.id IS NOT NULL").find(3)
79
+ clients << MyApplication::Business::Client.includes(firm: :account).find(3)
78
80
  end
79
81
 
80
82
  clients.each do |client|
@@ -85,9 +87,9 @@ class ModulesTest < ActiveRecord::TestCase
85
87
  end
86
88
 
87
89
  def test_module_table_name_prefix
88
- assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_prefix'
89
- assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_prefix'
90
- assert_equal 'companies', MyApplication::Business::Prefixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed'
90
+ assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_prefix"
91
+ assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_prefix"
92
+ assert_equal "companies", MyApplication::Business::Prefixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed"
91
93
  end
92
94
 
93
95
  def test_module_table_name_prefix_with_global_prefix
@@ -101,21 +103,21 @@ class ModulesTest < ActiveRecord::TestCase
101
103
  MyApplication::Business::Prefixed::Nested::Company,
102
104
  MyApplication::Billing::Account ]
103
105
 
104
- ActiveRecord::Base.table_name_prefix = 'global_'
106
+ ActiveRecord::Base.table_name_prefix = "global_"
105
107
  classes.each(&:reset_table_name)
106
- assert_equal 'global_companies', MyApplication::Business::Company.table_name, 'inferred table_name for ActiveRecord model in module without table_name_prefix'
107
- assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_prefix'
108
- assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_prefix'
109
- assert_equal 'companies', MyApplication::Business::Prefixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed'
108
+ assert_equal "global_companies", MyApplication::Business::Company.table_name, "inferred table_name for ActiveRecord model in module without table_name_prefix"
109
+ assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_prefix"
110
+ assert_equal "prefixed_companies", MyApplication::Business::Prefixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_prefix"
111
+ assert_equal "companies", MyApplication::Business::Prefixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed"
110
112
  ensure
111
- ActiveRecord::Base.table_name_prefix = ''
113
+ ActiveRecord::Base.table_name_prefix = ""
112
114
  classes.each(&:reset_table_name)
113
115
  end
114
116
 
115
117
  def test_module_table_name_suffix
116
- assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_suffix'
117
- assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_suffix'
118
- assert_equal 'companies', MyApplication::Business::Suffixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed'
118
+ assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_suffix"
119
+ assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_suffix"
120
+ assert_equal "companies", MyApplication::Business::Suffixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed"
119
121
  end
120
122
 
121
123
  def test_module_table_name_suffix_with_global_suffix
@@ -129,14 +131,14 @@ class ModulesTest < ActiveRecord::TestCase
129
131
  MyApplication::Business::Suffixed::Nested::Company,
130
132
  MyApplication::Billing::Account ]
131
133
 
132
- ActiveRecord::Base.table_name_suffix = '_global'
134
+ ActiveRecord::Base.table_name_suffix = "_global"
133
135
  classes.each(&:reset_table_name)
134
- assert_equal 'companies_global', MyApplication::Business::Company.table_name, 'inferred table_name for ActiveRecord model in module without table_name_suffix'
135
- assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_suffix'
136
- assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_suffix'
137
- assert_equal 'companies', MyApplication::Business::Suffixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed'
136
+ assert_equal "companies_global", MyApplication::Business::Company.table_name, "inferred table_name for ActiveRecord model in module without table_name_suffix"
137
+ assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Company.table_name, "inferred table_name for ActiveRecord model in module with table_name_suffix"
138
+ assert_equal "companies_suffixed", MyApplication::Business::Suffixed::Nested::Company.table_name, "table_name for ActiveRecord model in nested module with a parent table_name_suffix"
139
+ assert_equal "companies", MyApplication::Business::Suffixed::Firm.table_name, "explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed"
138
140
  ensure
139
- ActiveRecord::Base.table_name_suffix = ''
141
+ ActiveRecord::Base.table_name_suffix = ""
140
142
  classes.each(&:reset_table_name)
141
143
  end
142
144
 
@@ -153,7 +155,7 @@ class ModulesTest < ActiveRecord::TestCase
153
155
  ActiveRecord::Base.store_full_sti_class = true
154
156
 
155
157
  collection = Shop::Collection.first
156
- assert !collection.products.empty?, "Collection should have products"
158
+ assert_not collection.products.empty?, "Collection should have products"
157
159
  assert_nothing_raised { collection.destroy }
158
160
  ensure
159
161
  ActiveRecord::Base.store_full_sti_class = old
@@ -164,7 +166,7 @@ class ModulesTest < ActiveRecord::TestCase
164
166
  ActiveRecord::Base.store_full_sti_class = true
165
167
 
166
168
  product = Shop::Product.first
167
- assert !product.variants.empty?, "Product should have variants"
169
+ assert_not product.variants.empty?, "Product should have variants"
168
170
  assert_nothing_raised { product.destroy }
169
171
  ensure
170
172
  ActiveRecord::Base.store_full_sti_class = old
@@ -0,0 +1,223 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "cases/migration/helper"
5
+
6
+ class MultiDbMigratorTest < ActiveRecord::TestCase
7
+ self.use_transactional_tests = false
8
+
9
+ # Use this class to sense if migrations have gone
10
+ # up or down.
11
+ class Sensor < ActiveRecord::Migration::Current
12
+ attr_reader :went_up, :went_down
13
+
14
+ def initialize(name = self.class.name, version = nil)
15
+ super
16
+ @went_up = false
17
+ @went_down = false
18
+ end
19
+
20
+ def up; @went_up = true; end
21
+ def down; @went_down = true; end
22
+ end
23
+
24
+ def setup
25
+ super
26
+ @connection_a = ActiveRecord::Base.connection
27
+ @connection_b = ARUnit2Model.connection
28
+
29
+ @connection_a.schema_migration.create_table
30
+ @connection_b.schema_migration.create_table
31
+
32
+ @connection_a.schema_migration.delete_all rescue nil
33
+ @connection_b.schema_migration.delete_all rescue nil
34
+
35
+ @path_a = MIGRATIONS_ROOT + "/valid"
36
+ @path_b = MIGRATIONS_ROOT + "/to_copy"
37
+
38
+ @schema_migration_a = @connection_a.schema_migration
39
+ @migrations_a = ActiveRecord::MigrationContext.new(@path_a, @schema_migration_a).migrations
40
+ @schema_migration_b = @connection_b.schema_migration
41
+ @migrations_b = ActiveRecord::MigrationContext.new(@path_b, @schema_migration_b).migrations
42
+
43
+ @migrations_a_list = [[1, "ValidPeopleHaveLastNames"], [2, "WeNeedReminders"], [3, "InnocentJointable"]]
44
+ @migrations_b_list = [[1, "PeopleHaveHobbies"], [2, "PeopleHaveDescriptions"]]
45
+
46
+ @verbose_was = ActiveRecord::Migration.verbose
47
+
48
+ ActiveRecord::Migration.message_count = 0
49
+ ActiveRecord::Migration.class_eval do
50
+ undef :puts
51
+ def puts(*)
52
+ ActiveRecord::Migration.message_count += 1
53
+ end
54
+ end
55
+ end
56
+
57
+ teardown do
58
+ @connection_a.schema_migration.delete_all rescue nil
59
+ @connection_b.schema_migration.delete_all rescue nil
60
+
61
+ ActiveRecord::Migration.verbose = @verbose_was
62
+ ActiveRecord::Migration.class_eval do
63
+ undef :puts
64
+ def puts(*)
65
+ super
66
+ end
67
+ end
68
+ end
69
+
70
+ def test_schema_migration_class_names
71
+ assert_equal "ActiveRecord::SchemaMigration", @schema_migration_a.name
72
+ assert_equal "ARUnit2Model::SchemaMigration", @schema_migration_b.name
73
+ end
74
+
75
+ def test_finds_migrations
76
+ @migrations_a_list.each_with_index do |pair, i|
77
+ assert_equal @migrations_a[i].version, pair.first
78
+ assert_equal @migrations_a[i].name, pair.last
79
+ end
80
+
81
+ @migrations_b_list.each_with_index do |pair, i|
82
+ assert_equal @migrations_b[i].version, pair.first
83
+ assert_equal @migrations_b[i].name, pair.last
84
+ end
85
+ end
86
+
87
+ def test_migrations_status
88
+ @schema_migration_a.create(version: 2)
89
+ @schema_migration_a.create(version: 10)
90
+
91
+ assert_equal [
92
+ ["down", "001", "Valid people have last names"],
93
+ ["up", "002", "We need reminders"],
94
+ ["down", "003", "Innocent jointable"],
95
+ ["up", "010", "********** NO FILE **********"],
96
+ ], ActiveRecord::MigrationContext.new(@path_a, @schema_migration_a).migrations_status
97
+
98
+ @schema_migration_b.create(version: 4)
99
+
100
+ assert_equal [
101
+ ["down", "001", "People have hobbies"],
102
+ ["down", "002", "People have descriptions"],
103
+ ["up", "004", "********** NO FILE **********"]
104
+ ], ActiveRecord::MigrationContext.new(@path_b, @schema_migration_b).migrations_status
105
+ end
106
+
107
+ def test_get_all_versions
108
+ _, migrator_a = migrator_class(3)
109
+ migrator_a = migrator_a.new(@path_a, @schema_migration_a)
110
+
111
+ migrator_a.migrate
112
+ assert_equal([1, 2, 3], migrator_a.get_all_versions)
113
+
114
+ migrator_a.rollback
115
+ assert_equal([1, 2], migrator_a.get_all_versions)
116
+
117
+ migrator_a.rollback
118
+ assert_equal([1], migrator_a.get_all_versions)
119
+
120
+ migrator_a.rollback
121
+ assert_equal([], migrator_a.get_all_versions)
122
+
123
+ _, migrator_b = migrator_class(2)
124
+ migrator_b = migrator_b.new(@path_b, @schema_migration_b)
125
+
126
+ migrator_b.migrate
127
+ assert_equal([1, 2], migrator_b.get_all_versions)
128
+
129
+ migrator_b.rollback
130
+ assert_equal([1], migrator_b.get_all_versions)
131
+
132
+ migrator_b.rollback
133
+ assert_equal([], migrator_b.get_all_versions)
134
+ end
135
+
136
+ def test_finds_pending_migrations
137
+ @schema_migration_a.create!(version: "1")
138
+ migration_list_a = [ActiveRecord::Migration.new("foo", 1), ActiveRecord::Migration.new("bar", 3)]
139
+ migrations_a = ActiveRecord::Migrator.new(:up, migration_list_a, @schema_migration_a).pending_migrations
140
+
141
+ assert_equal 1, migrations_a.size
142
+ assert_equal migration_list_a.last, migrations_a.first
143
+
144
+ @schema_migration_b.create!(version: "1")
145
+ migration_list_b = [ActiveRecord::Migration.new("foo", 1), ActiveRecord::Migration.new("bar", 3)]
146
+ migrations_b = ActiveRecord::Migrator.new(:up, migration_list_b, @schema_migration_b).pending_migrations
147
+
148
+ assert_equal 1, migrations_b.size
149
+ assert_equal migration_list_b.last, migrations_b.first
150
+ end
151
+
152
+ def test_migrator_db_has_no_schema_migrations_table
153
+ _, migrator = migrator_class(3)
154
+ migrator = migrator.new(@path_a, @schema_migration_a)
155
+
156
+ @schema_migration_a.drop_table
157
+ assert_not @connection_a.table_exists?("schema_migrations")
158
+ migrator.migrate(1)
159
+ assert @connection_a.table_exists?("schema_migrations")
160
+
161
+ _, migrator = migrator_class(3)
162
+ migrator = migrator.new(@path_b, @schema_migration_b)
163
+
164
+ @schema_migration_b.drop_table
165
+ assert_not @connection_b.table_exists?("schema_migrations")
166
+ migrator.migrate(1)
167
+ assert @connection_b.table_exists?("schema_migrations")
168
+ end
169
+
170
+ def test_migrator_forward
171
+ _, migrator = migrator_class(3)
172
+ migrator = migrator.new(@path_a, @schema_migration_a)
173
+ migrator.migrate(1)
174
+ assert_equal(1, migrator.current_version)
175
+
176
+ migrator.forward(2)
177
+ assert_equal(3, migrator.current_version)
178
+
179
+ migrator.forward
180
+ assert_equal(3, migrator.current_version)
181
+
182
+ _, migrator_b = migrator_class(3)
183
+ migrator_b = migrator_b.new(@path_b, @schema_migration_b)
184
+ migrator_b.migrate(1)
185
+ assert_equal(1, migrator_b.current_version)
186
+
187
+ migrator_b.forward(2)
188
+ assert_equal(3, migrator_b.current_version)
189
+
190
+ migrator_b.forward
191
+ assert_equal(3, migrator_b.current_version)
192
+ end
193
+
194
+ private
195
+ def m(name, version)
196
+ x = Sensor.new name, version
197
+ x.extend(Module.new {
198
+ define_method(:up) { yield(:up, x); super() }
199
+ define_method(:down) { yield(:down, x); super() }
200
+ }) if block_given?
201
+ end
202
+
203
+ def sensors(count)
204
+ calls = []
205
+ migrations = count.times.map { |i|
206
+ m(nil, i + 1) { |c, migration|
207
+ calls << [c, migration.version]
208
+ }
209
+ }
210
+ [calls, migrations]
211
+ end
212
+
213
+ def migrator_class(count)
214
+ calls, migrations = sensors(count)
215
+
216
+ migrator = Class.new(ActiveRecord::MigrationContext) {
217
+ define_method(:migrations) { |*|
218
+ migrations
219
+ }
220
+ }
221
+ [calls, migrator]
222
+ end
223
+ end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/topic'
3
- require 'models/customer'
4
+ require "models/topic"
5
+ require "models/customer"
4
6
 
5
7
  class MultiParameterAttributeTest < ActiveRecord::TestCase
6
8
  fixtures :topics
@@ -11,15 +13,13 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
11
13
  topic.attributes = attributes
12
14
  # note that extra #to_date call allows test to pass for Oracle, which
13
15
  # treats dates/times the same
14
- assert_date_from_db Date.new(2004, 6, 24), topic.last_read.to_date
16
+ assert_equal Date.new(2004, 6, 24), topic.last_read.to_date
15
17
  end
16
18
 
17
19
  def test_multiparameter_attributes_on_date_with_empty_year
18
20
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "24" }
19
21
  topic = Topic.find(1)
20
22
  topic.attributes = attributes
21
- # note that extra #to_date call allows test to pass for Oracle, which
22
- # treats dates/times the same
23
23
  assert_nil topic.last_read
24
24
  end
25
25
 
@@ -27,8 +27,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
27
27
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "24" }
28
28
  topic = Topic.find(1)
29
29
  topic.attributes = attributes
30
- # note that extra #to_date call allows test to pass for Oracle, which
31
- # treats dates/times the same
32
30
  assert_nil topic.last_read
33
31
  end
34
32
 
@@ -36,8 +34,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
36
34
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
37
35
  topic = Topic.find(1)
38
36
  topic.attributes = attributes
39
- # note that extra #to_date call allows test to pass for Oracle, which
40
- # treats dates/times the same
41
37
  assert_nil topic.last_read
42
38
  end
43
39
 
@@ -45,8 +41,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
45
41
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "" }
46
42
  topic = Topic.find(1)
47
43
  topic.attributes = attributes
48
- # note that extra #to_date call allows test to pass for Oracle, which
49
- # treats dates/times the same
50
44
  assert_nil topic.last_read
51
45
  end
52
46
 
@@ -54,8 +48,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
54
48
  attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "" }
55
49
  topic = Topic.find(1)
56
50
  topic.attributes = attributes
57
- # note that extra #to_date call allows test to pass for Oracle, which
58
- # treats dates/times the same
59
51
  assert_nil topic.last_read
60
52
  end
61
53
 
@@ -63,8 +55,6 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
63
55
  attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "24" }
64
56
  topic = Topic.find(1)
65
57
  topic.attributes = attributes
66
- # note that extra #to_date call allows test to pass for Oracle, which
67
- # treats dates/times the same
68
58
  assert_nil topic.last_read
69
59
  end
70
60
 
@@ -237,7 +227,7 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
237
227
  topic = Topic.find(1)
238
228
  topic.attributes = attributes
239
229
  assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
240
- assert_equal false, topic.written_on.respond_to?(:time_zone)
230
+ assert_not_respond_to topic.written_on, :time_zone
241
231
  end
242
232
  end
243
233
 
@@ -252,7 +242,7 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
252
242
  topic = Topic.find(1)
253
243
  topic.attributes = attributes
254
244
  assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
255
- assert_equal false, topic.written_on.respond_to?(:time_zone)
245
+ assert_not_respond_to topic.written_on, :time_zone
256
246
  end
257
247
  ensure
258
248
  Topic.skip_time_zone_conversion_for_attributes = []
@@ -271,11 +261,24 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
271
261
  topic = Topic.find(1)
272
262
  topic.attributes = attributes
273
263
  assert_equal Time.zone.local(2000, 1, 1, 16, 24, 0), topic.bonus_time
274
- assert_not topic.bonus_time.utc?
264
+ assert_not_predicate topic.bonus_time, :utc?
265
+
266
+ attributes = {
267
+ "written_on(1i)" => "2000", "written_on(2i)" => "", "written_on(3i)" => "",
268
+ "written_on(4i)" => "", "written_on(5i)" => ""
269
+ }
270
+ topic.attributes = attributes
271
+ assert_nil topic.written_on
275
272
  end
276
273
  ensure
277
274
  Topic.reset_column_information
278
275
  end
276
+
277
+ def test_multiparameter_attributes_setting_time_attribute
278
+ topic = Topic.new("bonus_time(4i)" => "01", "bonus_time(5i)" => "05")
279
+ assert_equal 1, topic.bonus_time.hour
280
+ assert_equal 5, topic.bonus_time.min
281
+ end
279
282
  end
280
283
 
281
284
  def test_multiparameter_attributes_on_time_with_empty_seconds
@@ -290,16 +293,15 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
290
293
  end
291
294
  end
292
295
 
293
- unless current_adapter? :OracleAdapter
294
- def test_multiparameter_attributes_setting_time_attribute
295
- topic = Topic.new( "bonus_time(4i)"=> "01", "bonus_time(5i)" => "05" )
296
- assert_equal 1, topic.bonus_time.hour
297
- assert_equal 5, topic.bonus_time.min
298
- end
296
+ def test_multiparameter_attributes_setting_date_attribute
297
+ topic = Topic.new("written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11")
298
+ assert_equal 1952, topic.written_on.year
299
+ assert_equal 3, topic.written_on.month
300
+ assert_equal 11, topic.written_on.day
299
301
  end
300
302
 
301
- def test_multiparameter_attributes_setting_date_attribute
302
- topic = Topic.new( "written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11" )
303
+ def test_create_with_multiparameter_attributes_setting_date_attribute
304
+ topic = Topic.create_with("written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11").new
303
305
  assert_equal 1952, topic.written_on.year
304
306
  assert_equal 3, topic.written_on.month
305
307
  assert_equal 11, topic.written_on.day
@@ -307,11 +309,25 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
307
309
 
308
310
  def test_multiparameter_attributes_setting_date_and_time_attribute
309
311
  topic = Topic.new(
310
- "written_on(1i)" => "1952",
311
- "written_on(2i)" => "3",
312
- "written_on(3i)" => "11",
313
- "written_on(4i)" => "13",
314
- "written_on(5i)" => "55")
312
+ "written_on(1i)" => "1952",
313
+ "written_on(2i)" => "3",
314
+ "written_on(3i)" => "11",
315
+ "written_on(4i)" => "13",
316
+ "written_on(5i)" => "55")
317
+ assert_equal 1952, topic.written_on.year
318
+ assert_equal 3, topic.written_on.month
319
+ assert_equal 11, topic.written_on.day
320
+ assert_equal 13, topic.written_on.hour
321
+ assert_equal 55, topic.written_on.min
322
+ end
323
+
324
+ def test_create_with_multiparameter_attributes_setting_date_and_time_attribute
325
+ topic = Topic.create_with(
326
+ "written_on(1i)" => "1952",
327
+ "written_on(2i)" => "3",
328
+ "written_on(3i)" => "11",
329
+ "written_on(4i)" => "13",
330
+ "written_on(5i)" => "55").new
315
331
  assert_equal 1952, topic.written_on.year
316
332
  assert_equal 3, topic.written_on.month
317
333
  assert_equal 11, topic.written_on.day
@@ -320,8 +336,8 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
320
336
  end
321
337
 
322
338
  def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
323
- assert_raise( ActiveRecord::MultiparameterAssignmentErrors ) do
324
- Topic.new( "written_on(4i)" => "13", "written_on(5i)" => "55" )
339
+ assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
340
+ Topic.new("written_on(4i)" => "13", "written_on(5i)" => "55")
325
341
  end
326
342
  end
327
343
 
@@ -369,4 +385,15 @@ class MultiParameterAttributeTest < ActiveRecord::TestCase
369
385
 
370
386
  assert_equal("address", ex.errors[0].attribute)
371
387
  end
388
+
389
+ def test_multiparameter_assigned_attributes_did_not_come_from_user
390
+ topic = Topic.new(
391
+ "written_on(1i)" => "1952",
392
+ "written_on(2i)" => "3",
393
+ "written_on(3i)" => "11",
394
+ "written_on(4i)" => "13",
395
+ "written_on(5i)" => "55",
396
+ )
397
+ assert_not_predicate topic, :written_on_came_from_user?
398
+ end
372
399
  end