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,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/post'
3
- require 'models/author'
4
- require 'models/developer'
5
- require 'models/computer'
6
- require 'models/project'
7
- require 'models/comment'
8
- require 'models/category'
9
- require 'models/person'
10
- require 'models/reference'
4
+ require "models/post"
5
+ require "models/author"
6
+ require "models/developer"
7
+ require "models/computer"
8
+ require "models/project"
9
+ require "models/comment"
10
+ require "models/category"
11
+ require "models/person"
12
+ require "models/reference"
11
13
 
12
14
  class RelationScopingTest < ActiveRecord::TestCase
13
- fixtures :authors, :developers, :projects, :comments, :posts, :developers_projects
15
+ fixtures :authors, :author_addresses, :developers, :projects, :comments, :posts, :developers_projects
14
16
 
15
17
  setup do
16
18
  developers(:david)
@@ -28,7 +30,7 @@ class RelationScopingTest < ActiveRecord::TestCase
28
30
  def test_scope_breaks_caching_on_collections
29
31
  author = authors :david
30
32
  ids = author.reload.special_posts_with_default_scope.map(&:id)
31
- assert_equal [1,5,6], ids.sort
33
+ assert_equal [1, 5, 6], ids.sort
32
34
  scoped_posts = SpecialPostWithDefaultScope.unscoped do
33
35
  author = authors :david
34
36
  author.reload.special_posts_with_default_scope.to_a
@@ -93,6 +95,20 @@ class RelationScopingTest < ActiveRecord::TestCase
93
95
  end
94
96
  end
95
97
 
98
+ def test_scoped_unscoped
99
+ DeveloperOrderedBySalary.where("salary = 9000").scoping do
100
+ assert_equal 11, DeveloperOrderedBySalary.first.id
101
+ assert_equal 1, DeveloperOrderedBySalary.unscoped.first.id
102
+ end
103
+ end
104
+
105
+ def test_scoped_default_scoped
106
+ DeveloperOrderedBySalary.where("salary = 9000").scoping do
107
+ assert_equal 11, DeveloperOrderedBySalary.first.id
108
+ assert_equal 2, DeveloperOrderedBySalary.default_scoped.first.id
109
+ end
110
+ end
111
+
96
112
  def test_scoped_find_all
97
113
  Developer.where("name = 'David'").scoping do
98
114
  assert_equal [developers(:david)], Developer.all
@@ -103,13 +119,13 @@ class RelationScopingTest < ActiveRecord::TestCase
103
119
  Developer.select("id, name").scoping do
104
120
  developer = Developer.where("name = 'David'").first
105
121
  assert_equal "David", developer.name
106
- assert !developer.has_attribute?(:salary)
122
+ assert_not developer.has_attribute?(:salary)
107
123
  end
108
124
  end
109
125
 
110
126
  def test_scope_select_concatenates
111
127
  Developer.select("id, name").scoping do
112
- developer = Developer.select('salary').where("name = 'David'").first
128
+ developer = Developer.select("salary").where("name = 'David'").first
113
129
  assert_equal 80000, developer.salary
114
130
  assert developer.has_attribute?(:id)
115
131
  assert developer.has_attribute?(:name)
@@ -122,58 +138,116 @@ class RelationScopingTest < ActiveRecord::TestCase
122
138
  assert_equal 1, Developer.count
123
139
  end
124
140
 
125
- Developer.where('salary = 100000').scoping do
141
+ Developer.where("salary = 100000").scoping do
126
142
  assert_equal 8, Developer.count
127
143
  assert_equal 1, Developer.where("name LIKE 'fixture_1%'").count
128
144
  end
129
145
  end
130
146
 
147
+ def test_scoped_find_with_annotation
148
+ Developer.annotate("scoped").scoping do
149
+ developer = nil
150
+ assert_sql(%r{/\* scoped \*/}) do
151
+ developer = Developer.where("name = 'David'").first
152
+ end
153
+ assert_equal "David", developer.name
154
+ end
155
+ end
156
+
157
+ def test_find_with_annotation_unscoped
158
+ Developer.annotate("scoped").unscoped do
159
+ developer = nil
160
+ log = capture_sql do
161
+ developer = Developer.where("name = 'David'").first
162
+ end
163
+
164
+ assert_not_predicate log, :empty?
165
+ assert_predicate log.select { |query| query.match?(%r{/\* scoped \*/}) }, :empty?
166
+
167
+ assert_equal "David", developer.name
168
+ end
169
+ end
170
+
171
+ def test_find_with_annotation_unscope
172
+ developer = nil
173
+ log = capture_sql do
174
+ developer = Developer.annotate("unscope").
175
+ where("name = 'David'").
176
+ unscope(:annotate).first
177
+ end
178
+
179
+ assert_not_predicate log, :empty?
180
+ assert_predicate log.select { |query| query.match?(%r{/\* unscope \*/}) }, :empty?
181
+
182
+ assert_equal "David", developer.name
183
+ end
184
+
131
185
  def test_scoped_find_include
132
186
  # with the include, will retrieve only developers for the given project
133
187
  scoped_developers = Developer.includes(:projects).scoping do
134
- Developer.where('projects.id' => 2).to_a
188
+ Developer.where("projects.id" => 2).to_a
135
189
  end
136
- assert scoped_developers.include?(developers(:david))
137
- assert !scoped_developers.include?(developers(:jamis))
190
+ assert_includes scoped_developers, developers(:david)
191
+ assert_not_includes scoped_developers, developers(:jamis)
138
192
  assert_equal 1, scoped_developers.size
139
193
  end
140
194
 
141
195
  def test_scoped_find_joins
142
- scoped_developers = Developer.joins('JOIN developers_projects ON id = developer_id').scoping do
143
- Developer.where('developers_projects.project_id = 2').to_a
196
+ scoped_developers = Developer.joins("JOIN developers_projects ON id = developer_id").scoping do
197
+ Developer.where("developers_projects.project_id = 2").to_a
144
198
  end
145
199
 
146
- assert scoped_developers.include?(developers(:david))
147
- assert !scoped_developers.include?(developers(:jamis))
200
+ assert_includes scoped_developers, developers(:david)
201
+ assert_not_includes scoped_developers, developers(:jamis)
148
202
  assert_equal 1, scoped_developers.size
149
203
  assert_equal developers(:david).attributes, scoped_developers.first.attributes
150
204
  end
151
205
 
152
206
  def test_scoped_create_with_where
153
- new_comment = VerySpecialComment.where(:post_id => 1).scoping do
154
- VerySpecialComment.create :body => "Wonderful world"
207
+ new_comment = VerySpecialComment.where(post_id: 1).scoping do
208
+ VerySpecialComment.create body: "Wonderful world"
209
+ end
210
+
211
+ assert_equal 1, new_comment.post_id
212
+ assert_includes Post.find(1).comments, new_comment
213
+ end
214
+
215
+ def test_scoped_create_with_where_with_array
216
+ new_comment = VerySpecialComment.where(label: [0, 1], post_id: 1).scoping do
217
+ VerySpecialComment.create body: "Wonderful world"
218
+ end
219
+
220
+ assert_equal 1, new_comment.post_id
221
+ assert_equal "default", new_comment.label
222
+ assert_includes Post.find(1).comments, new_comment
223
+ end
224
+
225
+ def test_scoped_create_with_where_with_range
226
+ new_comment = VerySpecialComment.where(label: 0..1, post_id: 1).scoping do
227
+ VerySpecialComment.create body: "Wonderful world"
155
228
  end
156
229
 
157
230
  assert_equal 1, new_comment.post_id
158
- assert Post.find(1).comments.include?(new_comment)
231
+ assert_equal "default", new_comment.label
232
+ assert_includes Post.find(1).comments, new_comment
159
233
  end
160
234
 
161
235
  def test_scoped_create_with_create_with
162
- new_comment = VerySpecialComment.create_with(:post_id => 1).scoping do
163
- VerySpecialComment.create :body => "Wonderful world"
236
+ new_comment = VerySpecialComment.create_with(post_id: 1).scoping do
237
+ VerySpecialComment.create body: "Wonderful world"
164
238
  end
165
239
 
166
240
  assert_equal 1, new_comment.post_id
167
- assert Post.find(1).comments.include?(new_comment)
241
+ assert_includes Post.find(1).comments, new_comment
168
242
  end
169
243
 
170
244
  def test_scoped_create_with_create_with_has_higher_priority
171
- new_comment = VerySpecialComment.where(:post_id => 2).create_with(:post_id => 1).scoping do
172
- VerySpecialComment.create :body => "Wonderful world"
245
+ new_comment = VerySpecialComment.where(post_id: 2).create_with(post_id: 1).scoping do
246
+ VerySpecialComment.create body: "Wonderful world"
173
247
  end
174
248
 
175
249
  assert_equal 1, new_comment.post_id
176
- assert Post.find(1).comments.include?(new_comment)
250
+ assert_includes Post.find(1).comments, new_comment
177
251
  end
178
252
 
179
253
  def test_ensure_that_method_scoping_is_correctly_restored
@@ -193,7 +267,7 @@ class RelationScopingTest < ActiveRecord::TestCase
193
267
  end
194
268
 
195
269
  def test_update_all_default_scope_filters_on_joins
196
- DeveloperFilteredOnJoins.update_all(:salary => 65000)
270
+ DeveloperFilteredOnJoins.update_all(salary: 65000)
197
271
  assert_equal 65000, Developer.find(developers(:david).id).salary
198
272
 
199
273
  # has not changed jamis
@@ -211,21 +285,21 @@ class RelationScopingTest < ActiveRecord::TestCase
211
285
 
212
286
  def test_current_scope_does_not_pollute_sibling_subclasses
213
287
  Comment.none.scoping do
214
- assert_not SpecialComment.all.any?
215
- assert_not VerySpecialComment.all.any?
216
- assert_not SubSpecialComment.all.any?
288
+ assert_not_predicate SpecialComment.all, :any?
289
+ assert_not_predicate VerySpecialComment.all, :any?
290
+ assert_not_predicate SubSpecialComment.all, :any?
217
291
  end
218
292
 
219
293
  SpecialComment.none.scoping do
220
- assert Comment.all.any?
221
- assert VerySpecialComment.all.any?
222
- assert_not SubSpecialComment.all.any?
294
+ assert_predicate Comment.all, :any?
295
+ assert_predicate VerySpecialComment.all, :any?
296
+ assert_not_predicate SubSpecialComment.all, :any?
223
297
  end
224
298
 
225
299
  SubSpecialComment.none.scoping do
226
- assert Comment.all.any?
227
- assert VerySpecialComment.all.any?
228
- assert SpecialComment.all.any?
300
+ assert_predicate Comment.all, :any?
301
+ assert_predicate VerySpecialComment.all, :any?
302
+ assert_predicate SpecialComment.all, :any?
229
303
  end
230
304
  end
231
305
 
@@ -238,6 +312,30 @@ class RelationScopingTest < ActiveRecord::TestCase
238
312
  assert_nil SpecialComment.current_scope
239
313
  end
240
314
 
315
+ def test_scoping_respects_current_class
316
+ Comment.unscoped do
317
+ assert_equal "a comment...", Comment.all.what_are_you
318
+ assert_equal "a special comment...", SpecialComment.all.what_are_you
319
+ end
320
+ end
321
+
322
+ def test_scoping_respects_sti_constraint
323
+ Comment.unscoped do
324
+ assert_equal comments(:greetings), Comment.find(1)
325
+ assert_raises(ActiveRecord::RecordNotFound) { SpecialComment.find(1) }
326
+ end
327
+ end
328
+
329
+ def test_scoping_with_klass_method_works_in_the_scope_block
330
+ expected = SpecialPostWithDefaultScope.unscoped.to_a
331
+ assert_equal expected, SpecialPostWithDefaultScope.unscoped_all
332
+ end
333
+
334
+ def test_scoping_with_query_method_works_in_the_scope_block
335
+ expected = SpecialPostWithDefaultScope.unscoped.where(author_id: 0).to_a
336
+ assert_equal expected, SpecialPostWithDefaultScope.authorless
337
+ end
338
+
241
339
  def test_circular_joins_with_scoping_does_not_crash
242
340
  posts = Post.joins(comments: :post).scoping do
243
341
  Post.first(10)
@@ -254,10 +352,10 @@ class RelationScopingTest < ActiveRecord::TestCase
254
352
  end
255
353
 
256
354
  class NestedRelationScopingTest < ActiveRecord::TestCase
257
- fixtures :authors, :developers, :projects, :comments, :posts
355
+ fixtures :authors, :author_addresses, :developers, :projects, :comments, :posts
258
356
 
259
357
  def test_merge_options
260
- Developer.where('salary = 80000').scoping do
358
+ Developer.where("salary = 80000").scoping do
261
359
  Developer.limit(10).scoping do
262
360
  devs = Developer.all
263
361
  sql = devs.to_sql
@@ -276,39 +374,39 @@ class NestedRelationScopingTest < ActiveRecord::TestCase
276
374
  end
277
375
 
278
376
  def test_replace_options
279
- Developer.where(:name => 'David').scoping do
377
+ Developer.where(name: "David").scoping do
280
378
  Developer.unscoped do
281
- assert_equal 'Jamis', Developer.where(:name => 'Jamis').first[:name]
379
+ assert_equal "Jamis", Developer.where(name: "Jamis").first[:name]
282
380
  end
283
381
 
284
- assert_equal 'David', Developer.first[:name]
382
+ assert_equal "David", Developer.first[:name]
285
383
  end
286
384
  end
287
385
 
288
386
  def test_three_level_nested_exclusive_scoped_find
289
387
  Developer.where("name = 'Jamis'").scoping do
290
- assert_equal 'Jamis', Developer.first.name
388
+ assert_equal "Jamis", Developer.first.name
291
389
 
292
390
  Developer.unscoped.where("name = 'David'") do
293
- assert_equal 'David', Developer.first.name
391
+ assert_equal "David", Developer.first.name
294
392
 
295
393
  Developer.unscoped.where("name = 'Maiha'") do
296
- assert_equal nil, Developer.first
394
+ assert_nil Developer.first
297
395
  end
298
396
 
299
397
  # ensure that scoping is restored
300
- assert_equal 'David', Developer.first.name
398
+ assert_equal "David", Developer.first.name
301
399
  end
302
400
 
303
401
  # ensure that scoping is restored
304
- assert_equal 'Jamis', Developer.first.name
402
+ assert_equal "Jamis", Developer.first.name
305
403
  end
306
404
  end
307
405
 
308
406
  def test_nested_scoped_create
309
- comment = Comment.create_with(:post_id => 1).scoping do
310
- Comment.create_with(:post_id => 2).scoping do
311
- Comment.create :body => "Hey guys, nested scopes are broken. Please fix!"
407
+ comment = Comment.create_with(post_id: 1).scoping do
408
+ Comment.create_with(post_id: 2).scoping do
409
+ Comment.create body: "Hey guys, nested scopes are broken. Please fix!"
312
410
  end
313
411
  end
314
412
 
@@ -316,15 +414,15 @@ class NestedRelationScopingTest < ActiveRecord::TestCase
316
414
  end
317
415
 
318
416
  def test_nested_exclusive_scope_for_create
319
- comment = Comment.create_with(:body => "Hey guys, nested scopes are broken. Please fix!").scoping do
320
- Comment.unscoped.create_with(:post_id => 1).scoping do
321
- assert Comment.new.body.blank?
322
- Comment.create :body => "Hey guys"
417
+ comment = Comment.create_with(body: "Hey guys, nested scopes are broken. Please fix!").scoping do
418
+ Comment.unscoped.create_with(post_id: 1).scoping do
419
+ assert_predicate Comment.new.body, :blank?
420
+ Comment.create body: "Hey guys"
323
421
  end
324
422
  end
325
423
 
326
424
  assert_equal 1, comment.post_id
327
- assert_equal 'Hey guys', comment.body
425
+ assert_equal "Hey guys", comment.body
328
426
  end
329
427
  end
330
428
 
@@ -336,24 +434,36 @@ class HasManyScopingTest < ActiveRecord::TestCase
336
434
  end
337
435
 
338
436
  def test_forwarding_of_static_methods
339
- assert_equal 'a comment...', Comment.what_are_you
340
- assert_equal 'a comment...', @welcome.comments.what_are_you
437
+ assert_equal "a comment...", Comment.what_are_you
438
+ assert_equal "a comment...", @welcome.comments.what_are_you
341
439
  end
342
440
 
343
441
  def test_forwarding_to_scoped
344
- assert_equal 4, Comment.search_by_type('Comment').size
345
- assert_equal 2, @welcome.comments.search_by_type('Comment').size
442
+ assert_equal 5, Comment.search_by_type("Comment").size
443
+ assert_equal 2, @welcome.comments.search_by_type("Comment").size
346
444
  end
347
445
 
348
446
  def test_nested_scope_finder
349
- Comment.where('1=0').scoping do
350
- assert_equal 0, @welcome.comments.count
351
- assert_equal 'a comment...', @welcome.comments.what_are_you
447
+ Comment.where("1=0").scoping do
448
+ assert_equal 2, @welcome.comments.count
449
+ assert_equal "a comment...", @welcome.comments.what_are_you
352
450
  end
353
451
 
354
- Comment.where('1=1').scoping do
452
+ Comment.where("1=1").scoping do
355
453
  assert_equal 2, @welcome.comments.count
356
- assert_equal 'a comment...', @welcome.comments.what_are_you
454
+ assert_equal "a comment...", @welcome.comments.what_are_you
455
+ end
456
+ end
457
+
458
+ def test_none_scoping
459
+ Comment.none.scoping do
460
+ assert_equal 2, @welcome.comments.count
461
+ assert_equal "a comment...", @welcome.comments.what_are_you
462
+ end
463
+
464
+ Comment.where("1=1").scoping do
465
+ assert_equal 2, @welcome.comments.count
466
+ assert_equal "a comment...", @welcome.comments.what_are_you
357
467
  end
358
468
  end
359
469
 
@@ -368,7 +478,7 @@ class HasManyScopingTest < ActiveRecord::TestCase
368
478
  end
369
479
 
370
480
  def test_should_maintain_default_scope_on_eager_loaded_associations
371
- michael = Person.where(:id => people(:michael).id).includes(:bad_references).first
481
+ michael = Person.where(id: people(:michael).id).includes(:bad_references).first
372
482
  magician = BadReference.find(1)
373
483
  assert_equal [magician], michael.bad_references
374
484
  end
@@ -382,19 +492,31 @@ class HasAndBelongsToManyScopingTest < ActiveRecord::TestCase
382
492
  end
383
493
 
384
494
  def test_forwarding_of_static_methods
385
- assert_equal 'a category...', Category.what_are_you
386
- assert_equal 'a category...', @welcome.categories.what_are_you
495
+ assert_equal "a category...", Category.what_are_you
496
+ assert_equal "a category...", @welcome.categories.what_are_you
387
497
  end
388
498
 
389
499
  def test_nested_scope_finder
390
- Category.where('1=0').scoping do
391
- assert_equal 0, @welcome.categories.count
392
- assert_equal 'a category...', @welcome.categories.what_are_you
500
+ Category.where("1=0").scoping do
501
+ assert_equal 2, @welcome.categories.count
502
+ assert_equal "a category...", @welcome.categories.what_are_you
503
+ end
504
+
505
+ Category.where("1=1").scoping do
506
+ assert_equal 2, @welcome.categories.count
507
+ assert_equal "a category...", @welcome.categories.what_are_you
508
+ end
509
+ end
510
+
511
+ def test_none_scoping
512
+ Category.none.scoping do
513
+ assert_equal 2, @welcome.categories.count
514
+ assert_equal "a category...", @welcome.categories.what_are_you
393
515
  end
394
516
 
395
- Category.where('1=1').scoping do
517
+ Category.where("1=1").scoping do
396
518
  assert_equal 2, @welcome.categories.count
397
- assert_equal 'a category...', @welcome.categories.what_are_you
519
+ assert_equal "a category...", @welcome.categories.what_are_you
398
520
  end
399
521
  end
400
522
  end
@@ -1,5 +1,7 @@
1
- require 'cases/helper'
2
- require 'models/user'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/user"
3
5
 
4
6
  class SecureTokenTest < ActiveRecord::TestCase
5
7
  setup do
@@ -10,6 +12,8 @@ class SecureTokenTest < ActiveRecord::TestCase
10
12
  @user.save
11
13
  assert_not_nil @user.token
12
14
  assert_not_nil @user.auth_token
15
+ assert_equal 24, @user.token.size
16
+ assert_equal 36, @user.auth_token.size
13
17
  end
14
18
 
15
19
  def test_regenerating_the_secure_token
@@ -21,12 +25,23 @@ class SecureTokenTest < ActiveRecord::TestCase
21
25
 
22
26
  assert_not_equal @user.token, old_token
23
27
  assert_not_equal @user.auth_token, old_auth_token
28
+
29
+ assert_equal 24, @user.token.size
30
+ assert_equal 36, @user.auth_token.size
24
31
  end
25
32
 
26
33
  def test_token_value_not_overwritten_when_present
27
34
  @user.token = "custom-secure-token"
28
35
  @user.save
29
36
 
30
- assert_equal @user.token, "custom-secure-token"
37
+ assert_equal "custom-secure-token", @user.token
38
+ end
39
+
40
+ def test_token_length_cannot_be_less_than_24_characters
41
+ assert_raises(ActiveRecord::SecureToken::MinimumLengthError) do
42
+ @user.class_eval do
43
+ has_secure_token :not_valid_token, length: 12
44
+ end
45
+ end
31
46
  end
32
47
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cases/helper"
2
- require 'models/contact'
3
- require 'models/topic'
4
- require 'models/book'
5
- require 'models/author'
6
- require 'models/post'
4
+ require "models/contact"
5
+ require "models/topic"
6
+ require "models/book"
7
+ require "models/author"
8
+ require "models/post"
7
9
 
8
10
  class SerializationTest < ActiveRecord::TestCase
9
11
  fixtures :books
@@ -12,14 +14,14 @@ class SerializationTest < ActiveRecord::TestCase
12
14
 
13
15
  def setup
14
16
  @contact_attributes = {
15
- :name => 'aaron stack',
16
- :age => 25,
17
- :avatar => 'binarydata',
18
- :created_at => Time.utc(2006, 8, 1),
19
- :awesome => false,
20
- :preferences => { :gem => '<strong>ruby</strong>' },
21
- :alternative_id => nil,
22
- :id => nil
17
+ name: "aaron stack",
18
+ age: 25,
19
+ avatar: "binarydata",
20
+ created_at: Time.utc(2006, 8, 1),
21
+ awesome: false,
22
+ preferences: { gem: "<strong>ruby</strong>" },
23
+ alternative_id: nil,
24
+ id: nil
23
25
  }
24
26
  end
25
27
 
@@ -29,8 +31,8 @@ class SerializationTest < ActiveRecord::TestCase
29
31
 
30
32
  def test_serialize_should_be_reversible
31
33
  FORMATS.each do |format|
32
- @serialized = Contact.new.send("to_#{format}")
33
- contact = Contact.new.send("from_#{format}", @serialized)
34
+ @serialized = Contact.new.public_send("to_#{format}")
35
+ contact = Contact.new.public_send("from_#{format}", @serialized)
34
36
 
35
37
  assert_equal @contact_attributes.keys.collect(&:to_s).sort, contact.attributes.keys.collect(&:to_s).sort, "For #{format}"
36
38
  end
@@ -38,8 +40,8 @@ class SerializationTest < ActiveRecord::TestCase
38
40
 
39
41
  def test_serialize_should_allow_attribute_only_filtering
40
42
  FORMATS.each do |format|
41
- @serialized = Contact.new(@contact_attributes).send("to_#{format}", :only => [ :age, :name ])
42
- contact = Contact.new.send("from_#{format}", @serialized)
43
+ @serialized = Contact.new(@contact_attributes).public_send("to_#{format}", only: [ :age, :name ])
44
+ contact = Contact.new.public_send("from_#{format}", @serialized)
43
45
  assert_equal @contact_attributes[:name], contact.name, "For #{format}"
44
46
  assert_nil contact.avatar, "For #{format}"
45
47
  end
@@ -47,8 +49,8 @@ class SerializationTest < ActiveRecord::TestCase
47
49
 
48
50
  def test_serialize_should_allow_attribute_except_filtering
49
51
  FORMATS.each do |format|
50
- @serialized = Contact.new(@contact_attributes).send("to_#{format}", :except => [ :age, :name ])
51
- contact = Contact.new.send("from_#{format}", @serialized)
52
+ @serialized = Contact.new(@contact_attributes).public_send("to_#{format}", except: [ :age, :name ])
53
+ contact = Contact.new.public_send("from_#{format}", @serialized)
52
54
  assert_nil contact.name, "For #{format}"
53
55
  assert_nil contact.age, "For #{format}"
54
56
  assert_equal @contact_attributes[:awesome], contact.awesome, "For #{format}"
@@ -60,20 +62,20 @@ class SerializationTest < ActiveRecord::TestCase
60
62
  ActiveRecord::Base.include_root_in_json = true
61
63
 
62
64
  klazz = Class.new(ActiveRecord::Base)
63
- klazz.table_name = 'topics'
65
+ klazz.table_name = "topics"
64
66
  assert klazz.include_root_in_json
65
67
 
66
68
  klazz.include_root_in_json = false
67
69
  assert ActiveRecord::Base.include_root_in_json
68
- assert !klazz.include_root_in_json
69
- assert !klazz.new.include_root_in_json
70
+ assert_not klazz.include_root_in_json
71
+ assert_not klazz.new.include_root_in_json
70
72
  ensure
71
73
  ActiveRecord::Base.include_root_in_json = original_root_in_json
72
74
  end
73
75
 
74
76
  def test_read_attribute_for_serialization_with_format_without_method_missing
75
77
  klazz = Class.new(ActiveRecord::Base)
76
- klazz.table_name = 'books'
78
+ klazz.table_name = "books"
77
79
 
78
80
  book = klazz.new
79
81
  assert_nil book.read_attribute_for_serialization(:format)
@@ -81,18 +83,18 @@ class SerializationTest < ActiveRecord::TestCase
81
83
 
82
84
  def test_read_attribute_for_serialization_with_format_after_init
83
85
  klazz = Class.new(ActiveRecord::Base)
84
- klazz.table_name = 'books'
86
+ klazz.table_name = "books"
85
87
 
86
- book = klazz.new(format: 'paperback')
87
- assert_equal 'paperback', book.read_attribute_for_serialization(:format)
88
+ book = klazz.new(format: "paperback")
89
+ assert_equal "paperback", book.read_attribute_for_serialization(:format)
88
90
  end
89
91
 
90
92
  def test_read_attribute_for_serialization_with_format_after_find
91
93
  klazz = Class.new(ActiveRecord::Base)
92
- klazz.table_name = 'books'
94
+ klazz.table_name = "books"
93
95
 
94
96
  book = klazz.find(books(:awdr).id)
95
- assert_equal 'paperback', book.read_attribute_for_serialization(:format)
97
+ assert_equal "paperback", book.read_attribute_for_serialization(:format)
96
98
  end
97
99
 
98
100
  def test_find_records_by_serialized_attributes_through_join