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,30 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/topic'
3
- require 'models/customer'
4
- require 'models/company'
5
- require 'models/company_in_module'
6
- require 'models/ship'
7
- require 'models/pirate'
8
- require 'models/price_estimate'
9
- require 'models/essay'
10
- require 'models/author'
11
- require 'models/organization'
12
- require 'models/post'
13
- require 'models/tagging'
14
- require 'models/category'
15
- require 'models/book'
16
- require 'models/subscriber'
17
- require 'models/subscription'
18
- require 'models/tag'
19
- require 'models/sponsor'
20
- require 'models/edge'
21
- require 'models/hotel'
22
- require 'models/chef'
23
- require 'models/department'
24
- require 'models/cake_designer'
25
- require 'models/drink_designer'
26
- require 'models/mocktail_designer'
27
- require 'models/recipe'
4
+ require "models/topic"
5
+ require "models/customer"
6
+ require "models/company"
7
+ require "models/company_in_module"
8
+ require "models/ship"
9
+ require "models/pirate"
10
+ require "models/price_estimate"
11
+ require "models/essay"
12
+ require "models/author"
13
+ require "models/organization"
14
+ require "models/post"
15
+ require "models/tagging"
16
+ require "models/category"
17
+ require "models/book"
18
+ require "models/subscriber"
19
+ require "models/subscription"
20
+ require "models/tag"
21
+ require "models/sponsor"
22
+ require "models/edge"
23
+ require "models/hotel"
24
+ require "models/chef"
25
+ require "models/department"
26
+ require "models/cake_designer"
27
+ require "models/drink_designer"
28
+ require "models/recipe"
28
29
 
29
30
  class ReflectionTest < ActiveRecord::TestCase
30
31
  include ActiveRecord::Reflection
@@ -65,13 +66,18 @@ class ReflectionTest < ActiveRecord::TestCase
65
66
 
66
67
  def test_column_string_type_and_limit
67
68
  assert_equal :string, @first.column_for_attribute("title").type
69
+ assert_equal :string, @first.column_for_attribute(:title).type
70
+ assert_equal :string, @first.type_for_attribute("title").type
71
+ assert_equal :string, @first.type_for_attribute(:title).type
72
+ assert_equal :string, @first.type_for_attribute("heading").type
73
+ assert_equal :string, @first.type_for_attribute(:heading).type
68
74
  assert_equal 250, @first.column_for_attribute("title").limit
69
75
  end
70
76
 
71
77
  def test_column_null_not_null
72
78
  subscriber = Subscriber.first
73
79
  assert subscriber.column_for_attribute("name").null
74
- assert !subscriber.column_for_attribute("nick").null
80
+ assert_not subscriber.column_for_attribute("nick").null
75
81
  end
76
82
 
77
83
  def test_human_name_for_column
@@ -80,14 +86,20 @@ class ReflectionTest < ActiveRecord::TestCase
80
86
 
81
87
  def test_integer_columns
82
88
  assert_equal :integer, @first.column_for_attribute("id").type
89
+ assert_equal :integer, @first.column_for_attribute(:id).type
90
+ assert_equal :integer, @first.type_for_attribute("id").type
91
+ assert_equal :integer, @first.type_for_attribute(:id).type
83
92
  end
84
93
 
85
94
  def test_non_existent_columns_return_null_object
86
95
  column = @first.column_for_attribute("attribute_that_doesnt_exist")
87
96
  assert_instance_of ActiveRecord::ConnectionAdapters::NullColumn, column
88
97
  assert_equal "attribute_that_doesnt_exist", column.name
89
- assert_equal nil, column.sql_type
90
- assert_equal nil, column.type
98
+ assert_nil column.sql_type
99
+ assert_nil column.type
100
+
101
+ column = @first.column_for_attribute(:attribute_that_doesnt_exist)
102
+ assert_instance_of ActiveRecord::ConnectionAdapters::NullColumn, column
91
103
  end
92
104
 
93
105
  def test_non_existent_types_are_identity_types
@@ -97,10 +109,21 @@ class ReflectionTest < ActiveRecord::TestCase
97
109
  assert_equal object, type.deserialize(object)
98
110
  assert_equal object, type.cast(object)
99
111
  assert_equal object, type.serialize(object)
112
+
113
+ type = @first.type_for_attribute(:attribute_that_doesnt_exist)
114
+ assert_equal object, type.deserialize(object)
115
+ assert_equal object, type.cast(object)
116
+ assert_equal object, type.serialize(object)
100
117
  end
101
118
 
102
119
  def test_reflection_klass_for_nested_class_name
103
- reflection = ActiveRecord::Reflection.create(:has_many, nil, nil, { :class_name => 'MyApplication::Business::Company' }, ActiveRecord::Base)
120
+ reflection = ActiveRecord::Reflection.create(
121
+ :has_many,
122
+ nil,
123
+ nil,
124
+ { class_name: "MyApplication::Business::Company" },
125
+ Customer
126
+ )
104
127
  assert_nothing_raised do
105
128
  assert_equal MyApplication::Business::Company, reflection.klass
106
129
  end
@@ -108,28 +131,28 @@ class ReflectionTest < ActiveRecord::TestCase
108
131
 
109
132
  def test_irregular_reflection_class_name
110
133
  ActiveSupport::Inflector.inflections do |inflect|
111
- inflect.irregular 'plural_irregular', 'plurales_irregulares'
134
+ inflect.irregular "plural_irregular", "plurales_irregulares"
112
135
  end
113
- reflection = ActiveRecord::Reflection.create(:has_many, 'plurales_irregulares', nil, {}, ActiveRecord::Base)
114
- assert_equal 'PluralIrregular', reflection.class_name
136
+ reflection = ActiveRecord::Reflection.create(:has_many, "plurales_irregulares", nil, {}, ActiveRecord::Base)
137
+ assert_equal "PluralIrregular", reflection.class_name
115
138
  end
116
139
 
117
140
  def test_aggregation_reflection
118
141
  reflection_for_address = AggregateReflection.new(
119
- :address, nil, { :mapping => [ %w(address_street street), %w(address_city city), %w(address_country country) ] }, Customer
142
+ :address, nil, { mapping: [ %w(address_street street), %w(address_city city), %w(address_country country) ] }, Customer
120
143
  )
121
144
 
122
145
  reflection_for_balance = AggregateReflection.new(
123
- :balance, nil, { :class_name => "Money", :mapping => %w(balance amount) }, Customer
146
+ :balance, nil, { class_name: "Money", mapping: %w(balance amount) }, Customer
124
147
  )
125
148
 
126
149
  reflection_for_gps_location = AggregateReflection.new(
127
- :gps_location, nil, { }, Customer
150
+ :gps_location, nil, {}, Customer
128
151
  )
129
152
 
130
- assert Customer.reflect_on_all_aggregations.include?(reflection_for_gps_location)
131
- assert Customer.reflect_on_all_aggregations.include?(reflection_for_balance)
132
- assert Customer.reflect_on_all_aggregations.include?(reflection_for_address)
153
+ assert_includes Customer.reflect_on_all_aggregations, reflection_for_gps_location
154
+ assert_includes Customer.reflect_on_all_aggregations, reflection_for_balance
155
+ assert_includes Customer.reflect_on_all_aggregations, reflection_for_address
133
156
 
134
157
  assert_equal reflection_for_address, Customer.reflect_on_aggregation(:address)
135
158
 
@@ -142,37 +165,37 @@ class ReflectionTest < ActiveRecord::TestCase
142
165
  expected = Pirate.reflect_on_all_associations.select { |r| r.options[:autosave] }
143
166
  received = Pirate.reflect_on_all_autosave_associations
144
167
 
145
- assert !received.empty?
168
+ assert_not_empty received
146
169
  assert_not_equal Pirate.reflect_on_all_associations.length, received.length
147
170
  assert_equal expected, received
148
171
  end
149
172
 
150
173
  def test_has_many_reflection
151
- reflection_for_clients = ActiveRecord::Reflection.create(:has_many, :clients, nil, { :order => "id", :dependent => :destroy }, Firm)
174
+ reflection_for_clients = ActiveRecord::Reflection.create(:has_many, :clients, nil, { order: "id", dependent: :destroy }, Firm)
152
175
 
153
176
  assert_equal reflection_for_clients, Firm.reflect_on_association(:clients)
154
177
 
155
178
  assert_equal Client, Firm.reflect_on_association(:clients).klass
156
- assert_equal 'companies', Firm.reflect_on_association(:clients).table_name
179
+ assert_equal "companies", Firm.reflect_on_association(:clients).table_name
157
180
 
158
181
  assert_equal Client, Firm.reflect_on_association(:clients_of_firm).klass
159
- assert_equal 'companies', Firm.reflect_on_association(:clients_of_firm).table_name
182
+ assert_equal "companies", Firm.reflect_on_association(:clients_of_firm).table_name
160
183
  end
161
184
 
162
185
  def test_has_one_reflection
163
- reflection_for_account = ActiveRecord::Reflection.create(:has_one, :account, nil, { :foreign_key => "firm_id", :dependent => :destroy }, Firm)
186
+ reflection_for_account = ActiveRecord::Reflection.create(:has_one, :account, nil, { foreign_key: "firm_id", dependent: :destroy }, Firm)
164
187
  assert_equal reflection_for_account, Firm.reflect_on_association(:account)
165
188
 
166
189
  assert_equal Account, Firm.reflect_on_association(:account).klass
167
- assert_equal 'accounts', Firm.reflect_on_association(:account).table_name
190
+ assert_equal "accounts", Firm.reflect_on_association(:account).table_name
168
191
  end
169
192
 
170
193
  def test_belongs_to_inferred_foreign_key_from_assoc_name
171
194
  Company.belongs_to :foo
172
195
  assert_equal "foo_id", Company.reflect_on_association(:foo).foreign_key
173
- Company.belongs_to :bar, :class_name => "Xyzzy"
196
+ Company.belongs_to :bar, class_name: "Xyzzy"
174
197
  assert_equal "bar_id", Company.reflect_on_association(:bar).foreign_key
175
- Company.belongs_to :baz, :class_name => "Xyzzy", :foreign_key => "xyzzy_id"
198
+ Company.belongs_to :baz, class_name: "Xyzzy", foreign_key: "xyzzy_id"
176
199
  assert_equal "xyzzy_id", Company.reflect_on_association(:baz).foreign_key
177
200
  end
178
201
 
@@ -181,45 +204,45 @@ class ReflectionTest < ActiveRecord::TestCase
181
204
 
182
205
  assert_reflection MyApplication::Business::Firm,
183
206
  :clients_of_firm,
184
- :klass => MyApplication::Business::Client,
185
- :class_name => 'Client',
186
- :table_name => 'companies'
207
+ klass: MyApplication::Business::Client,
208
+ class_name: "Client",
209
+ table_name: "companies"
187
210
 
188
211
  assert_reflection MyApplication::Billing::Account,
189
212
  :firm,
190
- :klass => MyApplication::Business::Firm,
191
- :class_name => 'MyApplication::Business::Firm',
192
- :table_name => 'companies'
213
+ klass: MyApplication::Business::Firm,
214
+ class_name: "MyApplication::Business::Firm",
215
+ table_name: "companies"
193
216
 
194
217
  assert_reflection MyApplication::Billing::Account,
195
218
  :qualified_billing_firm,
196
- :klass => MyApplication::Billing::Firm,
197
- :class_name => 'MyApplication::Billing::Firm',
198
- :table_name => 'companies'
219
+ klass: MyApplication::Billing::Firm,
220
+ class_name: "MyApplication::Billing::Firm",
221
+ table_name: "companies"
199
222
 
200
223
  assert_reflection MyApplication::Billing::Account,
201
224
  :unqualified_billing_firm,
202
- :klass => MyApplication::Billing::Firm,
203
- :class_name => 'Firm',
204
- :table_name => 'companies'
225
+ klass: MyApplication::Billing::Firm,
226
+ class_name: "Firm",
227
+ table_name: "companies"
205
228
 
206
229
  assert_reflection MyApplication::Billing::Account,
207
230
  :nested_qualified_billing_firm,
208
- :klass => MyApplication::Billing::Nested::Firm,
209
- :class_name => 'MyApplication::Billing::Nested::Firm',
210
- :table_name => 'companies'
231
+ klass: MyApplication::Billing::Nested::Firm,
232
+ class_name: "MyApplication::Billing::Nested::Firm",
233
+ table_name: "companies"
211
234
 
212
235
  assert_reflection MyApplication::Billing::Account,
213
236
  :nested_unqualified_billing_firm,
214
- :klass => MyApplication::Billing::Nested::Firm,
215
- :class_name => 'Nested::Firm',
216
- :table_name => 'companies'
237
+ klass: MyApplication::Billing::Nested::Firm,
238
+ class_name: "Nested::Firm",
239
+ table_name: "companies"
217
240
  ensure
218
241
  ActiveRecord::Base.store_full_sti_class = true
219
242
  end
220
243
 
221
244
  def test_reflection_should_not_raise_error_when_compared_to_other_object
222
- assert_not_equal Object.new, Firm._reflections['clients']
245
+ assert_not_equal Object.new, Firm._reflections["clients"]
223
246
  end
224
247
 
225
248
  def test_reflections_should_return_keys_as_strings
@@ -227,7 +250,7 @@ class ReflectionTest < ActiveRecord::TestCase
227
250
  end
228
251
 
229
252
  def test_has_and_belongs_to_many_reflection
230
- assert_equal :has_and_belongs_to_many, Category.reflections['posts'].macro
253
+ assert_equal :has_and_belongs_to_many, Category.reflections["posts"].macro
231
254
  assert_equal :posts, Category.reflect_on_all_associations(:has_and_belongs_to_many).first.name
232
255
  end
233
256
 
@@ -246,46 +269,35 @@ class ReflectionTest < ActiveRecord::TestCase
246
269
  assert_equal expected, actual
247
270
  end
248
271
 
249
- def test_scope_chain
250
- expected = [
251
- [Tagging.reflect_on_association(:tag).scope, Post.reflect_on_association(:first_blue_tags).scope],
252
- [Post.reflect_on_association(:first_taggings).scope],
253
- [Author.reflect_on_association(:misc_posts).scope]
254
- ]
255
- actual = Author.reflect_on_association(:misc_post_first_blue_tags).scope_chain
256
- assert_equal expected, actual
257
-
258
- expected = [
259
- [
260
- Tagging.reflect_on_association(:blue_tag).scope,
261
- Post.reflect_on_association(:first_blue_tags_2).scope,
262
- Author.reflect_on_association(:misc_post_first_blue_tags_2).scope
263
- ],
264
- [],
265
- []
266
- ]
267
- actual = Author.reflect_on_association(:misc_post_first_blue_tags_2).scope_chain
268
- assert_equal expected, actual
269
- end
270
-
271
272
  def test_scope_chain_does_not_interfere_with_hmt_with_polymorphic_case
272
- @hotel = Hotel.create!
273
- @department = @hotel.departments.create!
274
- @department.chefs.create!(employable: CakeDesigner.create!)
275
- @department.chefs.create!(employable: DrinkDesigner.create!)
273
+ hotel = Hotel.create!
274
+ department = hotel.departments.create!
275
+ department.chefs.create!(employable: CakeDesigner.create!)
276
+ department.chefs.create!(employable: DrinkDesigner.create!)
276
277
 
277
- assert_equal 1, @hotel.cake_designers.size
278
- assert_equal 1, @hotel.drink_designers.size
279
- assert_equal 2, @hotel.chefs.size
278
+ assert_equal 1, hotel.cake_designers.size
279
+ assert_equal 1, hotel.cake_designers.count
280
+ assert_equal 1, hotel.drink_designers.size
281
+ assert_equal 1, hotel.drink_designers.count
282
+ assert_equal 2, hotel.chefs.size
283
+ assert_equal 2, hotel.chefs.count
280
284
  end
281
285
 
282
286
  def test_scope_chain_does_not_interfere_with_hmt_with_polymorphic_case_and_sti
283
- @hotel = Hotel.create!
284
- @hotel.mocktail_designers << MocktailDesigner.create!
287
+ hotel = Hotel.create!
288
+ hotel.mocktail_designers << MocktailDesigner.create!
285
289
 
286
- assert_equal 1, @hotel.mocktail_designers.size
287
- assert_equal 1, @hotel.mocktail_designers.count
288
- assert_equal 1, @hotel.chef_lists.size
290
+ assert_equal 1, hotel.mocktail_designers.size
291
+ assert_equal 1, hotel.mocktail_designers.count
292
+ assert_equal 1, hotel.chef_lists.size
293
+ assert_equal 1, hotel.chef_lists.count
294
+
295
+ hotel.mocktail_designers = []
296
+
297
+ assert_equal 0, hotel.mocktail_designers.size
298
+ assert_equal 0, hotel.mocktail_designers.count
299
+ assert_equal 0, hotel.chef_lists.size
300
+ assert_equal 0, hotel.chef_lists.count
289
301
  end
290
302
 
291
303
  def test_scope_chain_of_polymorphic_association_does_not_leak_into_other_hmt_associations
@@ -305,18 +317,18 @@ class ReflectionTest < ActiveRecord::TestCase
305
317
  end
306
318
 
307
319
  def test_nested?
308
- assert !Author.reflect_on_association(:comments).nested?
309
- assert Author.reflect_on_association(:tags).nested?
320
+ assert_not_predicate Author.reflect_on_association(:comments), :nested?
321
+ assert_predicate Author.reflect_on_association(:tags), :nested?
310
322
 
311
323
  # Only goes :through once, but the through_reflection is a has_and_belongs_to_many, so this is
312
324
  # a nested through association
313
- assert Category.reflect_on_association(:post_comments).nested?
325
+ assert_predicate Category.reflect_on_association(:post_comments), :nested?
314
326
  end
315
327
 
316
328
  def test_association_primary_key
317
329
  # Normal association
318
330
  assert_equal "id", Author.reflect_on_association(:posts).association_primary_key.to_s
319
- assert_equal "name", Author.reflect_on_association(:essay).association_primary_key.to_s
331
+ assert_equal "id", Author.reflect_on_association(:essay).association_primary_key.to_s
320
332
  assert_equal "name", Essay.reflect_on_association(:writer).association_primary_key.to_s
321
333
 
322
334
  # Through association (uses the :primary_key option from the source reflection)
@@ -325,15 +337,6 @@ class ReflectionTest < ActiveRecord::TestCase
325
337
  assert_equal "custom_primary_key", Author.reflect_on_association(:tags_with_primary_key).association_primary_key.to_s # nested
326
338
  end
327
339
 
328
- def test_association_primary_key_type
329
- # Normal Association
330
- assert_equal :integer, Author.reflect_on_association(:posts).association_primary_key_type.type
331
- assert_equal :string, Author.reflect_on_association(:essay).association_primary_key_type.type
332
-
333
- # Through Association
334
- assert_equal :string, Author.reflect_on_association(:essay_category).association_primary_key_type.type
335
- end
336
-
337
340
  def test_association_primary_key_raises_when_missing_primary_key
338
341
  reflection = ActiveRecord::Reflection.create(:has_many, :edge, nil, {}, Author)
339
342
  assert_raises(ActiveRecord::UnknownPrimaryKey) { reflection.association_primary_key }
@@ -354,42 +357,49 @@ class ReflectionTest < ActiveRecord::TestCase
354
357
  assert_raises(ActiveRecord::UnknownPrimaryKey) { reflection.active_record_primary_key }
355
358
  end
356
359
 
360
+ def test_type
361
+ assert_equal "taggable_type", Post.reflect_on_association(:taggings).type.to_s
362
+ assert_equal "imageable_class", Post.reflect_on_association(:images).type.to_s
363
+ assert_nil Post.reflect_on_association(:readers).type
364
+ end
365
+
357
366
  def test_foreign_type
358
367
  assert_equal "sponsorable_type", Sponsor.reflect_on_association(:sponsorable).foreign_type.to_s
359
368
  assert_equal "sponsorable_type", Sponsor.reflect_on_association(:thing).foreign_type.to_s
369
+ assert_nil Sponsor.reflect_on_association(:sponsor_club).foreign_type
360
370
  end
361
371
 
362
372
  def test_collection_association
363
- assert Pirate.reflect_on_association(:birds).collection?
364
- assert Pirate.reflect_on_association(:parrots).collection?
373
+ assert_predicate Pirate.reflect_on_association(:birds), :collection?
374
+ assert_predicate Pirate.reflect_on_association(:parrots), :collection?
365
375
 
366
- assert !Pirate.reflect_on_association(:ship).collection?
367
- assert !Ship.reflect_on_association(:pirate).collection?
376
+ assert_not_predicate Pirate.reflect_on_association(:ship), :collection?
377
+ assert_not_predicate Ship.reflect_on_association(:pirate), :collection?
368
378
  end
369
379
 
370
380
  def test_default_association_validation
371
- assert ActiveRecord::Reflection.create(:has_many, :clients, nil, {}, Firm).validate?
381
+ assert_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, {}, Firm), :validate?
372
382
 
373
- assert !ActiveRecord::Reflection.create(:has_one, :client, nil, {}, Firm).validate?
374
- assert !ActiveRecord::Reflection.create(:belongs_to, :client, nil, {}, Firm).validate?
383
+ assert_not_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, {}, Firm), :validate?
384
+ assert_not_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, {}, Firm), :validate?
375
385
  end
376
386
 
377
387
  def test_always_validate_association_if_explicit
378
- assert ActiveRecord::Reflection.create(:has_one, :client, nil, { :validate => true }, Firm).validate?
379
- assert ActiveRecord::Reflection.create(:belongs_to, :client, nil, { :validate => true }, Firm).validate?
380
- assert ActiveRecord::Reflection.create(:has_many, :clients, nil, { :validate => true }, Firm).validate?
388
+ assert_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, { validate: true }, Firm), :validate?
389
+ assert_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, { validate: true }, Firm), :validate?
390
+ assert_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, { validate: true }, Firm), :validate?
381
391
  end
382
392
 
383
393
  def test_validate_association_if_autosave
384
- assert ActiveRecord::Reflection.create(:has_one, :client, nil, { :autosave => true }, Firm).validate?
385
- assert ActiveRecord::Reflection.create(:belongs_to, :client, nil, { :autosave => true }, Firm).validate?
386
- assert ActiveRecord::Reflection.create(:has_many, :clients, nil, { :autosave => true }, Firm).validate?
394
+ assert_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, { autosave: true }, Firm), :validate?
395
+ assert_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, { autosave: true }, Firm), :validate?
396
+ assert_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, { autosave: true }, Firm), :validate?
387
397
  end
388
398
 
389
399
  def test_never_validate_association_if_explicit
390
- assert !ActiveRecord::Reflection.create(:has_one, :client, nil, { :autosave => true, :validate => false }, Firm).validate?
391
- assert !ActiveRecord::Reflection.create(:belongs_to, :client, nil, { :autosave => true, :validate => false }, Firm).validate?
392
- assert !ActiveRecord::Reflection.create(:has_many, :clients, nil, { :autosave => true, :validate => false }, Firm).validate?
400
+ assert_not_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, { autosave: true, validate: false }, Firm), :validate?
401
+ assert_not_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, { autosave: true, validate: false }, Firm), :validate?
402
+ assert_not_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, { autosave: true, validate: false }, Firm), :validate?
393
403
  end
394
404
 
395
405
  def test_foreign_key
@@ -397,73 +407,74 @@ class ReflectionTest < ActiveRecord::TestCase
397
407
  assert_equal "category_id", Post.reflect_on_association(:categorizations).foreign_key.to_s
398
408
  end
399
409
 
400
- def test_through_reflection_scope_chain_does_not_modify_other_reflections
401
- orig_conds = Post.reflect_on_association(:first_blue_tags_2).scope_chain.inspect
402
- Author.reflect_on_association(:misc_post_first_blue_tags_2).scope_chain
403
- assert_equal orig_conds, Post.reflect_on_association(:first_blue_tags_2).scope_chain.inspect
404
- end
405
-
406
410
  def test_symbol_for_class_name
407
411
  assert_equal Client, Firm.reflect_on_association(:unsorted_clients_with_symbol).klass
408
412
  end
409
413
 
414
+ def test_class_for_class_name
415
+ error = assert_raises(ArgumentError) do
416
+ ActiveRecord::Reflection.create(:has_many, :clients, nil, { class_name: Client }, Firm)
417
+ end
418
+ assert_equal "A class was passed to `:class_name` but we are expecting a string.", error.message
419
+ end
420
+
410
421
  def test_join_table
411
- category = Struct.new(:table_name, :pluralize_table_names).new('categories', true)
412
- product = Struct.new(:table_name, :pluralize_table_names).new('products', true)
422
+ category = Struct.new(:table_name, :pluralize_table_names).new("categories", true)
423
+ product = Struct.new(:table_name, :pluralize_table_names).new("products", true)
413
424
 
414
425
  reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, {}, product)
415
426
  reflection.stub(:klass, category) do
416
- assert_equal 'categories_products', reflection.join_table
427
+ assert_equal "categories_products", reflection.join_table
417
428
  end
418
429
 
419
430
  reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, {}, category)
420
431
  reflection.stub(:klass, product) do
421
- assert_equal 'categories_products', reflection.join_table
432
+ assert_equal "categories_products", reflection.join_table
422
433
  end
423
434
  end
424
435
 
425
436
  def test_join_table_with_common_prefix
426
- category = Struct.new(:table_name, :pluralize_table_names).new('catalog_categories', true)
427
- product = Struct.new(:table_name, :pluralize_table_names).new('catalog_products', true)
437
+ category = Struct.new(:table_name, :pluralize_table_names).new("catalog_categories", true)
438
+ product = Struct.new(:table_name, :pluralize_table_names).new("catalog_products", true)
428
439
 
429
440
  reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, {}, product)
430
441
  reflection.stub(:klass, category) do
431
- assert_equal 'catalog_categories_products', reflection.join_table
442
+ assert_equal "catalog_categories_products", reflection.join_table
432
443
  end
433
444
 
434
445
  reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, {}, category)
435
446
  reflection.stub(:klass, product) do
436
- assert_equal 'catalog_categories_products', reflection.join_table
447
+ assert_equal "catalog_categories_products", reflection.join_table
437
448
  end
438
449
  end
439
450
 
440
451
  def test_join_table_with_different_prefix
441
- category = Struct.new(:table_name, :pluralize_table_names).new('catalog_categories', true)
442
- page = Struct.new(:table_name, :pluralize_table_names).new('content_pages', true)
452
+ category = Struct.new(:table_name, :pluralize_table_names).new("catalog_categories", true)
453
+ page = Struct.new(:table_name, :pluralize_table_names).new("content_pages", true)
443
454
 
444
455
  reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, {}, page)
445
456
  reflection.stub(:klass, category) do
446
- assert_equal 'catalog_categories_content_pages', reflection.join_table
457
+ assert_equal "catalog_categories_content_pages", reflection.join_table
447
458
  end
448
459
 
449
460
  reflection = ActiveRecord::Reflection.create(:has_many, :pages, nil, {}, category)
450
461
  reflection.stub(:klass, page) do
451
- assert_equal 'catalog_categories_content_pages', reflection.join_table
462
+ assert_equal "catalog_categories_content_pages", reflection.join_table
452
463
  end
453
464
  end
454
465
 
455
466
  def test_join_table_can_be_overridden
456
- category = Struct.new(:table_name, :pluralize_table_names).new('categories', true)
457
- product = Struct.new(:table_name, :pluralize_table_names).new('products', true)
467
+ category = Struct.new(:table_name, :pluralize_table_names).new("categories", true)
468
+ product = Struct.new(:table_name, :pluralize_table_names).new("products", true)
458
469
 
459
- reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, { :join_table => 'product_categories' }, product)
470
+ reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, { join_table: "product_categories" }, product)
460
471
  reflection.stub(:klass, category) do
461
- assert_equal 'product_categories', reflection.join_table
472
+ assert_equal "product_categories", reflection.join_table
462
473
  end
463
474
 
464
- reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, { :join_table => 'product_categories' }, category)
475
+ reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, { join_table: "product_categories" }, category)
465
476
  reflection.stub(:klass, product) do
466
- assert_equal 'product_categories', reflection.join_table
477
+ assert_equal "product_categories", reflection.join_table
467
478
  end
468
479
  end
469
480
 
@@ -483,7 +494,7 @@ class ReflectionTest < ActiveRecord::TestCase
483
494
  department.chefs.create!
484
495
 
485
496
  assert_nothing_raised do
486
- assert_equal department.chefs, Hotel.includes(['departments' => 'chefs']).first.chefs
497
+ assert_equal department.chefs, Hotel.includes(["departments" => "chefs"]).first.chefs
487
498
  end
488
499
  end
489
500
 
@@ -503,7 +514,7 @@ class ReflectionTest < ActiveRecord::TestCase
503
514
  def assert_reflection(klass, association, options)
504
515
  assert reflection = klass.reflect_on_association(association)
505
516
  options.each do |method, value|
506
- assert_equal(value, reflection.send(method))
517
+ assert_equal(value, reflection.public_send(method))
507
518
  end
508
519
  end
509
520
  end