ibm_db 5.2.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 (621) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +9 -0
  3. data/LICENSE +55 -18
  4. data/ext/Makefile +15 -13
  5. data/ext/ibm_db.c +62 -57
  6. data/ext/ibm_db.o +0 -0
  7. data/ext/ibm_db.so +0 -0
  8. data/ext/mkmf.log +26 -24
  9. data/ext/ruby_ibm_db_cli.c +1 -0
  10. data/ext/ruby_ibm_db_cli.o +0 -0
  11. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
  12. data/lib/ibm_db.so +1 -0
  13. data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
  14. data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
  15. data/test/activejob/destroy_association_async_test.rb +305 -0
  16. data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
  17. data/test/activejob/helper.rb +15 -0
  18. data/test/assets/schema_dump_5_1.yml +345 -0
  19. data/test/cases/adapter_prevent_writes_test.rb +334 -0
  20. data/test/cases/adapter_test.rb +432 -218
  21. data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
  22. data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
  24. data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
  27. data/test/cases/adapters/mysql2/connection_test.rb +48 -50
  28. data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
  29. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
  30. data/test/cases/adapters/mysql2/enum_test.rb +32 -11
  31. data/test/cases/adapters/mysql2/explain_test.rb +13 -11
  32. data/test/cases/adapters/mysql2/json_test.rb +17 -188
  33. data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
  34. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
  35. data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
  36. data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
  38. data/test/cases/adapters/mysql2/schema_test.rb +24 -22
  39. data/test/cases/adapters/mysql2/set_test.rb +32 -0
  40. data/test/cases/adapters/mysql2/sp_test.rb +10 -8
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
  42. data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
  43. data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
  44. data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
  45. data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
  46. data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
  47. data/test/cases/adapters/postgresql/array_test.rb +118 -63
  48. data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
  49. data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
  50. data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
  51. data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
  52. data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
  53. data/test/cases/adapters/postgresql/citext_test.rb +58 -58
  54. data/test/cases/adapters/postgresql/collation_test.rb +17 -15
  55. data/test/cases/adapters/postgresql/composite_test.rb +25 -23
  56. data/test/cases/adapters/postgresql/connection_test.rb +73 -85
  57. data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
  58. data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
  59. data/test/cases/adapters/postgresql/date_test.rb +42 -0
  60. data/test/cases/adapters/postgresql/domain_test.rb +9 -7
  61. data/test/cases/adapters/postgresql/enum_test.rb +12 -10
  62. data/test/cases/adapters/postgresql/explain_test.rb +10 -8
  63. data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
  64. data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
  65. data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
  66. data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
  67. data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
  68. data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
  69. data/test/cases/adapters/postgresql/integer_test.rb +2 -0
  70. data/test/cases/adapters/postgresql/interval_test.rb +99 -0
  71. data/test/cases/adapters/postgresql/json_test.rb +16 -201
  72. data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
  73. data/test/cases/adapters/postgresql/money_test.rb +47 -16
  74. data/test/cases/adapters/postgresql/network_test.rb +36 -28
  75. data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
  76. data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
  77. data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
  78. data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
  79. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
  80. data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
  81. data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
  82. data/test/cases/adapters/postgresql/range_test.rb +406 -292
  83. data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
  84. data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
  85. data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
  86. data/test/cases/adapters/postgresql/schema_test.rb +207 -91
  87. data/test/cases/adapters/postgresql/serial_test.rb +9 -7
  88. data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
  89. data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
  90. data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
  91. data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
  92. data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
  93. data/test/cases/adapters/postgresql/utils_test.rb +11 -9
  94. data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
  95. data/test/cases/adapters/postgresql/xml_test.rb +10 -14
  96. data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
  97. data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
  98. data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
  99. data/test/cases/adapters/sqlite3/json_test.rb +29 -0
  100. data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
  101. data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
  102. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
  103. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
  104. data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
  105. data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
  106. data/test/cases/aggregations_test.rb +14 -12
  107. data/test/cases/annotate_test.rb +46 -0
  108. data/test/cases/ar_schema_test.rb +153 -86
  109. data/test/cases/arel/attributes/attribute_test.rb +1145 -0
  110. data/test/cases/arel/attributes/math_test.rb +83 -0
  111. data/test/cases/arel/attributes_test.rb +27 -0
  112. data/test/cases/arel/collectors/bind_test.rb +40 -0
  113. data/test/cases/arel/collectors/composite_test.rb +47 -0
  114. data/test/cases/arel/collectors/sql_string_test.rb +41 -0
  115. data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
  116. data/test/cases/arel/crud_test.rb +65 -0
  117. data/test/cases/arel/delete_manager_test.rb +53 -0
  118. data/test/cases/arel/factory_methods_test.rb +46 -0
  119. data/test/cases/arel/helper.rb +45 -0
  120. data/test/cases/arel/insert_manager_test.rb +241 -0
  121. data/test/cases/arel/nodes/and_test.rb +30 -0
  122. data/test/cases/arel/nodes/as_test.rb +36 -0
  123. data/test/cases/arel/nodes/ascending_test.rb +46 -0
  124. data/test/cases/arel/nodes/bin_test.rb +35 -0
  125. data/test/cases/arel/nodes/binary_test.rb +29 -0
  126. data/test/cases/arel/nodes/bind_param_test.rb +22 -0
  127. data/test/cases/arel/nodes/case_test.rb +96 -0
  128. data/test/cases/arel/nodes/casted_test.rb +18 -0
  129. data/test/cases/arel/nodes/comment_test.rb +22 -0
  130. data/test/cases/arel/nodes/count_test.rb +35 -0
  131. data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
  132. data/test/cases/arel/nodes/descending_test.rb +46 -0
  133. data/test/cases/arel/nodes/distinct_test.rb +21 -0
  134. data/test/cases/arel/nodes/equality_test.rb +62 -0
  135. data/test/cases/arel/nodes/extract_test.rb +43 -0
  136. data/test/cases/arel/nodes/false_test.rb +21 -0
  137. data/test/cases/arel/nodes/grouping_test.rb +26 -0
  138. data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
  139. data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
  140. data/test/cases/arel/nodes/named_function_test.rb +48 -0
  141. data/test/cases/arel/nodes/node_test.rb +22 -0
  142. data/test/cases/arel/nodes/not_test.rb +31 -0
  143. data/test/cases/arel/nodes/or_test.rb +36 -0
  144. data/test/cases/arel/nodes/over_test.rb +69 -0
  145. data/test/cases/arel/nodes/select_core_test.rb +79 -0
  146. data/test/cases/arel/nodes/select_statement_test.rb +51 -0
  147. data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
  148. data/test/cases/arel/nodes/sum_test.rb +35 -0
  149. data/test/cases/arel/nodes/table_alias_test.rb +29 -0
  150. data/test/cases/arel/nodes/true_test.rb +21 -0
  151. data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
  152. data/test/cases/arel/nodes/update_statement_test.rb +60 -0
  153. data/test/cases/arel/nodes/window_test.rb +81 -0
  154. data/test/cases/arel/nodes_test.rb +34 -0
  155. data/test/cases/arel/select_manager_test.rb +1238 -0
  156. data/test/cases/arel/support/fake_record.rb +135 -0
  157. data/test/cases/arel/table_test.rb +216 -0
  158. data/test/cases/arel/update_manager_test.rb +126 -0
  159. data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
  160. data/test/cases/arel/visitors/dot_test.rb +90 -0
  161. data/test/cases/arel/visitors/mysql_test.rb +157 -0
  162. data/test/cases/arel/visitors/postgres_test.rb +366 -0
  163. data/test/cases/arel/visitors/sqlite_test.rb +75 -0
  164. data/test/cases/arel/visitors/to_sql_test.rb +750 -0
  165. data/test/cases/associations/belongs_to_associations_test.rb +510 -158
  166. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
  167. data/test/cases/associations/callbacks_test.rb +56 -38
  168. data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
  169. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
  170. data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
  171. data/test/cases/associations/eager_singularization_test.rb +21 -21
  172. data/test/cases/associations/eager_test.rb +559 -415
  173. data/test/cases/associations/extension_test.rb +18 -12
  174. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
  175. data/test/cases/associations/has_many_associations_test.rb +1038 -465
  176. data/test/cases/associations/has_many_through_associations_test.rb +558 -249
  177. data/test/cases/associations/has_one_associations_test.rb +294 -129
  178. data/test/cases/associations/has_one_through_associations_test.rb +121 -75
  179. data/test/cases/associations/inner_join_association_test.rb +114 -38
  180. data/test/cases/associations/inverse_associations_test.rb +606 -398
  181. data/test/cases/associations/join_model_test.rb +158 -148
  182. data/test/cases/associations/left_outer_join_association_test.rb +59 -24
  183. data/test/cases/associations/nested_through_associations_test.rb +166 -109
  184. data/test/cases/associations/required_test.rb +35 -10
  185. data/test/cases/associations_test.rb +241 -110
  186. data/test/cases/attribute_methods/read_test.rb +11 -11
  187. data/test/cases/attribute_methods_test.rb +413 -298
  188. data/test/cases/attributes_test.rb +145 -27
  189. data/test/cases/autosave_association_test.rb +681 -436
  190. data/test/cases/base_prevent_writes_test.rb +229 -0
  191. data/test/cases/base_test.rb +599 -542
  192. data/test/cases/batches_test.rb +288 -82
  193. data/test/cases/binary_test.rb +26 -31
  194. data/test/cases/bind_parameter_test.rb +194 -21
  195. data/test/cases/boolean_test.rb +52 -0
  196. data/test/cases/cache_key_test.rb +110 -5
  197. data/test/cases/calculations_test.rb +740 -177
  198. data/test/cases/callbacks_test.rb +74 -207
  199. data/test/cases/clone_test.rb +15 -10
  200. data/test/cases/coders/json_test.rb +2 -0
  201. data/test/cases/coders/yaml_column_test.rb +16 -13
  202. data/test/cases/collection_cache_key_test.rb +177 -20
  203. data/test/cases/column_alias_test.rb +9 -7
  204. data/test/cases/column_definition_test.rb +10 -68
  205. data/test/cases/comment_test.rb +166 -107
  206. data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
  207. data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
  208. data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
  209. data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
  210. data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
  211. data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
  212. data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
  213. data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
  214. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
  215. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
  216. data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
  217. data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
  218. data/test/cases/connection_management_test.rb +13 -11
  219. data/test/cases/connection_pool_test.rb +316 -83
  220. data/test/cases/core_test.rb +82 -58
  221. data/test/cases/counter_cache_test.rb +204 -50
  222. data/test/cases/custom_locking_test.rb +5 -3
  223. data/test/cases/database_configurations/hash_config_test.rb +74 -0
  224. data/test/cases/database_configurations/resolver_test.rb +150 -0
  225. data/test/cases/database_configurations_test.rb +145 -0
  226. data/test/cases/database_selector_test.rb +296 -0
  227. data/test/cases/database_statements_test.rb +18 -16
  228. data/test/cases/date_test.rb +8 -16
  229. data/test/cases/date_time_precision_test.rb +100 -78
  230. data/test/cases/date_time_test.rb +23 -8
  231. data/test/cases/defaults_test.rb +106 -71
  232. data/test/cases/delegated_type_test.rb +57 -0
  233. data/test/cases/dirty_test.rb +419 -223
  234. data/test/cases/disconnected_test.rb +6 -6
  235. data/test/cases/dup_test.rb +54 -27
  236. data/test/cases/enum_test.rb +461 -82
  237. data/test/cases/errors_test.rb +7 -7
  238. data/test/cases/explain_subscriber_test.rb +17 -15
  239. data/test/cases/explain_test.rb +11 -19
  240. data/test/cases/filter_attributes_test.rb +153 -0
  241. data/test/cases/finder_respond_to_test.rb +14 -14
  242. data/test/cases/finder_test.rb +669 -287
  243. data/test/cases/fixture_set/file_test.rb +34 -38
  244. data/test/cases/fixtures_test.rb +833 -176
  245. data/test/cases/forbidden_attributes_protection_test.rb +32 -67
  246. data/test/cases/habtm_destroy_order_test.rb +25 -25
  247. data/test/cases/helper.rb +78 -49
  248. data/test/cases/hot_compatibility_test.rb +33 -32
  249. data/test/cases/i18n_test.rb +18 -17
  250. data/test/cases/inheritance_test.rb +180 -115
  251. data/test/cases/insert_all_test.rb +489 -0
  252. data/test/cases/instrumentation_test.rb +101 -0
  253. data/test/cases/integration_test.rb +119 -31
  254. data/test/cases/invalid_connection_test.rb +18 -16
  255. data/test/cases/invertible_migration_test.rb +183 -43
  256. data/test/cases/json_attribute_test.rb +35 -0
  257. data/test/cases/json_serialization_test.rb +57 -58
  258. data/test/cases/json_shared_test_cases.rb +290 -0
  259. data/test/cases/locking_test.rb +413 -119
  260. data/test/cases/log_subscriber_test.rb +68 -26
  261. data/test/cases/marshal_serialization_test.rb +39 -0
  262. data/test/cases/migration/change_schema_test.rb +118 -72
  263. data/test/cases/migration/change_table_test.rb +138 -30
  264. data/test/cases/migration/check_constraint_test.rb +162 -0
  265. data/test/cases/migration/column_attributes_test.rb +45 -35
  266. data/test/cases/migration/column_positioning_test.rb +18 -6
  267. data/test/cases/migration/columns_test.rb +93 -77
  268. data/test/cases/migration/command_recorder_test.rb +121 -34
  269. data/test/cases/migration/compatibility_test.rb +578 -23
  270. data/test/cases/migration/create_join_table_test.rb +35 -25
  271. data/test/cases/migration/foreign_key_test.rb +503 -284
  272. data/test/cases/migration/helper.rb +4 -3
  273. data/test/cases/migration/index_test.rb +119 -70
  274. data/test/cases/migration/logger_test.rb +9 -6
  275. data/test/cases/migration/pending_migrations_test.rb +88 -34
  276. data/test/cases/migration/references_foreign_key_test.rb +164 -150
  277. data/test/cases/migration/references_index_test.rb +38 -19
  278. data/test/cases/migration/references_statements_test.rb +15 -14
  279. data/test/cases/migration/rename_table_test.rb +53 -30
  280. data/test/cases/migration_test.rb +637 -269
  281. data/test/cases/migrator_test.rb +191 -135
  282. data/test/cases/mixin_test.rb +7 -11
  283. data/test/cases/modules_test.rb +36 -34
  284. data/test/cases/multi_db_migrator_test.rb +223 -0
  285. data/test/cases/multiparameter_attributes_test.rb +60 -33
  286. data/test/cases/multiple_db_test.rb +16 -22
  287. data/test/cases/nested_attributes_test.rb +341 -320
  288. data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
  289. data/test/cases/null_relation_test.rb +84 -0
  290. data/test/cases/numeric_data_test.rb +93 -0
  291. data/test/cases/persistence_test.rb +361 -269
  292. data/test/cases/pooled_connections_test.rb +18 -26
  293. data/test/cases/prepared_statement_status_test.rb +48 -0
  294. data/test/cases/primary_keys_test.rb +210 -104
  295. data/test/cases/query_cache_test.rb +610 -141
  296. data/test/cases/quoting_test.rb +132 -31
  297. data/test/cases/readonly_test.rb +49 -48
  298. data/test/cases/reaper_test.rb +146 -32
  299. data/test/cases/reflection_test.rb +167 -156
  300. data/test/cases/relation/delegation_test.rb +49 -36
  301. data/test/cases/relation/delete_all_test.rb +117 -0
  302. data/test/cases/relation/merging_test.rb +319 -42
  303. data/test/cases/relation/mutation_test.rb +55 -93
  304. data/test/cases/relation/or_test.rb +129 -29
  305. data/test/cases/relation/predicate_builder_test.rb +21 -6
  306. data/test/cases/relation/record_fetch_warning_test.rb +5 -3
  307. data/test/cases/relation/select_test.rb +67 -0
  308. data/test/cases/relation/update_all_test.rb +317 -0
  309. data/test/cases/relation/where_chain_test.rb +68 -32
  310. data/test/cases/relation/where_clause_test.rb +136 -61
  311. data/test/cases/relation/where_test.rb +155 -48
  312. data/test/cases/relation_test.rb +266 -112
  313. data/test/cases/relations_test.rb +969 -744
  314. data/test/cases/reload_models_test.rb +13 -9
  315. data/test/cases/reserved_word_test.rb +141 -0
  316. data/test/cases/result_test.rb +68 -17
  317. data/test/cases/sanitize_test.rb +87 -71
  318. data/test/cases/schema_dumper_test.rb +221 -128
  319. data/test/cases/schema_loading_test.rb +3 -2
  320. data/test/cases/scoping/default_scoping_test.rb +185 -144
  321. data/test/cases/scoping/named_scoping_test.rb +177 -89
  322. data/test/cases/scoping/relation_scoping_test.rb +197 -75
  323. data/test/cases/secure_token_test.rb +18 -3
  324. data/test/cases/serialization_test.rb +30 -28
  325. data/test/cases/serialized_attribute_test.rb +133 -42
  326. data/test/cases/signed_id_test.rb +168 -0
  327. data/test/cases/statement_cache_test.rb +41 -24
  328. data/test/cases/statement_invalid_test.rb +42 -0
  329. data/test/cases/store_test.rb +180 -55
  330. data/test/cases/strict_loading_test.rb +473 -0
  331. data/test/cases/suppressor_test.rb +26 -12
  332. data/test/cases/tasks/database_tasks_test.rb +1258 -194
  333. data/test/cases/tasks/mysql_rake_test.rb +370 -298
  334. data/test/cases/tasks/postgresql_rake_test.rb +481 -251
  335. data/test/cases/tasks/sqlite_rake_test.rb +225 -178
  336. data/test/cases/test_case.rb +51 -40
  337. data/test/cases/test_databases_test.rb +79 -0
  338. data/test/cases/test_fixtures_test.rb +79 -19
  339. data/test/cases/time_precision_test.rb +98 -76
  340. data/test/cases/timestamp_test.rb +102 -99
  341. data/test/cases/touch_later_test.rb +12 -10
  342. data/test/cases/transaction_callbacks_test.rb +344 -90
  343. data/test/cases/transaction_isolation_test.rb +12 -12
  344. data/test/cases/transactions_test.rb +612 -162
  345. data/test/cases/type/adapter_specific_registry_test.rb +14 -2
  346. data/test/cases/type/date_time_test.rb +4 -2
  347. data/test/cases/type/integer_test.rb +4 -2
  348. data/test/cases/type/string_test.rb +10 -8
  349. data/test/cases/type/time_test.rb +28 -0
  350. data/test/cases/type/type_map_test.rb +29 -28
  351. data/test/cases/type/unsigned_integer_test.rb +19 -0
  352. data/test/cases/type_test.rb +2 -0
  353. data/test/cases/types_test.rb +3 -1
  354. data/test/cases/unconnected_test.rb +14 -1
  355. data/test/cases/unsafe_raw_sql_test.rb +274 -0
  356. data/test/cases/validations/absence_validation_test.rb +19 -17
  357. data/test/cases/validations/association_validation_test.rb +30 -28
  358. data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
  359. data/test/cases/validations/i18n_validation_test.rb +22 -21
  360. data/test/cases/validations/length_validation_test.rb +34 -33
  361. data/test/cases/validations/numericality_validation_test.rb +181 -0
  362. data/test/cases/validations/presence_validation_test.rb +21 -19
  363. data/test/cases/validations/uniqueness_validation_test.rb +156 -86
  364. data/test/cases/validations_repair_helper.rb +2 -0
  365. data/test/cases/validations_test.rb +61 -26
  366. data/test/cases/view_test.rb +122 -116
  367. data/test/cases/yaml_serialization_test.rb +79 -34
  368. data/test/config.example.yml +19 -19
  369. data/test/config.rb +3 -1
  370. data/test/config.yml +16 -6
  371. data/test/fixtures/all/namespaced/accounts.yml +2 -0
  372. data/test/fixtures/author_addresses.yml +1 -8
  373. data/test/fixtures/authors.yml +1 -7
  374. data/test/fixtures/binaries.yml +4 -0
  375. data/test/fixtures/books.yml +9 -2
  376. data/test/fixtures/categories_posts.yml +3 -0
  377. data/test/fixtures/citations.yml +5 -0
  378. data/test/fixtures/comments.yml +7 -0
  379. data/test/fixtures/companies.yml +5 -0
  380. data/test/fixtures/computers.yml +2 -0
  381. data/test/fixtures/customers.yml +10 -1
  382. data/test/fixtures/developers.yml +1 -1
  383. data/test/fixtures/essays.yml +10 -0
  384. data/test/fixtures/faces.yml +3 -3
  385. data/test/fixtures/humans.yml +5 -0
  386. data/test/fixtures/interests.yml +7 -7
  387. data/test/fixtures/memberships.yml +7 -0
  388. data/test/fixtures/minimalistics.yml +3 -0
  389. data/test/fixtures/mixed_case_monkeys.yml +2 -2
  390. data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
  391. data/test/fixtures/naked/yml/parrots.yml +1 -0
  392. data/test/fixtures/other_books.yml +26 -0
  393. data/test/fixtures/other_posts.yml +1 -0
  394. data/test/fixtures/parrots.yml +7 -1
  395. data/test/fixtures/pirates.yml +3 -0
  396. data/test/fixtures/posts.yml +11 -3
  397. data/test/fixtures/readers.yml +6 -0
  398. data/test/fixtures/reserved_words/values.yml +2 -2
  399. data/test/fixtures/sponsors.yml +3 -0
  400. data/test/fixtures/strict_zines.yml +2 -0
  401. data/test/fixtures/subscribers.yml +1 -1
  402. data/test/fixtures/tasks.yml +1 -1
  403. data/test/fixtures/warehouse-things.yml +3 -0
  404. data/test/migrations/10_urban/9_add_expressions.rb +2 -0
  405. data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
  406. data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
  407. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
  408. data/test/migrations/missing/1_people_have_last_names.rb +2 -0
  409. data/test/migrations/missing/3_we_need_reminders.rb +2 -0
  410. data/test/migrations/missing/4_innocent_jointable.rb +3 -1
  411. data/test/migrations/rename/1_we_need_things.rb +2 -0
  412. data/test/migrations/rename/2_rename_things.rb +2 -0
  413. data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
  414. data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
  415. data/test/migrations/to_copy2/1_create_articles.rb +2 -0
  416. data/test/migrations/to_copy2/2_create_comments.rb +3 -1
  417. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
  418. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
  419. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
  420. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
  421. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
  422. data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
  423. data/test/migrations/valid/2_we_need_reminders.rb +2 -0
  424. data/test/migrations/valid/3_innocent_jointable.rb +3 -1
  425. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
  426. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
  427. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
  428. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
  429. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
  430. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
  431. data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
  432. data/test/models/account.rb +46 -0
  433. data/test/models/admin/account.rb +3 -1
  434. data/test/models/admin/randomly_named_c1.rb +2 -0
  435. data/test/models/admin/user.rb +16 -8
  436. data/test/models/admin.rb +4 -2
  437. data/test/models/aircraft.rb +3 -1
  438. data/test/models/arunit2_model.rb +2 -0
  439. data/test/models/author.rb +153 -102
  440. data/test/models/auto_id.rb +2 -0
  441. data/test/models/autoloadable/extra_firm.rb +2 -0
  442. data/test/models/binary.rb +3 -1
  443. data/test/models/binary_field.rb +6 -0
  444. data/test/models/bird.rb +13 -1
  445. data/test/models/book.rb +14 -4
  446. data/test/models/book_destroy_async.rb +24 -0
  447. data/test/models/boolean.rb +5 -0
  448. data/test/models/bulb.rb +13 -4
  449. data/test/models/cake_designer.rb +2 -0
  450. data/test/models/car.rb +17 -10
  451. data/test/models/carrier.rb +2 -0
  452. data/test/models/cart.rb +5 -0
  453. data/test/models/cat.rb +2 -0
  454. data/test/models/categorization.rb +8 -6
  455. data/test/models/category.rb +28 -16
  456. data/test/models/chef.rb +2 -0
  457. data/test/models/citation.rb +5 -1
  458. data/test/models/club.rb +13 -10
  459. data/test/models/college.rb +4 -2
  460. data/test/models/column.rb +2 -0
  461. data/test/models/column_name.rb +2 -0
  462. data/test/models/comment.rb +32 -10
  463. data/test/models/company.rb +102 -106
  464. data/test/models/company_in_module.rb +27 -26
  465. data/test/models/computer.rb +3 -1
  466. data/test/models/contact.rb +15 -13
  467. data/test/models/content.rb +5 -3
  468. data/test/models/contract.rb +21 -3
  469. data/test/models/country.rb +2 -4
  470. data/test/models/course.rb +3 -1
  471. data/test/models/customer.rb +10 -8
  472. data/test/models/customer_carrier.rb +2 -0
  473. data/test/models/dashboard.rb +2 -0
  474. data/test/models/default.rb +2 -0
  475. data/test/models/department.rb +2 -0
  476. data/test/models/destroy_async_parent.rb +15 -0
  477. data/test/models/destroy_async_parent_soft_delete.rb +20 -0
  478. data/test/models/developer.rb +152 -85
  479. data/test/models/dl_keyed_belongs_to.rb +13 -0
  480. data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
  481. data/test/models/dl_keyed_has_many.rb +5 -0
  482. data/test/models/dl_keyed_has_many_through.rb +5 -0
  483. data/test/models/dl_keyed_has_one.rb +5 -0
  484. data/test/models/dl_keyed_join.rb +10 -0
  485. data/test/models/dog.rb +2 -0
  486. data/test/models/dog_lover.rb +2 -0
  487. data/test/models/doubloon.rb +3 -1
  488. data/test/models/drink_designer.rb +17 -0
  489. data/test/models/edge.rb +4 -2
  490. data/test/models/electron.rb +2 -0
  491. data/test/models/engine.rb +3 -2
  492. data/test/models/entrant.rb +2 -0
  493. data/test/models/entry.rb +5 -0
  494. data/test/models/essay.rb +6 -3
  495. data/test/models/essay_destroy_async.rb +12 -0
  496. data/test/models/event.rb +3 -1
  497. data/test/models/eye.rb +5 -3
  498. data/test/models/face.rb +14 -6
  499. data/test/models/family.rb +6 -0
  500. data/test/models/family_tree.rb +6 -0
  501. data/test/models/friendship.rb +5 -3
  502. data/test/models/frog.rb +8 -0
  503. data/test/models/guid.rb +3 -1
  504. data/test/models/guitar.rb +2 -0
  505. data/test/models/hotel.rb +5 -3
  506. data/test/models/human.rb +39 -0
  507. data/test/models/image.rb +3 -1
  508. data/test/models/interest.rb +14 -3
  509. data/test/models/invoice.rb +4 -2
  510. data/test/models/item.rb +3 -1
  511. data/test/models/job.rb +5 -3
  512. data/test/models/joke.rb +4 -2
  513. data/test/models/keyboard.rb +3 -1
  514. data/test/models/legacy_thing.rb +2 -0
  515. data/test/models/lesson.rb +2 -0
  516. data/test/models/line_item.rb +3 -1
  517. data/test/models/liquid.rb +2 -0
  518. data/test/models/matey.rb +3 -1
  519. data/test/models/measurement.rb +4 -0
  520. data/test/models/member.rb +23 -20
  521. data/test/models/member_detail.rb +3 -0
  522. data/test/models/member_type.rb +2 -0
  523. data/test/models/membership.rb +4 -1
  524. data/test/models/mentor.rb +3 -1
  525. data/test/models/message.rb +5 -0
  526. data/test/models/minimalistic.rb +2 -0
  527. data/test/models/minivan.rb +3 -2
  528. data/test/models/mixed_case_monkey.rb +3 -1
  529. data/test/models/molecule.rb +2 -0
  530. data/test/models/mouse.rb +6 -0
  531. data/test/models/movie.rb +2 -0
  532. data/test/models/node.rb +4 -2
  533. data/test/models/non_primary_key.rb +2 -0
  534. data/test/models/notification.rb +2 -0
  535. data/test/models/numeric_data.rb +12 -0
  536. data/test/models/order.rb +4 -2
  537. data/test/models/organization.rb +9 -7
  538. data/test/models/other_dog.rb +3 -1
  539. data/test/models/owner.rb +6 -4
  540. data/test/models/parrot.rb +12 -4
  541. data/test/models/person.rb +59 -54
  542. data/test/models/personal_legacy_thing.rb +3 -1
  543. data/test/models/pet.rb +4 -2
  544. data/test/models/pet_treasure.rb +2 -0
  545. data/test/models/pirate.rb +67 -43
  546. data/test/models/possession.rb +3 -1
  547. data/test/models/post.rb +184 -86
  548. data/test/models/price_estimate.rb +11 -1
  549. data/test/models/professor.rb +3 -1
  550. data/test/models/project.rb +14 -12
  551. data/test/models/publisher/article.rb +2 -0
  552. data/test/models/publisher/magazine.rb +2 -0
  553. data/test/models/publisher.rb +2 -0
  554. data/test/models/randomly_named_c1.rb +2 -0
  555. data/test/models/rating.rb +5 -1
  556. data/test/models/reader.rb +7 -5
  557. data/test/models/recipe.rb +2 -0
  558. data/test/models/record.rb +2 -0
  559. data/test/models/reference.rb +6 -3
  560. data/test/models/reply.rb +39 -21
  561. data/test/models/room.rb +6 -0
  562. data/test/models/section.rb +6 -0
  563. data/test/models/seminar.rb +6 -0
  564. data/test/models/session.rb +6 -0
  565. data/test/models/ship.rb +12 -9
  566. data/test/models/ship_part.rb +5 -3
  567. data/test/models/shop.rb +4 -2
  568. data/test/models/shop_account.rb +2 -0
  569. data/test/models/speedometer.rb +2 -0
  570. data/test/models/sponsor.rb +8 -5
  571. data/test/models/squeak.rb +6 -0
  572. data/test/models/strict_zine.rb +7 -0
  573. data/test/models/string_key_object.rb +2 -0
  574. data/test/models/student.rb +2 -0
  575. data/test/models/subscriber.rb +4 -2
  576. data/test/models/subscription.rb +5 -1
  577. data/test/models/tag.rb +6 -3
  578. data/test/models/tagging.rb +13 -6
  579. data/test/models/task.rb +2 -0
  580. data/test/models/topic.rb +54 -19
  581. data/test/models/toy.rb +4 -0
  582. data/test/models/traffic_light.rb +2 -0
  583. data/test/models/treasure.rb +5 -3
  584. data/test/models/treaty.rb +2 -4
  585. data/test/models/tree.rb +2 -0
  586. data/test/models/tuning_peg.rb +2 -0
  587. data/test/models/tyre.rb +2 -0
  588. data/test/models/user.rb +12 -4
  589. data/test/models/uuid_child.rb +2 -0
  590. data/test/models/uuid_item.rb +2 -0
  591. data/test/models/uuid_parent.rb +2 -0
  592. data/test/models/vegetables.rb +12 -3
  593. data/test/models/vertex.rb +6 -4
  594. data/test/models/warehouse_thing.rb +2 -0
  595. data/test/models/wheel.rb +3 -1
  596. data/test/models/without_table.rb +3 -1
  597. data/test/models/zine.rb +3 -1
  598. data/test/schema/mysql2_specific_schema.rb +49 -35
  599. data/test/schema/oracle_specific_schema.rb +13 -15
  600. data/test/schema/postgresql_specific_schema.rb +51 -40
  601. data/test/schema/schema.rb +334 -154
  602. data/test/schema/sqlite_specific_schema.rb +9 -16
  603. data/test/support/config.rb +26 -26
  604. data/test/support/connection.rb +14 -8
  605. data/test/support/connection_helper.rb +3 -1
  606. data/test/support/ddl_helper.rb +2 -0
  607. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
  608. data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
  609. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
  610. data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
  611. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
  612. data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
  613. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
  614. data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
  615. data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
  616. data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
  617. data/test/support/schema_dumping_helper.rb +2 -0
  618. data/test/support/stubs/strong_parameters.rb +40 -0
  619. data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
  620. data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
  621. metadata +190 -14
@@ -1,14 +1,16 @@
1
- require 'cases/helper'
2
- require 'models/author'
3
- require 'models/company'
4
- require 'models/membership'
5
- require 'models/person'
6
- require 'models/post'
7
- require 'models/project'
8
- require 'models/subscriber'
9
- require 'models/vegetables'
10
- require 'models/shop'
11
- require 'models/sponsor'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "models/author"
5
+ require "models/company"
6
+ require "models/membership"
7
+ require "models/person"
8
+ require "models/post"
9
+ require "models/project"
10
+ require "models/subscriber"
11
+ require "models/vegetables"
12
+ require "models/shop"
13
+ require "models/sponsor"
12
14
 
13
15
  module InheritanceTestHelper
14
16
  def with_store_full_sti_class(&block)
@@ -34,7 +36,7 @@ class InheritanceTest < ActiveRecord::TestCase
34
36
 
35
37
  def test_class_with_store_full_sti_class_returns_full_name
36
38
  with_store_full_sti_class do
37
- assert_equal 'Namespaced::Company', Namespaced::Company.sti_name
39
+ assert_equal "Namespaced::Company", Namespaced::Company.sti_name
38
40
  end
39
41
  end
40
42
 
@@ -43,37 +45,37 @@ class InheritanceTest < ActiveRecord::TestCase
43
45
  company = company.dup
44
46
  company.extend(Module.new {
45
47
  def _read_attribute(name)
46
- return ' ' if name == 'type'
48
+ return " " if name == "type"
47
49
  super
48
50
  end
49
51
  })
50
52
  company.save!
51
53
  company = Company.all.to_a.find { |x| x.id == company.id }
52
- assert_equal ' ', company.type
54
+ assert_equal " ", company.type
53
55
  end
54
56
 
55
57
  def test_class_without_store_full_sti_class_returns_demodulized_name
56
58
  without_store_full_sti_class do
57
- assert_equal 'Company', Namespaced::Company.sti_name
59
+ assert_equal "Company", Namespaced::Company.sti_name
58
60
  end
59
61
  end
60
62
 
61
63
  def test_compute_type_success
62
- assert_equal Author, ActiveRecord::Base.send(:compute_type, 'Author')
64
+ assert_equal Author, Company.send(:compute_type, "Author")
63
65
  end
64
66
 
65
67
  def test_compute_type_nonexistent_constant
66
68
  e = assert_raises NameError do
67
- ActiveRecord::Base.send :compute_type, 'NonexistentModel'
69
+ Company.send :compute_type, "NonexistentModel"
68
70
  end
69
- assert_equal 'uninitialized constant ActiveRecord::Base::NonexistentModel', e.message
70
- assert_equal 'ActiveRecord::Base::NonexistentModel', e.name
71
+ assert_match "uninitialized constant Company::NonexistentModel", e.message
72
+ assert_equal "Company::NonexistentModel", e.name
71
73
  end
72
74
 
73
75
  def test_compute_type_no_method_error
74
- ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise NoMethodError }) do
76
+ ActiveSupport::Dependencies.stub(:safe_constantize, proc { raise NoMethodError }) do
75
77
  assert_raises NoMethodError do
76
- ActiveRecord::Base.send :compute_type, 'InvalidModel'
78
+ Company.send :compute_type, "InvalidModel"
77
79
  end
78
80
  end
79
81
  end
@@ -88,19 +90,18 @@ class InheritanceTest < ActiveRecord::TestCase
88
90
  error = e
89
91
  end
90
92
 
91
- ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise e }) do
92
-
93
+ ActiveSupport::Dependencies.stub(:safe_constantize, proc { raise e }) do
93
94
  exception = assert_raises NameError do
94
- ActiveRecord::Base.send :compute_type, 'InvalidModel'
95
+ Company.send :compute_type, "InvalidModel"
95
96
  end
96
97
  assert_equal error.message, exception.message
97
98
  end
98
99
  end
99
100
 
100
101
  def test_compute_type_argument_error
101
- ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise ArgumentError }) do
102
+ ActiveSupport::Dependencies.stub(:safe_constantize, proc { raise ArgumentError }) do
102
103
  assert_raises ArgumentError do
103
- ActiveRecord::Base.send :compute_type, 'InvalidModel'
104
+ Company.send :compute_type, "InvalidModel"
104
105
  end
105
106
  end
106
107
  end
@@ -108,14 +109,14 @@ class InheritanceTest < ActiveRecord::TestCase
108
109
  def test_should_store_demodulized_class_name_with_store_full_sti_class_option_disabled
109
110
  without_store_full_sti_class do
110
111
  item = Namespaced::Company.new
111
- assert_equal 'Company', item[:type]
112
+ assert_equal "Company", item[:type]
112
113
  end
113
114
  end
114
115
 
115
116
  def test_should_store_full_class_name_with_store_full_sti_class_option_enabled
116
117
  with_store_full_sti_class do
117
118
  item = Namespaced::Company.new
118
- assert_equal 'Namespaced::Company', item[:type]
119
+ assert_equal "Namespaced::Company", item[:type]
119
120
  end
120
121
  end
121
122
 
@@ -128,56 +129,70 @@ class InheritanceTest < ActiveRecord::TestCase
128
129
  end
129
130
 
130
131
  def test_descends_from_active_record
131
- assert !ActiveRecord::Base.descends_from_active_record?
132
+ assert_not_predicate ActiveRecord::Base, :descends_from_active_record?
132
133
 
133
134
  # Abstract subclass of AR::Base.
134
- assert LoosePerson.descends_from_active_record?
135
+ assert_predicate LoosePerson, :descends_from_active_record?
135
136
 
136
137
  # Concrete subclass of an abstract class.
137
- assert LooseDescendant.descends_from_active_record?
138
+ assert_predicate LooseDescendant, :descends_from_active_record?
138
139
 
139
140
  # Concrete subclass of AR::Base.
140
- assert TightPerson.descends_from_active_record?
141
+ assert_predicate TightPerson, :descends_from_active_record?
141
142
 
142
143
  # Concrete subclass of a concrete class but has no type column.
143
- assert TightDescendant.descends_from_active_record?
144
+ assert_predicate TightDescendant, :descends_from_active_record?
144
145
 
145
146
  # Concrete subclass of AR::Base.
146
- assert Post.descends_from_active_record?
147
+ assert_predicate Post, :descends_from_active_record?
148
+
149
+ # Concrete subclasses of a concrete class which has a type column.
150
+ assert_not_predicate StiPost, :descends_from_active_record?
151
+ assert_not_predicate SubStiPost, :descends_from_active_record?
147
152
 
148
153
  # Abstract subclass of a concrete class which has a type column.
149
154
  # This is pathological, as you'll never have Sub < Abstract < Concrete.
150
- assert !StiPost.descends_from_active_record?
155
+ assert_not_predicate AbstractStiPost, :descends_from_active_record?
151
156
 
152
- # Concrete subclasses an abstract class which has a type column.
153
- assert !SubStiPost.descends_from_active_record?
157
+ # Concrete subclass of an abstract class which has a type column.
158
+ assert_not_predicate SubAbstractStiPost, :descends_from_active_record?
154
159
  end
155
160
 
156
161
  def test_company_descends_from_active_record
157
- assert !ActiveRecord::Base.descends_from_active_record?
158
- assert AbstractCompany.descends_from_active_record?, 'AbstractCompany should descend from ActiveRecord::Base'
159
- assert Company.descends_from_active_record?, 'Company should descend from ActiveRecord::Base'
160
- assert !Class.new(Company).descends_from_active_record?, 'Company subclass should not descend from ActiveRecord::Base'
162
+ assert_not_predicate ActiveRecord::Base, :descends_from_active_record?
163
+ assert AbstractCompany.descends_from_active_record?, "AbstractCompany should descend from ActiveRecord::Base"
164
+ assert Company.descends_from_active_record?, "Company should descend from ActiveRecord::Base"
165
+ assert_not Class.new(Company).descends_from_active_record?, "Company subclass should not descend from ActiveRecord::Base"
161
166
  end
162
167
 
163
168
  def test_abstract_class
164
- assert !ActiveRecord::Base.abstract_class?
165
- assert LoosePerson.abstract_class?
166
- assert !LooseDescendant.abstract_class?
169
+ assert_not_predicate ActiveRecord::Base, :abstract_class?
170
+ assert_predicate LoosePerson, :abstract_class?
171
+ assert_not_predicate LooseDescendant, :abstract_class?
167
172
  end
168
173
 
169
174
  def test_inheritance_base_class
170
175
  assert_equal Post, Post.base_class
176
+ assert_predicate Post, :base_class?
171
177
  assert_equal Post, SpecialPost.base_class
178
+ assert_not_predicate SpecialPost, :base_class?
172
179
  assert_equal Post, StiPost.base_class
173
- assert_equal SubStiPost, SubStiPost.base_class
180
+ assert_not_predicate StiPost, :base_class?
181
+ assert_equal Post, SubStiPost.base_class
182
+ assert_not_predicate SubStiPost, :base_class?
183
+ assert_equal SubAbstractStiPost, SubAbstractStiPost.base_class
184
+ assert_predicate SubAbstractStiPost, :base_class?
174
185
  end
175
186
 
176
187
  def test_abstract_inheritance_base_class
177
188
  assert_equal LoosePerson, LoosePerson.base_class
189
+ assert_predicate LoosePerson, :base_class?
178
190
  assert_equal LooseDescendant, LooseDescendant.base_class
191
+ assert_predicate LooseDescendant, :base_class?
179
192
  assert_equal TightPerson, TightPerson.base_class
193
+ assert_predicate TightPerson, :base_class?
180
194
  assert_equal TightPerson, TightDescendant.base_class
195
+ assert_not_predicate TightDescendant, :base_class?
181
196
  end
182
197
 
183
198
  def test_base_class_activerecord_error
@@ -212,10 +227,20 @@ class InheritanceTest < ActiveRecord::TestCase
212
227
  assert_kind_of Cabbage, cabbage
213
228
  end
214
229
 
230
+ def test_becomes_sets_variables_before_initialization_callbacks
231
+ vegetable = Vegetable.create!(name: "yelling carrot")
232
+ assert_kind_of Vegetable, vegetable
233
+ assert_equal "yelling carrot", vegetable.name
234
+
235
+ yelling_veggie = vegetable.becomes(YellingVegetable)
236
+ assert_equal "YELLING CARROT", yelling_veggie.name, "YellingVegetable name should be YELLING CARROT"
237
+ assert_equal "YELLING CARROT", vegetable.name, "Vegetable name should be YELLING CARROT after becoming a YellingVegetable"
238
+ end
239
+
215
240
  def test_becomes_and_change_tracking_for_inheritance_columns
216
241
  cucumber = Vegetable.find(1)
217
242
  cabbage = cucumber.becomes!(Cabbage)
218
- assert_equal ['Cucumber', 'Cabbage'], cabbage.custom_type_change
243
+ assert_equal ["Cucumber", "Cabbage"], cabbage.custom_type_change
219
244
  end
220
245
 
221
246
  def test_alt_becomes_bang_resets_inheritance_type_column
@@ -225,18 +250,18 @@ class InheritanceTest < ActiveRecord::TestCase
225
250
  cabbage = vegetable.becomes!(Cabbage)
226
251
  assert_equal "Cabbage", cabbage.custom_type
227
252
 
228
- vegetable = cabbage.becomes!(Vegetable)
253
+ cabbage.becomes!(Vegetable)
229
254
  assert_nil cabbage.custom_type
230
255
  end
231
256
 
232
257
  def test_inheritance_find_all
233
- companies = Company.all.merge!(:order => 'id').to_a
258
+ companies = Company.all.merge!(order: "id").to_a
234
259
  assert_kind_of Firm, companies[0], "37signals should be a firm"
235
260
  assert_kind_of Client, companies[1], "Summit should be a client"
236
261
  end
237
262
 
238
263
  def test_alt_inheritance_find_all
239
- companies = Vegetable.all.merge!(:order => 'id').to_a
264
+ companies = Vegetable.all.merge!(order: "id").to_a
240
265
  assert_kind_of Cucumber, companies[0]
241
266
  assert_kind_of Cabbage, companies[1]
242
267
  end
@@ -251,7 +276,7 @@ class InheritanceTest < ActiveRecord::TestCase
251
276
  end
252
277
 
253
278
  def test_alt_inheritance_save
254
- cabbage = Cabbage.new(:name => 'Savoy')
279
+ cabbage = Cabbage.new(name: "Savoy")
255
280
  cabbage.save!
256
281
 
257
282
  savoy = Vegetable.find(cabbage.id)
@@ -264,12 +289,27 @@ class InheritanceTest < ActiveRecord::TestCase
264
289
  end
265
290
 
266
291
  def test_inheritance_new_with_base_class
267
- company = Company.new(:type => 'Company')
292
+ company = Company.new(type: "Company")
268
293
  assert_equal Company, company.class
269
294
  end
270
295
 
271
296
  def test_inheritance_new_with_subclass
272
- firm = Company.new(:type => 'Firm')
297
+ firm = Company.new(type: "Firm")
298
+ assert_equal Firm, firm.class
299
+ end
300
+
301
+ def test_where_new_with_subclass
302
+ firm = Company.where(type: "Firm").new
303
+ assert_equal Firm, firm.class
304
+ end
305
+
306
+ def test_where_create_with_subclass
307
+ firm = Company.where(type: "Firm").create(name: "Basecamp")
308
+ assert_equal Firm, firm.class
309
+ end
310
+
311
+ def test_where_create_bang_with_subclass
312
+ firm = Company.where(type: "Firm").create!(name: "Basecamp")
273
313
  assert_equal Firm, firm.class
274
314
  end
275
315
 
@@ -288,17 +328,41 @@ class InheritanceTest < ActiveRecord::TestCase
288
328
  end
289
329
 
290
330
  def test_new_with_invalid_type
291
- assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'InvalidType') }
331
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.new(type: "InvalidType") }
292
332
  end
293
333
 
294
334
  def test_new_with_unrelated_type
295
- assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'Account') }
335
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.new(type: "Account") }
336
+ end
337
+
338
+ def test_where_new_with_invalid_type
339
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "InvalidType").new }
340
+ end
341
+
342
+ def test_where_new_with_unrelated_type
343
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "Account").new }
344
+ end
345
+
346
+ def test_where_create_with_invalid_type
347
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "InvalidType").create }
348
+ end
349
+
350
+ def test_where_create_with_unrelated_type
351
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "Account").create }
352
+ end
353
+
354
+ def test_where_create_bang_with_invalid_type
355
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "InvalidType").create! }
356
+ end
357
+
358
+ def test_where_create_bang_with_unrelated_type
359
+ assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "Account").create! }
296
360
  end
297
361
 
298
362
  def test_new_with_unrelated_namespaced_type
299
363
  without_store_full_sti_class do
300
364
  e = assert_raises ActiveRecord::SubclassNotFound do
301
- Namespaced::Company.new(type: 'Firm')
365
+ Namespaced::Company.new(type: "Firm")
302
366
  end
303
367
 
304
368
  assert_equal "Invalid single-table inheritance type: Namespaced::Firm is not a subclass of Namespaced::Company", e.message
@@ -306,21 +370,21 @@ class InheritanceTest < ActiveRecord::TestCase
306
370
  end
307
371
 
308
372
  def test_new_with_complex_inheritance
309
- assert_nothing_raised { Client.new(type: 'VerySpecialClient') }
373
+ assert_nothing_raised { Client.new(type: "VerySpecialClient") }
310
374
  end
311
375
 
312
376
  def test_new_without_storing_full_sti_class
313
377
  without_store_full_sti_class do
314
- item = Company.new(type: 'SpecialCo')
378
+ item = Company.new(type: "SpecialCo")
315
379
  assert_instance_of Company::SpecialCo, item
316
380
  end
317
381
  end
318
382
 
319
383
  def test_new_with_autoload_paths
320
- path = File.expand_path('../../models/autoloadable', __FILE__)
384
+ path = File.expand_path("../models/autoloadable", __dir__)
321
385
  ActiveSupport::Dependencies.autoload_paths << path
322
386
 
323
- firm = Company.new(:type => 'ExtraFirm')
387
+ firm = Company.new(type: "ExtraFirm")
324
388
  assert_equal ExtraFirm, firm.class
325
389
  ensure
326
390
  ActiveSupport::Dependencies.autoload_paths.reject! { |p| p == path }
@@ -328,8 +392,8 @@ class InheritanceTest < ActiveRecord::TestCase
328
392
  end
329
393
 
330
394
  def test_inheritance_condition
331
- assert_equal 11, Company.count
332
- assert_equal 2, Firm.count
395
+ assert_equal 12, Company.count
396
+ assert_equal 3, Firm.count
333
397
  assert_equal 5, Client.count
334
398
  end
335
399
 
@@ -353,7 +417,7 @@ class InheritanceTest < ActiveRecord::TestCase
353
417
  Client.update_all "name = 'I am a client'"
354
418
  assert_equal "I am a client", Client.first.name
355
419
  # Order by added as otherwise Oracle tests were failing because of different order of results
356
- assert_equal "37signals", Firm.all.merge!(:order => "id").to_a.first.name
420
+ assert_equal "37signals", Firm.all.merge!(order: "id").to_a.first.name
357
421
  end
358
422
 
359
423
  def test_alt_update_all_within_inheritance
@@ -365,7 +429,7 @@ class InheritanceTest < ActiveRecord::TestCase
365
429
  def test_destroy_all_within_inheritance
366
430
  Client.destroy_all
367
431
  assert_equal 0, Client.count
368
- assert_equal 2, Firm.count
432
+ assert_equal 3, Firm.count
369
433
  end
370
434
 
371
435
  def test_alt_destroy_all_within_inheritance
@@ -375,51 +439,52 @@ class InheritanceTest < ActiveRecord::TestCase
375
439
  end
376
440
 
377
441
  def test_find_first_within_inheritance
378
- assert_kind_of Firm, Company.all.merge!(:where => "name = '37signals'").first
379
- assert_kind_of Firm, Firm.all.merge!(:where => "name = '37signals'").first
380
- assert_nil Client.all.merge!(:where => "name = '37signals'").first
442
+ assert_kind_of Firm, Company.all.merge!(where: "name = '37signals'").first
443
+ assert_kind_of Firm, Firm.all.merge!(where: "name = '37signals'").first
444
+ assert_nil Client.all.merge!(where: "name = '37signals'").first
381
445
  end
382
446
 
383
447
  def test_alt_find_first_within_inheritance
384
- assert_kind_of Cabbage, Vegetable.all.merge!(:where => "name = 'his cabbage'").first
385
- assert_kind_of Cabbage, Cabbage.all.merge!(:where => "name = 'his cabbage'").first
386
- assert_nil Cucumber.all.merge!(:where => "name = 'his cabbage'").first
448
+ assert_kind_of Cabbage, Vegetable.all.merge!(where: "name = 'his cabbage'").first
449
+ assert_kind_of Cabbage, Cabbage.all.merge!(where: "name = 'his cabbage'").first
450
+ assert_nil Cucumber.all.merge!(where: "name = 'his cabbage'").first
387
451
  end
388
452
 
389
453
  def test_complex_inheritance
390
454
  very_special_client = VerySpecialClient.create("name" => "veryspecial")
391
455
  assert_equal very_special_client, VerySpecialClient.where("name = 'veryspecial'").first
392
- assert_equal very_special_client, SpecialClient.all.merge!(:where => "name = 'veryspecial'").first
393
- assert_equal very_special_client, Company.all.merge!(:where => "name = 'veryspecial'").first
394
- assert_equal very_special_client, Client.all.merge!(:where => "name = 'veryspecial'").first
395
- assert_equal 1, Client.all.merge!(:where => "name = 'Summit'").to_a.size
456
+ assert_equal very_special_client, SpecialClient.all.merge!(where: "name = 'veryspecial'").first
457
+ assert_equal very_special_client, Company.all.merge!(where: "name = 'veryspecial'").first
458
+ assert_equal very_special_client, Client.all.merge!(where: "name = 'veryspecial'").first
459
+ assert_equal 1, Client.all.merge!(where: "name = 'Summit'").to_a.size
396
460
  assert_equal very_special_client, Client.find(very_special_client.id)
397
461
  end
398
462
 
399
463
  def test_alt_complex_inheritance
400
464
  king_cole = KingCole.create("name" => "uniform heads")
401
465
  assert_equal king_cole, KingCole.where("name = 'uniform heads'").first
402
- assert_equal king_cole, GreenCabbage.all.merge!(:where => "name = 'uniform heads'").first
403
- assert_equal king_cole, Cabbage.all.merge!(:where => "name = 'uniform heads'").first
404
- assert_equal king_cole, Vegetable.all.merge!(:where => "name = 'uniform heads'").first
405
- assert_equal 1, Cabbage.all.merge!(:where => "name = 'his cabbage'").to_a.size
466
+ assert_equal king_cole, GreenCabbage.all.merge!(where: "name = 'uniform heads'").first
467
+ assert_equal king_cole, Cabbage.all.merge!(where: "name = 'uniform heads'").first
468
+ assert_equal king_cole, Vegetable.all.merge!(where: "name = 'uniform heads'").first
469
+ assert_equal 1, Cabbage.all.merge!(where: "name = 'his cabbage'").to_a.size
406
470
  assert_equal king_cole, Cabbage.find(king_cole.id)
407
471
  end
408
472
 
409
473
  def test_eager_load_belongs_to_something_inherited
410
- account = Account.all.merge!(:includes => :firm).find(1)
474
+ account = Account.all.merge!(includes: :firm).find(1)
411
475
  assert account.association(:firm).loaded?, "association was not eager loaded"
412
476
  end
413
477
 
414
478
  def test_alt_eager_loading
415
- cabbage = RedCabbage.all.merge!(:includes => :seller).find(4)
479
+ cabbage = RedCabbage.all.merge!(includes: :seller).find(4)
416
480
  assert cabbage.association(:seller).loaded?, "association was not eager loaded"
417
481
  end
418
482
 
419
483
  def test_eager_load_belongs_to_primary_key_quoting
420
- con = Account.connection
421
- assert_sql(/#{con.quote_table_name('companies')}.#{con.quote_column_name('id')} = 1/) do
422
- Account.all.merge!(:includes => :firm).find(1)
484
+ c = Account.connection
485
+ bind_param = Arel::Nodes::BindParam.new(nil)
486
+ assert_sql(/#{Regexp.escape(c.quote_table_name("companies.id"))} = (?:#{Regexp.escape(bind_param.to_sql)}|1)/i) do
487
+ Account.all.merge!(includes: :firm).find(1)
423
488
  end
424
489
  end
425
490
 
@@ -429,12 +494,12 @@ class InheritanceTest < ActiveRecord::TestCase
429
494
 
430
495
  def test_inheritance_without_mapping
431
496
  assert_kind_of SpecialSubscriber, SpecialSubscriber.find("webster132")
432
- assert_nothing_raised { s = SpecialSubscriber.new("name" => "And breaaaaathe!"); s.id = 'roger'; s.save }
497
+ assert_nothing_raised { s = SpecialSubscriber.new("name" => "And breaaaaathe!"); s.id = "roger"; s.save }
433
498
  end
434
499
 
435
500
  def test_scope_inherited_properly
436
- assert_nothing_raised { Company.of_first_firm }
437
- assert_nothing_raised { Client.of_first_firm }
501
+ assert_nothing_raised { Company.of_first_firm.to_a }
502
+ assert_nothing_raised { Client.of_first_firm.to_a }
438
503
  end
439
504
 
440
505
  def test_inheritance_with_default_scope
@@ -446,23 +511,20 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
446
511
  include InheritanceTestHelper
447
512
  fixtures :companies
448
513
 
449
- teardown do
450
- self.class.const_remove :FirmOnTheFly rescue nil
451
- Firm.const_remove :FirmOnTheFly rescue nil
452
- end
453
-
454
514
  def test_instantiation_doesnt_try_to_require_corresponding_file
455
515
  without_store_full_sti_class do
456
516
  foo = Firm.first.clone
457
- foo.type = 'FirmOnTheFly'
517
+ foo.type = "FirmOnTheFly"
458
518
  foo.save!
459
519
 
460
520
  # Should fail without FirmOnTheFly in the type condition.
461
521
  assert_raise(ActiveRecord::RecordNotFound) { Firm.find(foo.id) }
522
+ assert_raise(ActiveRecord::RecordNotFound) { Firm.find_by!(id: foo.id) }
462
523
 
463
524
  # Nest FirmOnTheFly in the test case where Dependencies won't see it.
464
525
  self.class.const_set :FirmOnTheFly, Class.new(Firm)
465
526
  assert_raise(ActiveRecord::SubclassNotFound) { Firm.find(foo.id) }
527
+ assert_raise(ActiveRecord::SubclassNotFound) { Firm.find_by!(id: foo.id) }
466
528
 
467
529
  # Nest FirmOnTheFly in Firm where Dependencies will see it.
468
530
  # This is analogous to nesting models in a migration.
@@ -471,34 +533,38 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
471
533
  # And instantiate will find the existing constant rather than trying
472
534
  # to require firm_on_the_fly.
473
535
  assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find(foo.id) }
536
+ assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find_by!(id: foo.id) }
474
537
  end
538
+ ensure
539
+ self.class.send(:remove_const, :FirmOnTheFly) rescue nil
540
+ Firm.send(:remove_const, :FirmOnTheFly) rescue nil
475
541
  end
476
542
 
477
543
  def test_sti_type_from_attributes_disabled_in_non_sti_class
478
- phone = Shop::Product::Type.new(name: 'Phone')
479
- product = Shop::Product.new(:type => phone)
544
+ phone = Shop::Product::Type.new(name: "Phone")
545
+ product = Shop::Product.new(type: phone)
480
546
  assert product.save
481
547
  end
482
548
 
483
549
  def test_inheritance_new_with_subclass_as_default
484
550
  original_type = Company.columns_hash["type"].default
485
- ActiveRecord::Base.connection.change_column_default :companies, :type, 'Firm'
551
+ ActiveRecord::Base.connection.change_column_default :companies, :type, "Firm"
486
552
  Company.reset_column_information
487
553
 
488
554
  firm = Company.new # without arguments
489
- assert_equal 'Firm', firm.type
555
+ assert_equal "Firm", firm.type
490
556
  assert_instance_of Firm, firm
491
557
 
492
- firm = Company.new(firm_name: 'Shri Hans Plastic') # with arguments
493
- assert_equal 'Firm', firm.type
558
+ firm = Company.new(firm_name: "Shri Hans Plastic") # with arguments
559
+ assert_equal "Firm", firm.type
494
560
  assert_instance_of Firm, firm
495
561
 
496
562
  client = Client.new
497
- assert_equal 'Client', client.type
563
+ assert_equal "Client", client.type
498
564
  assert_instance_of Client, client
499
565
 
500
- firm = Company.new(type: 'Client') # overwrite the default type
501
- assert_equal 'Client', firm.type
566
+ firm = Company.new(type: "Client") # overwrite the default type
567
+ assert_equal "Client", firm.type
502
568
  assert_instance_of Client, firm
503
569
  ensure
504
570
  ActiveRecord::Base.connection.change_column_default :companies, :type, original_type
@@ -507,9 +573,8 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
507
573
  end
508
574
 
509
575
  class InheritanceAttributeTest < ActiveRecord::TestCase
510
-
511
576
  class Company < ActiveRecord::Base
512
- self.table_name = 'companies'
577
+ self.table_name = "companies"
513
578
  attribute :type, :string, default: "InheritanceAttributeTest::Startup"
514
579
  end
515
580
 
@@ -521,11 +586,11 @@ class InheritanceAttributeTest < ActiveRecord::TestCase
521
586
 
522
587
  def test_inheritance_new_with_subclass_as_default
523
588
  startup = Company.new # without arguments
524
- assert_equal 'InheritanceAttributeTest::Startup', startup.type
589
+ assert_equal "InheritanceAttributeTest::Startup", startup.type
525
590
  assert_instance_of Startup, startup
526
591
 
527
- empire = Company.new(type: 'InheritanceAttributeTest::Empire') # without arguments
528
- assert_equal 'InheritanceAttributeTest::Empire', empire.type
592
+ empire = Company.new(type: "InheritanceAttributeTest::Empire") # without arguments
593
+ assert_equal "InheritanceAttributeTest::Empire", empire.type
529
594
  assert_instance_of Empire, empire
530
595
  end
531
596
  end
@@ -533,7 +598,7 @@ end
533
598
  class InheritanceAttributeMappingTest < ActiveRecord::TestCase
534
599
  setup do
535
600
  @old_registry = ActiveRecord::Type.registry
536
- ActiveRecord::Type.registry = ActiveRecord::Type::AdapterSpecificRegistry.new
601
+ ActiveRecord::Type.registry = ActiveRecord::Type.registry.dup
537
602
  ActiveRecord::Type.register :omg_sti, InheritanceAttributeMappingTest::OmgStiType
538
603
  Company.delete_all
539
604
  Sponsor.delete_all
@@ -560,7 +625,7 @@ class InheritanceAttributeMappingTest < ActiveRecord::TestCase
560
625
  end
561
626
 
562
627
  class Company < ActiveRecord::Base
563
- self.table_name = 'companies'
628
+ self.table_name = "companies"
564
629
  attribute :type, :omg_sti
565
630
  end
566
631
 
@@ -568,18 +633,18 @@ class InheritanceAttributeMappingTest < ActiveRecord::TestCase
568
633
  class Empire < Company; end
569
634
 
570
635
  class Sponsor < ActiveRecord::Base
571
- self.table_name = 'sponsors'
636
+ self.table_name = "sponsors"
572
637
  attribute :sponsorable_type, :omg_sti
573
638
 
574
639
  belongs_to :sponsorable, polymorphic: true
575
640
  end
576
641
 
577
642
  def test_sti_with_custom_type
578
- Startup.create! name: 'a Startup'
579
- Empire.create! name: 'an Empire'
643
+ Startup.create! name: "a Startup"
644
+ Empire.create! name: "an Empire"
580
645
 
581
646
  assert_equal [["a Startup", "omg_inheritance_attribute_mapping_test/startup"],
582
- ["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows('SELECT name, type FROM companies').sort
647
+ ["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows("SELECT name, type FROM companies").sort
583
648
  assert_equal [["a Startup", "InheritanceAttributeMappingTest::Startup"],
584
649
  ["an Empire", "InheritanceAttributeMappingTest::Empire"]], Company.all.map { |a| [a.name, a.type] }.sort
585
650
 
@@ -588,19 +653,19 @@ class InheritanceAttributeMappingTest < ActiveRecord::TestCase
588
653
  startup.save!
589
654
 
590
655
  assert_equal [["a Startup", "omg_inheritance_attribute_mapping_test/empire"],
591
- ["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows('SELECT name, type FROM companies').sort
656
+ ["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows("SELECT name, type FROM companies").sort
592
657
 
593
658
  assert_equal [["a Startup", "InheritanceAttributeMappingTest::Empire"],
594
659
  ["an Empire", "InheritanceAttributeMappingTest::Empire"]], Company.all.map { |a| [a.name, a.type] }.sort
595
660
  end
596
661
 
597
662
  def test_polymorphic_associations_custom_type
598
- startup = Startup.create! name: 'a Startup'
663
+ startup = Startup.create! name: "a Startup"
599
664
  sponsor = Sponsor.create! sponsorable: startup
600
665
 
601
- assert_equal ["omg_inheritance_attribute_mapping_test/company"], ActiveRecord::Base.connection.select_values('SELECT sponsorable_type FROM sponsors')
666
+ assert_equal ["omg_inheritance_attribute_mapping_test/company"], ActiveRecord::Base.connection.select_values("SELECT sponsorable_type FROM sponsors")
602
667
 
603
- sponsor = Sponsor.first
668
+ sponsor = Sponsor.find(sponsor.id)
604
669
  assert_equal startup, sponsor.sponsorable
605
670
  end
606
671
  end