ibm_db 5.2.0-x86-mingw32 → 5.4.0-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 (625) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/README +1 -1
  5. data/debug.log +1 -0
  6. data/ext/Makefile +28 -24
  7. data/ext/ibm_db.c +66 -65
  8. data/ext/ibm_db.o +0 -0
  9. data/ext/ibm_db.so +0 -0
  10. data/ext/mkmf.log +26 -24
  11. data/ext/ruby_ibm_db_cli.c +1 -0
  12. data/ext/ruby_ibm_db_cli.o +0 -0
  13. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1520 -1282
  14. data/lib/ibm_db.so +1 -0
  15. data/lib/mswin32/ibm_db.rb +3 -1
  16. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  17. data/lib/mswin32/rb3x/i386/ruby31/ibm_db.so +0 -0
  18. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  19. data/test/activejob/destroy_association_async_test.rb +305 -0
  20. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  21. data/test/activejob/helper.rb +15 -0
  22. data/test/assets/schema_dump_5_1.yml +345 -0
  23. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  24. data/test/cases/adapter_test.rb +432 -218
  25. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  26. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  27. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  28. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  29. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  30. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  31. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  32. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  33. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  34. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  35. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  36. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  37. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  38. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  39. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  40. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  41. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  42. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  43. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  44. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  45. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  46. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  47. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  48. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  49. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  50. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  51. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  52. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  53. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  54. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  55. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  56. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  57. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  58. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  59. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  60. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  61. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  62. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  63. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  64. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  65. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  66. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  67. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  68. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  69. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  70. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  71. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  72. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  73. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  74. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  75. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  76. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  77. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  78. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  79. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  80. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  81. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  82. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  83. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  84. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  85. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  86. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  87. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  88. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  89. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  90. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  91. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  92. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  93. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  94. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  95. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  96. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  97. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  98. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  99. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  100. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  101. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  102. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  103. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  104. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  105. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  106. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  107. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  108. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  109. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  110. data/test/cases/aggregations_test.rb +14 -12
  111. data/test/cases/annotate_test.rb +46 -0
  112. data/test/cases/ar_schema_test.rb +153 -86
  113. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  114. data/test/cases/arel/attributes/math_test.rb +83 -0
  115. data/test/cases/arel/attributes_test.rb +27 -0
  116. data/test/cases/arel/collectors/bind_test.rb +40 -0
  117. data/test/cases/arel/collectors/composite_test.rb +47 -0
  118. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  119. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  120. data/test/cases/arel/crud_test.rb +65 -0
  121. data/test/cases/arel/delete_manager_test.rb +53 -0
  122. data/test/cases/arel/factory_methods_test.rb +46 -0
  123. data/test/cases/arel/helper.rb +45 -0
  124. data/test/cases/arel/insert_manager_test.rb +241 -0
  125. data/test/cases/arel/nodes/and_test.rb +30 -0
  126. data/test/cases/arel/nodes/as_test.rb +36 -0
  127. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  128. data/test/cases/arel/nodes/bin_test.rb +35 -0
  129. data/test/cases/arel/nodes/binary_test.rb +29 -0
  130. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  131. data/test/cases/arel/nodes/case_test.rb +96 -0
  132. data/test/cases/arel/nodes/casted_test.rb +18 -0
  133. data/test/cases/arel/nodes/comment_test.rb +22 -0
  134. data/test/cases/arel/nodes/count_test.rb +35 -0
  135. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  136. data/test/cases/arel/nodes/descending_test.rb +46 -0
  137. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  138. data/test/cases/arel/nodes/equality_test.rb +62 -0
  139. data/test/cases/arel/nodes/extract_test.rb +43 -0
  140. data/test/cases/arel/nodes/false_test.rb +21 -0
  141. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  142. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  143. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  144. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  145. data/test/cases/arel/nodes/node_test.rb +22 -0
  146. data/test/cases/arel/nodes/not_test.rb +31 -0
  147. data/test/cases/arel/nodes/or_test.rb +36 -0
  148. data/test/cases/arel/nodes/over_test.rb +69 -0
  149. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  150. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  151. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  152. data/test/cases/arel/nodes/sum_test.rb +35 -0
  153. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  154. data/test/cases/arel/nodes/true_test.rb +21 -0
  155. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  156. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  157. data/test/cases/arel/nodes/window_test.rb +81 -0
  158. data/test/cases/arel/nodes_test.rb +34 -0
  159. data/test/cases/arel/select_manager_test.rb +1238 -0
  160. data/test/cases/arel/support/fake_record.rb +135 -0
  161. data/test/cases/arel/table_test.rb +216 -0
  162. data/test/cases/arel/update_manager_test.rb +126 -0
  163. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  164. data/test/cases/arel/visitors/dot_test.rb +90 -0
  165. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  166. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  167. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  168. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  169. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  170. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  171. data/test/cases/associations/callbacks_test.rb +56 -38
  172. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  173. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  174. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  175. data/test/cases/associations/eager_singularization_test.rb +21 -21
  176. data/test/cases/associations/eager_test.rb +559 -415
  177. data/test/cases/associations/extension_test.rb +18 -12
  178. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  179. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  180. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  181. data/test/cases/associations/has_one_associations_test.rb +294 -129
  182. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  183. data/test/cases/associations/inner_join_association_test.rb +114 -38
  184. data/test/cases/associations/inverse_associations_test.rb +606 -398
  185. data/test/cases/associations/join_model_test.rb +158 -148
  186. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  187. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  188. data/test/cases/associations/required_test.rb +35 -10
  189. data/test/cases/associations_test.rb +241 -110
  190. data/test/cases/attribute_methods/read_test.rb +11 -11
  191. data/test/cases/attribute_methods_test.rb +413 -298
  192. data/test/cases/attributes_test.rb +145 -27
  193. data/test/cases/autosave_association_test.rb +681 -436
  194. data/test/cases/base_prevent_writes_test.rb +229 -0
  195. data/test/cases/base_test.rb +599 -542
  196. data/test/cases/batches_test.rb +288 -82
  197. data/test/cases/binary_test.rb +26 -31
  198. data/test/cases/bind_parameter_test.rb +194 -21
  199. data/test/cases/boolean_test.rb +52 -0
  200. data/test/cases/cache_key_test.rb +110 -5
  201. data/test/cases/calculations_test.rb +740 -177
  202. data/test/cases/callbacks_test.rb +74 -207
  203. data/test/cases/clone_test.rb +15 -10
  204. data/test/cases/coders/json_test.rb +2 -0
  205. data/test/cases/coders/yaml_column_test.rb +16 -13
  206. data/test/cases/collection_cache_key_test.rb +177 -20
  207. data/test/cases/column_alias_test.rb +9 -7
  208. data/test/cases/column_definition_test.rb +10 -68
  209. data/test/cases/comment_test.rb +166 -107
  210. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  211. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  212. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  213. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  214. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  215. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  216. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  217. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  218. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  219. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  220. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  221. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  222. data/test/cases/connection_management_test.rb +13 -11
  223. data/test/cases/connection_pool_test.rb +316 -83
  224. data/test/cases/core_test.rb +82 -58
  225. data/test/cases/counter_cache_test.rb +204 -50
  226. data/test/cases/custom_locking_test.rb +5 -3
  227. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  228. data/test/cases/database_configurations/resolver_test.rb +150 -0
  229. data/test/cases/database_configurations_test.rb +145 -0
  230. data/test/cases/database_selector_test.rb +296 -0
  231. data/test/cases/database_statements_test.rb +18 -16
  232. data/test/cases/date_test.rb +8 -16
  233. data/test/cases/date_time_precision_test.rb +100 -78
  234. data/test/cases/date_time_test.rb +23 -8
  235. data/test/cases/defaults_test.rb +106 -71
  236. data/test/cases/delegated_type_test.rb +57 -0
  237. data/test/cases/dirty_test.rb +419 -223
  238. data/test/cases/disconnected_test.rb +6 -6
  239. data/test/cases/dup_test.rb +54 -27
  240. data/test/cases/enum_test.rb +461 -82
  241. data/test/cases/errors_test.rb +7 -7
  242. data/test/cases/explain_subscriber_test.rb +17 -15
  243. data/test/cases/explain_test.rb +11 -19
  244. data/test/cases/filter_attributes_test.rb +153 -0
  245. data/test/cases/finder_respond_to_test.rb +14 -14
  246. data/test/cases/finder_test.rb +669 -287
  247. data/test/cases/fixture_set/file_test.rb +34 -38
  248. data/test/cases/fixtures_test.rb +833 -176
  249. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  250. data/test/cases/habtm_destroy_order_test.rb +25 -25
  251. data/test/cases/helper.rb +78 -49
  252. data/test/cases/hot_compatibility_test.rb +33 -32
  253. data/test/cases/i18n_test.rb +18 -17
  254. data/test/cases/inheritance_test.rb +180 -115
  255. data/test/cases/insert_all_test.rb +489 -0
  256. data/test/cases/instrumentation_test.rb +101 -0
  257. data/test/cases/integration_test.rb +119 -31
  258. data/test/cases/invalid_connection_test.rb +18 -16
  259. data/test/cases/invertible_migration_test.rb +183 -43
  260. data/test/cases/json_attribute_test.rb +35 -0
  261. data/test/cases/json_serialization_test.rb +57 -58
  262. data/test/cases/json_shared_test_cases.rb +290 -0
  263. data/test/cases/locking_test.rb +413 -119
  264. data/test/cases/log_subscriber_test.rb +68 -26
  265. data/test/cases/marshal_serialization_test.rb +39 -0
  266. data/test/cases/migration/change_schema_test.rb +118 -72
  267. data/test/cases/migration/change_table_test.rb +138 -30
  268. data/test/cases/migration/check_constraint_test.rb +162 -0
  269. data/test/cases/migration/column_attributes_test.rb +45 -35
  270. data/test/cases/migration/column_positioning_test.rb +18 -6
  271. data/test/cases/migration/columns_test.rb +93 -77
  272. data/test/cases/migration/command_recorder_test.rb +121 -34
  273. data/test/cases/migration/compatibility_test.rb +578 -23
  274. data/test/cases/migration/create_join_table_test.rb +35 -25
  275. data/test/cases/migration/foreign_key_test.rb +503 -284
  276. data/test/cases/migration/helper.rb +4 -3
  277. data/test/cases/migration/index_test.rb +119 -70
  278. data/test/cases/migration/logger_test.rb +9 -6
  279. data/test/cases/migration/pending_migrations_test.rb +88 -34
  280. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  281. data/test/cases/migration/references_index_test.rb +38 -19
  282. data/test/cases/migration/references_statements_test.rb +15 -14
  283. data/test/cases/migration/rename_table_test.rb +53 -30
  284. data/test/cases/migration_test.rb +637 -269
  285. data/test/cases/migrator_test.rb +191 -135
  286. data/test/cases/mixin_test.rb +7 -11
  287. data/test/cases/modules_test.rb +36 -34
  288. data/test/cases/multi_db_migrator_test.rb +223 -0
  289. data/test/cases/multiparameter_attributes_test.rb +60 -33
  290. data/test/cases/multiple_db_test.rb +16 -22
  291. data/test/cases/nested_attributes_test.rb +341 -320
  292. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  293. data/test/cases/null_relation_test.rb +84 -0
  294. data/test/cases/numeric_data_test.rb +93 -0
  295. data/test/cases/persistence_test.rb +361 -269
  296. data/test/cases/pooled_connections_test.rb +18 -26
  297. data/test/cases/prepared_statement_status_test.rb +48 -0
  298. data/test/cases/primary_keys_test.rb +210 -104
  299. data/test/cases/query_cache_test.rb +610 -141
  300. data/test/cases/quoting_test.rb +132 -31
  301. data/test/cases/readonly_test.rb +49 -48
  302. data/test/cases/reaper_test.rb +146 -32
  303. data/test/cases/reflection_test.rb +167 -156
  304. data/test/cases/relation/delegation_test.rb +49 -36
  305. data/test/cases/relation/delete_all_test.rb +117 -0
  306. data/test/cases/relation/merging_test.rb +319 -42
  307. data/test/cases/relation/mutation_test.rb +55 -93
  308. data/test/cases/relation/or_test.rb +129 -29
  309. data/test/cases/relation/predicate_builder_test.rb +21 -6
  310. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  311. data/test/cases/relation/select_test.rb +67 -0
  312. data/test/cases/relation/update_all_test.rb +317 -0
  313. data/test/cases/relation/where_chain_test.rb +68 -32
  314. data/test/cases/relation/where_clause_test.rb +136 -61
  315. data/test/cases/relation/where_test.rb +155 -48
  316. data/test/cases/relation_test.rb +266 -112
  317. data/test/cases/relations_test.rb +969 -744
  318. data/test/cases/reload_models_test.rb +13 -9
  319. data/test/cases/reserved_word_test.rb +141 -0
  320. data/test/cases/result_test.rb +68 -17
  321. data/test/cases/sanitize_test.rb +87 -71
  322. data/test/cases/schema_dumper_test.rb +221 -128
  323. data/test/cases/schema_loading_test.rb +3 -2
  324. data/test/cases/scoping/default_scoping_test.rb +185 -144
  325. data/test/cases/scoping/named_scoping_test.rb +177 -89
  326. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  327. data/test/cases/secure_token_test.rb +18 -3
  328. data/test/cases/serialization_test.rb +30 -28
  329. data/test/cases/serialized_attribute_test.rb +133 -42
  330. data/test/cases/signed_id_test.rb +168 -0
  331. data/test/cases/statement_cache_test.rb +41 -24
  332. data/test/cases/statement_invalid_test.rb +42 -0
  333. data/test/cases/store_test.rb +180 -55
  334. data/test/cases/strict_loading_test.rb +473 -0
  335. data/test/cases/suppressor_test.rb +26 -12
  336. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  337. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  338. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  339. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  340. data/test/cases/test_case.rb +51 -40
  341. data/test/cases/test_databases_test.rb +79 -0
  342. data/test/cases/test_fixtures_test.rb +79 -19
  343. data/test/cases/time_precision_test.rb +98 -76
  344. data/test/cases/timestamp_test.rb +102 -99
  345. data/test/cases/touch_later_test.rb +12 -10
  346. data/test/cases/transaction_callbacks_test.rb +344 -90
  347. data/test/cases/transaction_isolation_test.rb +12 -12
  348. data/test/cases/transactions_test.rb +612 -162
  349. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  350. data/test/cases/type/date_time_test.rb +4 -2
  351. data/test/cases/type/integer_test.rb +4 -2
  352. data/test/cases/type/string_test.rb +10 -8
  353. data/test/cases/type/time_test.rb +28 -0
  354. data/test/cases/type/type_map_test.rb +29 -28
  355. data/test/cases/type/unsigned_integer_test.rb +19 -0
  356. data/test/cases/type_test.rb +2 -0
  357. data/test/cases/types_test.rb +3 -1
  358. data/test/cases/unconnected_test.rb +14 -1
  359. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  360. data/test/cases/validations/absence_validation_test.rb +19 -17
  361. data/test/cases/validations/association_validation_test.rb +30 -28
  362. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  363. data/test/cases/validations/i18n_validation_test.rb +22 -21
  364. data/test/cases/validations/length_validation_test.rb +34 -33
  365. data/test/cases/validations/numericality_validation_test.rb +181 -0
  366. data/test/cases/validations/presence_validation_test.rb +21 -19
  367. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  368. data/test/cases/validations_repair_helper.rb +2 -0
  369. data/test/cases/validations_test.rb +61 -26
  370. data/test/cases/view_test.rb +122 -116
  371. data/test/cases/yaml_serialization_test.rb +79 -34
  372. data/test/config.example.yml +19 -19
  373. data/test/config.rb +3 -1
  374. data/test/config.yml +16 -6
  375. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  376. data/test/fixtures/author_addresses.yml +1 -8
  377. data/test/fixtures/authors.yml +1 -7
  378. data/test/fixtures/binaries.yml +4 -0
  379. data/test/fixtures/books.yml +9 -2
  380. data/test/fixtures/categories_posts.yml +3 -0
  381. data/test/fixtures/citations.yml +5 -0
  382. data/test/fixtures/comments.yml +7 -0
  383. data/test/fixtures/companies.yml +5 -0
  384. data/test/fixtures/computers.yml +2 -0
  385. data/test/fixtures/customers.yml +10 -1
  386. data/test/fixtures/developers.yml +1 -1
  387. data/test/fixtures/essays.yml +10 -0
  388. data/test/fixtures/faces.yml +3 -3
  389. data/test/fixtures/humans.yml +5 -0
  390. data/test/fixtures/interests.yml +7 -7
  391. data/test/fixtures/memberships.yml +7 -0
  392. data/test/fixtures/minimalistics.yml +3 -0
  393. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  394. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  395. data/test/fixtures/naked/yml/parrots.yml +1 -0
  396. data/test/fixtures/other_books.yml +26 -0
  397. data/test/fixtures/other_posts.yml +1 -0
  398. data/test/fixtures/parrots.yml +7 -1
  399. data/test/fixtures/pirates.yml +3 -0
  400. data/test/fixtures/posts.yml +11 -3
  401. data/test/fixtures/readers.yml +6 -0
  402. data/test/fixtures/reserved_words/values.yml +2 -2
  403. data/test/fixtures/sponsors.yml +3 -0
  404. data/test/fixtures/strict_zines.yml +2 -0
  405. data/test/fixtures/subscribers.yml +1 -1
  406. data/test/fixtures/tasks.yml +1 -1
  407. data/test/fixtures/warehouse-things.yml +3 -0
  408. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  409. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  410. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  411. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  412. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  413. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  414. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  415. data/test/migrations/rename/1_we_need_things.rb +2 -0
  416. data/test/migrations/rename/2_rename_things.rb +2 -0
  417. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  419. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  420. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  421. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  422. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  423. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  424. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  425. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  426. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  427. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  428. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  429. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  430. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  431. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  432. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  433. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  434. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  435. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  436. data/test/models/account.rb +46 -0
  437. data/test/models/admin/account.rb +3 -1
  438. data/test/models/admin/randomly_named_c1.rb +2 -0
  439. data/test/models/admin/user.rb +16 -8
  440. data/test/models/admin.rb +4 -2
  441. data/test/models/aircraft.rb +3 -1
  442. data/test/models/arunit2_model.rb +2 -0
  443. data/test/models/author.rb +153 -102
  444. data/test/models/auto_id.rb +2 -0
  445. data/test/models/autoloadable/extra_firm.rb +2 -0
  446. data/test/models/binary.rb +3 -1
  447. data/test/models/binary_field.rb +6 -0
  448. data/test/models/bird.rb +13 -1
  449. data/test/models/book.rb +14 -4
  450. data/test/models/book_destroy_async.rb +24 -0
  451. data/test/models/boolean.rb +5 -0
  452. data/test/models/bulb.rb +13 -4
  453. data/test/models/cake_designer.rb +2 -0
  454. data/test/models/car.rb +17 -10
  455. data/test/models/carrier.rb +2 -0
  456. data/test/models/cart.rb +5 -0
  457. data/test/models/cat.rb +2 -0
  458. data/test/models/categorization.rb +8 -6
  459. data/test/models/category.rb +28 -16
  460. data/test/models/chef.rb +2 -0
  461. data/test/models/citation.rb +5 -1
  462. data/test/models/club.rb +13 -10
  463. data/test/models/college.rb +4 -2
  464. data/test/models/column.rb +2 -0
  465. data/test/models/column_name.rb +2 -0
  466. data/test/models/comment.rb +32 -10
  467. data/test/models/company.rb +102 -106
  468. data/test/models/company_in_module.rb +27 -26
  469. data/test/models/computer.rb +3 -1
  470. data/test/models/contact.rb +15 -13
  471. data/test/models/content.rb +5 -3
  472. data/test/models/contract.rb +21 -3
  473. data/test/models/country.rb +2 -4
  474. data/test/models/course.rb +3 -1
  475. data/test/models/customer.rb +10 -8
  476. data/test/models/customer_carrier.rb +2 -0
  477. data/test/models/dashboard.rb +2 -0
  478. data/test/models/default.rb +2 -0
  479. data/test/models/department.rb +2 -0
  480. data/test/models/destroy_async_parent.rb +15 -0
  481. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  482. data/test/models/developer.rb +152 -85
  483. data/test/models/dl_keyed_belongs_to.rb +13 -0
  484. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  485. data/test/models/dl_keyed_has_many.rb +5 -0
  486. data/test/models/dl_keyed_has_many_through.rb +5 -0
  487. data/test/models/dl_keyed_has_one.rb +5 -0
  488. data/test/models/dl_keyed_join.rb +10 -0
  489. data/test/models/dog.rb +2 -0
  490. data/test/models/dog_lover.rb +2 -0
  491. data/test/models/doubloon.rb +3 -1
  492. data/test/models/drink_designer.rb +17 -0
  493. data/test/models/edge.rb +4 -2
  494. data/test/models/electron.rb +2 -0
  495. data/test/models/engine.rb +3 -2
  496. data/test/models/entrant.rb +2 -0
  497. data/test/models/entry.rb +5 -0
  498. data/test/models/essay.rb +6 -3
  499. data/test/models/essay_destroy_async.rb +12 -0
  500. data/test/models/event.rb +3 -1
  501. data/test/models/eye.rb +5 -3
  502. data/test/models/face.rb +14 -6
  503. data/test/models/family.rb +6 -0
  504. data/test/models/family_tree.rb +6 -0
  505. data/test/models/friendship.rb +5 -3
  506. data/test/models/frog.rb +8 -0
  507. data/test/models/guid.rb +3 -1
  508. data/test/models/guitar.rb +2 -0
  509. data/test/models/hotel.rb +5 -3
  510. data/test/models/human.rb +39 -0
  511. data/test/models/image.rb +3 -1
  512. data/test/models/interest.rb +14 -3
  513. data/test/models/invoice.rb +4 -2
  514. data/test/models/item.rb +3 -1
  515. data/test/models/job.rb +5 -3
  516. data/test/models/joke.rb +4 -2
  517. data/test/models/keyboard.rb +3 -1
  518. data/test/models/legacy_thing.rb +2 -0
  519. data/test/models/lesson.rb +2 -0
  520. data/test/models/line_item.rb +3 -1
  521. data/test/models/liquid.rb +2 -0
  522. data/test/models/matey.rb +3 -1
  523. data/test/models/measurement.rb +4 -0
  524. data/test/models/member.rb +23 -20
  525. data/test/models/member_detail.rb +3 -0
  526. data/test/models/member_type.rb +2 -0
  527. data/test/models/membership.rb +4 -1
  528. data/test/models/mentor.rb +3 -1
  529. data/test/models/message.rb +5 -0
  530. data/test/models/minimalistic.rb +2 -0
  531. data/test/models/minivan.rb +3 -2
  532. data/test/models/mixed_case_monkey.rb +3 -1
  533. data/test/models/molecule.rb +2 -0
  534. data/test/models/mouse.rb +6 -0
  535. data/test/models/movie.rb +2 -0
  536. data/test/models/node.rb +4 -2
  537. data/test/models/non_primary_key.rb +2 -0
  538. data/test/models/notification.rb +2 -0
  539. data/test/models/numeric_data.rb +12 -0
  540. data/test/models/order.rb +4 -2
  541. data/test/models/organization.rb +9 -7
  542. data/test/models/other_dog.rb +3 -1
  543. data/test/models/owner.rb +6 -4
  544. data/test/models/parrot.rb +12 -4
  545. data/test/models/person.rb +59 -54
  546. data/test/models/personal_legacy_thing.rb +3 -1
  547. data/test/models/pet.rb +4 -2
  548. data/test/models/pet_treasure.rb +2 -0
  549. data/test/models/pirate.rb +67 -43
  550. data/test/models/possession.rb +3 -1
  551. data/test/models/post.rb +184 -86
  552. data/test/models/price_estimate.rb +11 -1
  553. data/test/models/professor.rb +3 -1
  554. data/test/models/project.rb +14 -12
  555. data/test/models/publisher/article.rb +2 -0
  556. data/test/models/publisher/magazine.rb +2 -0
  557. data/test/models/publisher.rb +2 -0
  558. data/test/models/randomly_named_c1.rb +2 -0
  559. data/test/models/rating.rb +5 -1
  560. data/test/models/reader.rb +7 -5
  561. data/test/models/recipe.rb +2 -0
  562. data/test/models/record.rb +2 -0
  563. data/test/models/reference.rb +6 -3
  564. data/test/models/reply.rb +39 -21
  565. data/test/models/room.rb +6 -0
  566. data/test/models/section.rb +6 -0
  567. data/test/models/seminar.rb +6 -0
  568. data/test/models/session.rb +6 -0
  569. data/test/models/ship.rb +12 -9
  570. data/test/models/ship_part.rb +5 -3
  571. data/test/models/shop.rb +4 -2
  572. data/test/models/shop_account.rb +2 -0
  573. data/test/models/speedometer.rb +2 -0
  574. data/test/models/sponsor.rb +8 -5
  575. data/test/models/squeak.rb +6 -0
  576. data/test/models/strict_zine.rb +7 -0
  577. data/test/models/string_key_object.rb +2 -0
  578. data/test/models/student.rb +2 -0
  579. data/test/models/subscriber.rb +4 -2
  580. data/test/models/subscription.rb +5 -1
  581. data/test/models/tag.rb +6 -3
  582. data/test/models/tagging.rb +13 -6
  583. data/test/models/task.rb +2 -0
  584. data/test/models/topic.rb +54 -19
  585. data/test/models/toy.rb +4 -0
  586. data/test/models/traffic_light.rb +2 -0
  587. data/test/models/treasure.rb +5 -3
  588. data/test/models/treaty.rb +2 -4
  589. data/test/models/tree.rb +2 -0
  590. data/test/models/tuning_peg.rb +2 -0
  591. data/test/models/tyre.rb +2 -0
  592. data/test/models/user.rb +12 -4
  593. data/test/models/uuid_child.rb +2 -0
  594. data/test/models/uuid_item.rb +2 -0
  595. data/test/models/uuid_parent.rb +2 -0
  596. data/test/models/vegetables.rb +12 -3
  597. data/test/models/vertex.rb +6 -4
  598. data/test/models/warehouse_thing.rb +2 -0
  599. data/test/models/wheel.rb +3 -1
  600. data/test/models/without_table.rb +3 -1
  601. data/test/models/zine.rb +3 -1
  602. data/test/schema/mysql2_specific_schema.rb +49 -35
  603. data/test/schema/oracle_specific_schema.rb +13 -15
  604. data/test/schema/postgresql_specific_schema.rb +51 -40
  605. data/test/schema/schema.rb +334 -154
  606. data/test/schema/sqlite_specific_schema.rb +9 -16
  607. data/test/support/config.rb +26 -26
  608. data/test/support/connection.rb +14 -8
  609. data/test/support/connection_helper.rb +3 -1
  610. data/test/support/ddl_helper.rb +2 -0
  611. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  617. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  618. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  619. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  620. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  621. data/test/support/schema_dumping_helper.rb +2 -0
  622. data/test/support/stubs/strong_parameters.rb +40 -0
  623. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  624. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  625. metadata +192 -14
@@ -1,304 +1,534 @@
1
- require 'cases/helper'
2
- require 'active_record/tasks/database_tasks'
1
+ # frozen_string_literal: true
3
2
 
4
- if current_adapter?(:PostgreSQLAdapter)
5
- module ActiveRecord
6
- class PostgreSQLDBCreateTest < ActiveRecord::TestCase
7
- def setup
8
- @connection = stub(:create_database => true)
9
- @configuration = {
10
- 'adapter' => 'postgresql',
11
- 'database' => 'my-app-db'
12
- }
13
-
14
- ActiveRecord::Base.stubs(:connection).returns(@connection)
15
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
16
-
17
- $stdout, @original_stdout = StringIO.new, $stdout
18
- $stderr, @original_stderr = StringIO.new, $stderr
19
- end
20
-
21
- def teardown
22
- $stdout, $stderr = @original_stdout, @original_stderr
23
- end
24
-
25
- def test_establishes_connection_to_postgresql_database
26
- ActiveRecord::Base.expects(:establish_connection).with(
27
- 'adapter' => 'postgresql',
28
- 'database' => 'postgres',
29
- 'schema_search_path' => 'public'
30
- )
31
-
32
- ActiveRecord::Tasks::DatabaseTasks.create @configuration
33
- end
34
-
35
- def test_creates_database_with_default_encoding
36
- @connection.expects(:create_database).
37
- with('my-app-db', @configuration.merge('encoding' => 'utf8'))
38
-
39
- ActiveRecord::Tasks::DatabaseTasks.create @configuration
40
- end
41
-
42
- def test_creates_database_with_given_encoding
43
- @connection.expects(:create_database).
44
- with('my-app-db', @configuration.merge('encoding' => 'latin'))
45
-
46
- ActiveRecord::Tasks::DatabaseTasks.create @configuration.
47
- merge('encoding' => 'latin')
48
- end
49
-
50
- def test_creates_database_with_given_collation_and_ctype
51
- @connection.expects(:create_database).
52
- with('my-app-db', @configuration.merge('encoding' => 'utf8', 'collation' => 'ja_JP.UTF8', 'ctype' => 'ja_JP.UTF8'))
53
-
54
- ActiveRecord::Tasks::DatabaseTasks.create @configuration.
55
- merge('collation' => 'ja_JP.UTF8', 'ctype' => 'ja_JP.UTF8')
56
- end
57
-
58
- def test_establishes_connection_to_new_database
59
- ActiveRecord::Base.expects(:establish_connection).with(@configuration)
60
-
61
- ActiveRecord::Tasks::DatabaseTasks.create @configuration
62
- end
63
-
64
- def test_db_create_with_error_prints_message
65
- ActiveRecord::Base.stubs(:establish_connection).raises(Exception)
66
-
67
- $stderr.stubs(:puts).returns(true)
68
- $stderr.expects(:puts).
69
- with("Couldn't create database for #{@configuration.inspect}")
70
-
71
- assert_raises(Exception) { ActiveRecord::Tasks::DatabaseTasks.create @configuration }
72
- end
73
-
74
- def test_when_database_created_successfully_outputs_info_to_stdout
75
- ActiveRecord::Tasks::DatabaseTasks.create @configuration
3
+ require "cases/helper"
4
+ require "active_record/tasks/database_tasks"
76
5
 
77
- assert_equal $stdout.string, "Created database 'my-app-db'\n"
78
- end
79
-
80
- def test_create_when_database_exists_outputs_info_to_stderr
81
- ActiveRecord::Base.connection.stubs(:create_database).raises(
82
- ActiveRecord::Tasks::DatabaseAlreadyExists
83
- )
84
-
85
- ActiveRecord::Tasks::DatabaseTasks.create @configuration
86
-
87
- assert_equal $stderr.string, "Database 'my-app-db' already exists\n"
88
- end
89
- end
6
+ if current_adapter?(:PostgreSQLAdapter)
7
+ module ActiveRecord
8
+ class PostgreSQLDBCreateTest < ActiveRecord::TestCase
9
+ def setup
10
+ @connection = Class.new { def create_database(*); end }.new
11
+ @configuration = {
12
+ "adapter" => "postgresql",
13
+ "database" => "my-app-db"
14
+ }
15
+ $stdout, @original_stdout = StringIO.new, $stdout
16
+ $stderr, @original_stderr = StringIO.new, $stderr
17
+ end
90
18
 
91
- class PostgreSQLDBDropTest < ActiveRecord::TestCase
92
- def setup
93
- @connection = stub(:drop_database => true)
94
- @configuration = {
95
- 'adapter' => 'postgresql',
96
- 'database' => 'my-app-db'
97
- }
19
+ def teardown
20
+ $stdout, $stderr = @original_stdout, @original_stderr
21
+ end
98
22
 
99
- ActiveRecord::Base.stubs(:connection).returns(@connection)
100
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
23
+ def test_establishes_connection_to_postgresql_database
24
+ db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new("default_env", "primary", @configuration)
25
+
26
+ ActiveRecord::Base.stub(:connection, @connection) do
27
+ assert_called_with(
28
+ ActiveRecord::Base,
29
+ :establish_connection,
30
+ [
31
+ [
32
+ adapter: "postgresql",
33
+ database: "postgres",
34
+ schema_search_path: "public"
35
+ ],
36
+ [db_config]
37
+ ]
38
+ ) do
39
+ ActiveRecord::Tasks::DatabaseTasks.create(db_config)
40
+ end
41
+ end
42
+ end
101
43
 
102
- $stdout, @original_stdout = StringIO.new, $stdout
103
- $stderr, @original_stderr = StringIO.new, $stderr
104
- end
44
+ def test_creates_database_with_default_encoding
45
+ with_stubbed_connection_establish_connection do
46
+ assert_called_with(
47
+ @connection,
48
+ :create_database,
49
+ ["my-app-db", @configuration.symbolize_keys.merge(encoding: "utf8")]
50
+ ) do
51
+ ActiveRecord::Tasks::DatabaseTasks.create @configuration
52
+ end
53
+ end
54
+ end
105
55
 
106
- def teardown
107
- $stdout, $stderr = @original_stdout, @original_stderr
108
- end
56
+ def test_creates_database_with_given_encoding
57
+ with_stubbed_connection_establish_connection do
58
+ assert_called_with(
59
+ @connection,
60
+ :create_database,
61
+ ["my-app-db", @configuration.symbolize_keys.merge(encoding: "latin")]
62
+ ) do
63
+ ActiveRecord::Tasks::DatabaseTasks.create @configuration.
64
+ merge("encoding" => "latin")
65
+ end
66
+ end
67
+ end
109
68
 
110
- def test_establishes_connection_to_postgresql_database
111
- ActiveRecord::Base.expects(:establish_connection).with(
112
- 'adapter' => 'postgresql',
113
- 'database' => 'postgres',
114
- 'schema_search_path' => 'public'
115
- )
69
+ def test_creates_database_with_given_collation_and_ctype
70
+ with_stubbed_connection_establish_connection do
71
+ assert_called_with(
72
+ @connection,
73
+ :create_database,
74
+ [
75
+ "my-app-db",
76
+ @configuration.symbolize_keys.merge(
77
+ encoding: "utf8",
78
+ collation: "ja_JP.UTF8",
79
+ ctype: "ja_JP.UTF8"
80
+ )
81
+ ]
82
+ ) do
83
+ ActiveRecord::Tasks::DatabaseTasks.create @configuration.
84
+ merge("collation" => "ja_JP.UTF8", "ctype" => "ja_JP.UTF8")
85
+ end
86
+ end
87
+ end
116
88
 
117
- ActiveRecord::Tasks::DatabaseTasks.drop @configuration
118
- end
89
+ def test_establishes_connection_to_new_database
90
+ db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new("default_env", "primary", @configuration)
91
+
92
+ ActiveRecord::Base.stub(:connection, @connection) do
93
+ assert_called_with(
94
+ ActiveRecord::Base,
95
+ :establish_connection,
96
+ [
97
+ [
98
+ adapter: "postgresql",
99
+ database: "postgres",
100
+ schema_search_path: "public"
101
+ ],
102
+ [db_config]
103
+ ]
104
+ ) do
105
+ ActiveRecord::Tasks::DatabaseTasks.create(db_config)
106
+ end
107
+ end
108
+ end
119
109
 
120
- def test_drops_database
121
- @connection.expects(:drop_database).with('my-app-db')
110
+ def test_db_create_with_error_prints_message
111
+ ActiveRecord::Base.stub(:connection, @connection) do
112
+ ActiveRecord::Base.stub(:establish_connection, -> * { raise Exception }) do
113
+ assert_raises(Exception) { ActiveRecord::Tasks::DatabaseTasks.create @configuration }
114
+ assert_match "Couldn't create '#{@configuration['database']}' database. Please check your configuration.", $stderr.string
115
+ end
116
+ end
117
+ end
122
118
 
123
- ActiveRecord::Tasks::DatabaseTasks.drop @configuration
124
- end
119
+ def test_when_database_created_successfully_outputs_info_to_stdout
120
+ with_stubbed_connection_establish_connection do
121
+ ActiveRecord::Tasks::DatabaseTasks.create @configuration
125
122
 
126
- def test_when_database_dropped_successfully_outputs_info_to_stdout
127
- ActiveRecord::Tasks::DatabaseTasks.drop @configuration
123
+ assert_equal "Created database 'my-app-db'\n", $stdout.string
124
+ end
125
+ end
128
126
 
129
- assert_equal $stdout.string, "Dropped database 'my-app-db'\n"
130
- end
131
- end
127
+ def test_create_when_database_exists_outputs_info_to_stderr
128
+ with_stubbed_connection_establish_connection do
129
+ ActiveRecord::Base.connection.stub(
130
+ :create_database,
131
+ proc { raise ActiveRecord::DatabaseAlreadyExists }
132
+ ) do
133
+ ActiveRecord::Tasks::DatabaseTasks.create @configuration
134
+
135
+ assert_equal "Database 'my-app-db' already exists\n", $stderr.string
136
+ end
137
+ end
138
+ end
132
139
 
133
- class PostgreSQLPurgeTest < ActiveRecord::TestCase
134
- def setup
135
- @connection = stub(:create_database => true, :drop_database => true)
136
- @configuration = {
137
- 'adapter' => 'postgresql',
138
- 'database' => 'my-app-db'
139
- }
140
-
141
- ActiveRecord::Base.stubs(:connection).returns(@connection)
142
- ActiveRecord::Base.stubs(:clear_active_connections!).returns(true)
143
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
144
- end
140
+ private
141
+ def with_stubbed_connection_establish_connection
142
+ ActiveRecord::Base.stub(:connection, @connection) do
143
+ ActiveRecord::Base.stub(:establish_connection, nil) do
144
+ yield
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ class PostgreSQLDBDropTest < ActiveRecord::TestCase
151
+ def setup
152
+ @connection = Class.new { def drop_database(*); end }.new
153
+ @configuration = {
154
+ "adapter" => "postgresql",
155
+ "database" => "my-app-db"
156
+ }
157
+ $stdout, @original_stdout = StringIO.new, $stdout
158
+ $stderr, @original_stderr = StringIO.new, $stderr
159
+ end
145
160
 
146
- def test_clears_active_connections
147
- ActiveRecord::Base.expects(:clear_active_connections!)
161
+ def teardown
162
+ $stdout, $stderr = @original_stdout, @original_stderr
163
+ end
148
164
 
149
- ActiveRecord::Tasks::DatabaseTasks.purge @configuration
150
- end
165
+ def test_establishes_connection_to_postgresql_database
166
+ ActiveRecord::Base.stub(:connection, @connection) do
167
+ assert_called_with(
168
+ ActiveRecord::Base,
169
+ :establish_connection,
170
+ [
171
+ adapter: "postgresql",
172
+ database: "postgres",
173
+ schema_search_path: "public"
174
+ ]
175
+ ) do
176
+ ActiveRecord::Tasks::DatabaseTasks.drop @configuration
177
+ end
178
+ end
179
+ end
151
180
 
152
- def test_establishes_connection_to_postgresql_database
153
- ActiveRecord::Base.expects(:establish_connection).with(
154
- 'adapter' => 'postgresql',
155
- 'database' => 'postgres',
156
- 'schema_search_path' => 'public'
157
- )
181
+ def test_drops_database
182
+ with_stubbed_connection_establish_connection do
183
+ assert_called_with(
184
+ @connection,
185
+ :drop_database,
186
+ ["my-app-db"]
187
+ ) do
188
+ ActiveRecord::Tasks::DatabaseTasks.drop @configuration
189
+ end
190
+ end
191
+ end
158
192
 
159
- ActiveRecord::Tasks::DatabaseTasks.purge @configuration
160
- end
193
+ def test_when_database_dropped_successfully_outputs_info_to_stdout
194
+ with_stubbed_connection_establish_connection do
195
+ ActiveRecord::Tasks::DatabaseTasks.drop @configuration
161
196
 
162
- def test_drops_database
163
- @connection.expects(:drop_database).with('my-app-db')
197
+ assert_equal "Dropped database 'my-app-db'\n", $stdout.string
198
+ end
199
+ end
164
200
 
165
- ActiveRecord::Tasks::DatabaseTasks.purge @configuration
166
- end
201
+ private
202
+ def with_stubbed_connection_establish_connection
203
+ ActiveRecord::Base.stub(:connection, @connection) do
204
+ ActiveRecord::Base.stub(:establish_connection, nil) do
205
+ yield
206
+ end
207
+ end
208
+ end
209
+ end
210
+
211
+ class PostgreSQLPurgeTest < ActiveRecord::TestCase
212
+ def setup
213
+ @connection = Class.new do
214
+ def create_database(*); end
215
+ def drop_database(*); end
216
+ end.new
217
+ @configuration = {
218
+ "adapter" => "postgresql",
219
+ "database" => "my-app-db"
220
+ }
221
+ end
167
222
 
168
- def test_creates_database
169
- @connection.expects(:create_database).
170
- with('my-app-db', @configuration.merge('encoding' => 'utf8'))
223
+ def test_clears_active_connections
224
+ with_stubbed_connection do
225
+ ActiveRecord::Base.stub(:establish_connection, nil) do
226
+ assert_called(ActiveRecord::Base, :clear_active_connections!) do
227
+ ActiveRecord::Tasks::DatabaseTasks.purge @configuration
228
+ end
229
+ end
230
+ end
231
+ end
171
232
 
172
- ActiveRecord::Tasks::DatabaseTasks.purge @configuration
173
- end
233
+ def test_establishes_connection_to_postgresql_database
234
+ db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new("default_env", "primary", @configuration)
235
+
236
+ with_stubbed_connection do
237
+ assert_called_with(
238
+ ActiveRecord::Base,
239
+ :establish_connection,
240
+ [
241
+ [
242
+ adapter: "postgresql",
243
+ database: "postgres",
244
+ schema_search_path: "public"
245
+ ],
246
+ [db_config]
247
+ ]
248
+ ) do
249
+ ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
250
+ end
251
+ end
252
+ end
174
253
 
175
- def test_establishes_connection
176
- ActiveRecord::Base.expects(:establish_connection).with(@configuration)
254
+ def test_drops_database
255
+ with_stubbed_connection do
256
+ ActiveRecord::Base.stub(:establish_connection, nil) do
257
+ assert_called_with(@connection, :drop_database, ["my-app-db"]) do
258
+ ActiveRecord::Tasks::DatabaseTasks.purge @configuration
259
+ end
260
+ end
261
+ end
262
+ end
177
263
 
178
- ActiveRecord::Tasks::DatabaseTasks.purge @configuration
179
- end
180
- end
264
+ def test_creates_database
265
+ with_stubbed_connection do
266
+ ActiveRecord::Base.stub(:establish_connection, nil) do
267
+ assert_called_with(
268
+ @connection,
269
+ :create_database,
270
+ ["my-app-db", @configuration.symbolize_keys.merge(encoding: "utf8")]
271
+ ) do
272
+ ActiveRecord::Tasks::DatabaseTasks.purge @configuration
273
+ end
274
+ end
275
+ end
276
+ end
181
277
 
182
- class PostgreSQLDBCharsetTest < ActiveRecord::TestCase
183
- def setup
184
- @connection = stub(:create_database => true)
185
- @configuration = {
186
- 'adapter' => 'postgresql',
187
- 'database' => 'my-app-db'
188
- }
278
+ def test_establishes_connection
279
+ db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new("default_env", "primary", @configuration)
280
+
281
+ with_stubbed_connection do
282
+ assert_called_with(
283
+ ActiveRecord::Base,
284
+ :establish_connection,
285
+ [
286
+ [
287
+ adapter: "postgresql",
288
+ database: "postgres",
289
+ schema_search_path: "public"
290
+ ],
291
+ [db_config]
292
+ ]
293
+ ) do
294
+ ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
295
+ end
296
+ end
297
+ end
189
298
 
190
- ActiveRecord::Base.stubs(:connection).returns(@connection)
191
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
192
- end
299
+ private
300
+ def with_stubbed_connection
301
+ ActiveRecord::Base.stub(:connection, @connection) do
302
+ yield
303
+ end
304
+ end
305
+ end
306
+
307
+ class PostgreSQLDBCharsetTest < ActiveRecord::TestCase
308
+ def setup
309
+ @connection = Class.new do
310
+ def create_database(*); end
311
+ def encoding; end
312
+ end.new
313
+ @configuration = {
314
+ "adapter" => "postgresql",
315
+ "database" => "my-app-db"
316
+ }
317
+ end
193
318
 
194
- def test_db_retrieves_charset
195
- @connection.expects(:encoding)
196
- ActiveRecord::Tasks::DatabaseTasks.charset @configuration
319
+ def test_db_retrieves_charset
320
+ ActiveRecord::Base.stub(:connection, @connection) do
321
+ assert_called(@connection, :encoding) do
322
+ ActiveRecord::Tasks::DatabaseTasks.charset @configuration
323
+ end
324
+ end
325
+ end
197
326
  end
198
- end
199
327
 
200
- class PostgreSQLDBCollationTest < ActiveRecord::TestCase
201
- def setup
202
- @connection = stub(:create_database => true)
203
- @configuration = {
204
- 'adapter' => 'postgresql',
205
- 'database' => 'my-app-db'
206
- }
207
-
208
- ActiveRecord::Base.stubs(:connection).returns(@connection)
209
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
210
- end
328
+ class PostgreSQLDBCollationTest < ActiveRecord::TestCase
329
+ def setup
330
+ @connection = Class.new { def collation; end }.new
331
+ @configuration = {
332
+ "adapter" => "postgresql",
333
+ "database" => "my-app-db"
334
+ }
335
+ end
211
336
 
212
- def test_db_retrieves_collation
213
- @connection.expects(:collation)
214
- ActiveRecord::Tasks::DatabaseTasks.collation @configuration
337
+ def test_db_retrieves_collation
338
+ ActiveRecord::Base.stub(:connection, @connection) do
339
+ assert_called(@connection, :collation) do
340
+ ActiveRecord::Tasks::DatabaseTasks.collation @configuration
341
+ end
342
+ end
343
+ end
215
344
  end
216
- end
217
345
 
218
- class PostgreSQLStructureDumpTest < ActiveRecord::TestCase
219
- def setup
220
- @connection = stub(:structure_dump => true)
221
- @configuration = {
222
- 'adapter' => 'postgresql',
223
- 'database' => 'my-app-db'
224
- }
225
- @filename = "awesome-file.sql"
226
-
227
- ActiveRecord::Base.stubs(:connection).returns(@connection)
228
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
229
- Kernel.stubs(:system)
230
- File.stubs(:open)
231
- end
346
+ class PostgreSQLStructureDumpTest < ActiveRecord::TestCase
347
+ def setup
348
+ @configuration = {
349
+ "adapter" => "postgresql",
350
+ "database" => "my-app-db"
351
+ }
352
+ @filename = "/tmp/awesome-file.sql"
353
+ FileUtils.touch(@filename)
354
+ end
232
355
 
233
- def test_structure_dump
234
- Kernel.expects(:system).with('pg_dump', '-s', '-x', '-O', '-f', @filename, 'my-app-db').returns(true)
356
+ def teardown
357
+ FileUtils.rm_f(@filename)
358
+ end
235
359
 
236
- ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
237
- end
360
+ def test_structure_dump
361
+ assert_called_with(
362
+ Kernel,
363
+ :system,
364
+ ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", @filename, "my-app-db"],
365
+ returns: true
366
+ ) do
367
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
368
+ end
369
+ end
238
370
 
239
- def test_structure_dump_with_schema_search_path
240
- @configuration['schema_search_path'] = 'foo,bar'
371
+ def test_structure_dump_header_comments_removed
372
+ Kernel.stub(:system, true) do
373
+ File.write(@filename, "-- header comment\n\n-- more header comment\n statement \n-- lower comment\n")
374
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
241
375
 
242
- Kernel.expects(:system).with('pg_dump', '-s', '-x', '-O', '-f', @filename, '--schema=foo', '--schema=bar', 'my-app-db').returns(true)
376
+ assert_equal [" statement \n", "-- lower comment\n"], File.readlines(@filename).first(2)
377
+ end
378
+ end
243
379
 
244
- ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
245
- end
380
+ def test_structure_dump_with_extra_flags
381
+ expected_command = ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", @filename, "--noop", "my-app-db"]
246
382
 
247
- def test_structure_dump_with_schema_search_path_and_dump_schemas_all
248
- @configuration['schema_search_path'] = 'foo,bar'
383
+ assert_called_with(Kernel, :system, expected_command, returns: true) do
384
+ with_structure_dump_flags(["--noop"]) do
385
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
386
+ end
387
+ end
388
+ end
249
389
 
250
- Kernel.expects(:system).with("pg_dump", '-s', '-x', '-O', '-f', @filename, 'my-app-db').returns(true)
390
+ def test_structure_dump_with_ignore_tables
391
+ assert_called(
392
+ ActiveRecord::SchemaDumper,
393
+ :ignore_tables,
394
+ returns: ["foo", "bar"]
395
+ ) do
396
+ assert_called_with(
397
+ Kernel,
398
+ :system,
399
+ ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", @filename, "-T", "foo", "-T", "bar", "my-app-db"],
400
+ returns: true
401
+ ) do
402
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
403
+ end
404
+ end
405
+ end
251
406
 
252
- with_dump_schemas(:all) do
253
- ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
407
+ def test_structure_dump_with_schema_search_path
408
+ @configuration["schema_search_path"] = "foo,bar"
409
+
410
+ assert_called_with(
411
+ Kernel,
412
+ :system,
413
+ ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", @filename, "--schema=foo", "--schema=bar", "my-app-db"],
414
+ returns: true
415
+ ) do
416
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
417
+ end
254
418
  end
255
- end
256
419
 
257
- def test_structure_dump_with_dump_schemas_string
258
- Kernel.expects(:system).with("pg_dump", '-s', '-x', '-O', '-f', @filename, '--schema=foo', '--schema=bar', "my-app-db").returns(true)
420
+ def test_structure_dump_with_schema_search_path_and_dump_schemas_all
421
+ @configuration["schema_search_path"] = "foo,bar"
422
+
423
+ assert_called_with(
424
+ Kernel,
425
+ :system,
426
+ ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", @filename, "my-app-db"],
427
+ returns: true
428
+ ) do
429
+ with_dump_schemas(:all) do
430
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
431
+ end
432
+ end
433
+ end
259
434
 
260
- with_dump_schemas('foo,bar') do
261
- ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
435
+ def test_structure_dump_with_dump_schemas_string
436
+ assert_called_with(
437
+ Kernel,
438
+ :system,
439
+ ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", @filename, "--schema=foo", "--schema=bar", "my-app-db"],
440
+ returns: true
441
+ ) do
442
+ with_dump_schemas("foo,bar") do
443
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
444
+ end
445
+ end
262
446
  end
263
- end
264
447
 
265
- private
448
+ def test_structure_dump_execution_fails
449
+ filename = "awesome-file.sql"
450
+ assert_called_with(
451
+ Kernel,
452
+ :system,
453
+ ["pg_dump", "--schema-only", "--no-privileges", "--no-owner", "--file", filename, "my-app-db"],
454
+ returns: nil
455
+ ) do
456
+ e = assert_raise(RuntimeError) do
457
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, filename)
458
+ end
459
+ assert_match("failed to execute:", e.message)
460
+ end
461
+ end
266
462
 
267
- def with_dump_schemas(value, &block)
268
- old_dump_schemas = ActiveRecord::Base.dump_schemas
269
- ActiveRecord::Base.dump_schemas = value
270
- yield
271
- ensure
272
- ActiveRecord::Base.dump_schemas = old_dump_schemas
273
- end
274
- end
463
+ private
464
+ def with_dump_schemas(value, &block)
465
+ old_dump_schemas = ActiveRecord::Base.dump_schemas
466
+ ActiveRecord::Base.dump_schemas = value
467
+ yield
468
+ ensure
469
+ ActiveRecord::Base.dump_schemas = old_dump_schemas
470
+ end
471
+
472
+ def with_structure_dump_flags(flags)
473
+ old = ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags
474
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = flags
475
+ yield
476
+ ensure
477
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = old
478
+ end
479
+ end
480
+
481
+ class PostgreSQLStructureLoadTest < ActiveRecord::TestCase
482
+ def setup
483
+ @configuration = {
484
+ "adapter" => "postgresql",
485
+ "database" => "my-app-db"
486
+ }
487
+ end
275
488
 
276
- class PostgreSQLStructureLoadTest < ActiveRecord::TestCase
277
- def setup
278
- @connection = stub
279
- @configuration = {
280
- 'adapter' => 'postgresql',
281
- 'database' => 'my-app-db'
282
- }
283
-
284
- ActiveRecord::Base.stubs(:connection).returns(@connection)
285
- ActiveRecord::Base.stubs(:establish_connection).returns(true)
286
- Kernel.stubs(:system)
287
- end
489
+ def test_structure_load
490
+ filename = "awesome-file.sql"
491
+ assert_called_with(
492
+ Kernel,
493
+ :system,
494
+ ["psql", "--set", "ON_ERROR_STOP=1", "--quiet", "--no-psqlrc", "--file", filename, @configuration["database"]],
495
+ returns: true
496
+ ) do
497
+ ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
498
+ end
499
+ end
288
500
 
289
- def test_structure_load
290
- filename = "awesome-file.sql"
291
- Kernel.expects(:system).with('psql', '-q', '-f', filename, @configuration['database']).returns(true)
501
+ def test_structure_load_with_extra_flags
502
+ filename = "awesome-file.sql"
503
+ expected_command = ["psql", "--set", "ON_ERROR_STOP=1", "--quiet", "--no-psqlrc", "--file", filename, "--noop", @configuration["database"]]
292
504
 
293
- ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
294
- end
505
+ assert_called_with(Kernel, :system, expected_command, returns: true) do
506
+ with_structure_load_flags(["--noop"]) do
507
+ ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
508
+ end
509
+ end
510
+ end
295
511
 
296
- def test_structure_load_accepts_path_with_spaces
297
- filename = "awesome file.sql"
298
- Kernel.expects(:system).with('psql', '-q', '-f', filename, @configuration['database']).returns(true)
512
+ def test_structure_load_accepts_path_with_spaces
513
+ filename = "awesome file.sql"
514
+ assert_called_with(
515
+ Kernel,
516
+ :system,
517
+ ["psql", "--set", "ON_ERROR_STOP=1", "--quiet", "--no-psqlrc", "--file", filename, @configuration["database"]],
518
+ returns: true
519
+ ) do
520
+ ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
521
+ end
522
+ end
299
523
 
300
- ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
524
+ private
525
+ def with_structure_load_flags(flags)
526
+ old = ActiveRecord::Tasks::DatabaseTasks.structure_load_flags
527
+ ActiveRecord::Tasks::DatabaseTasks.structure_load_flags = flags
528
+ yield
529
+ ensure
530
+ ActiveRecord::Tasks::DatabaseTasks.structure_load_flags = old
531
+ end
301
532
  end
302
533
  end
303
534
  end
304
- end