ibm_db 3.0.5-x86-mingw32 → 5.0.5-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 (358) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/ParameterizedQueries README +6 -6
  5. data/README +38 -55
  6. data/ext/Makefile +269 -0
  7. data/ext/extconf.rb +34 -3
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +100 -108
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db_cli.o +0 -0
  15. data/ext/unicode_support_version +3 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
  18. data/lib/mswin32/ibm_db.rb +7 -39
  19. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  20. data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
  21. data/test/cases/adapter_test.rb +133 -58
  22. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  24. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  27. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  28. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  29. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  30. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  31. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  32. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  33. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  34. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  35. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  36. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  37. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  38. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  39. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  40. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  41. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  42. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  43. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  44. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  45. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  46. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  47. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  48. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  49. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  50. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  51. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  52. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  53. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  54. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  55. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  56. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  57. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  58. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  59. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  60. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  61. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  62. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  63. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  64. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  65. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  66. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  67. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  68. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  69. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  70. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  71. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  72. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  73. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  74. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  75. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  76. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  77. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  78. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  79. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  80. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  81. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  82. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  83. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  84. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  85. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  87. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  88. data/test/cases/aggregations_test.rb +11 -1
  89. data/test/cases/ar_schema_test.rb +35 -50
  90. data/test/cases/associations/association_scope_test.rb +1 -6
  91. data/test/cases/associations/belongs_to_associations_test.rb +122 -10
  92. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  93. data/test/cases/associations/callbacks_test.rb +5 -7
  94. data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
  95. data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
  96. data/test/cases/associations/eager_test.rb +158 -73
  97. data/test/cases/associations/extension_test.rb +7 -2
  98. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
  99. data/test/cases/associations/has_many_associations_test.rb +362 -43
  100. data/test/cases/associations/has_many_through_associations_test.rb +108 -41
  101. data/test/cases/associations/has_one_associations_test.rb +105 -8
  102. data/test/cases/associations/has_one_through_associations_test.rb +6 -3
  103. data/test/cases/associations/inner_join_association_test.rb +3 -3
  104. data/test/cases/associations/inverse_associations_test.rb +38 -11
  105. data/test/cases/associations/join_model_test.rb +59 -36
  106. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  107. data/test/cases/associations/nested_through_associations_test.rb +2 -2
  108. data/test/cases/associations/required_test.rb +25 -5
  109. data/test/cases/associations_test.rb +39 -34
  110. data/test/cases/attribute_decorators_test.rb +9 -8
  111. data/test/cases/attribute_methods/read_test.rb +5 -5
  112. data/test/cases/attribute_methods_test.rb +97 -40
  113. data/test/cases/attribute_set_test.rb +64 -4
  114. data/test/cases/attribute_test.rb +84 -18
  115. data/test/cases/attributes_test.rb +151 -34
  116. data/test/cases/autosave_association_test.rb +149 -36
  117. data/test/cases/base_test.rb +290 -241
  118. data/test/cases/batches_test.rb +299 -22
  119. data/test/cases/binary_test.rb +2 -10
  120. data/test/cases/bind_parameter_test.rb +76 -66
  121. data/test/cases/cache_key_test.rb +26 -0
  122. data/test/cases/calculations_test.rb +167 -15
  123. data/test/cases/callbacks_test.rb +161 -68
  124. data/test/cases/coders/json_test.rb +15 -0
  125. data/test/cases/collection_cache_key_test.rb +115 -0
  126. data/test/cases/column_definition_test.rb +26 -57
  127. data/test/cases/comment_test.rb +145 -0
  128. data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
  129. data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
  130. data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
  131. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
  132. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
  133. data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
  134. data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
  135. data/test/cases/connection_management_test.rb +46 -56
  136. data/test/cases/connection_pool_test.rb +195 -20
  137. data/test/cases/connection_specification/resolver_test.rb +15 -0
  138. data/test/cases/counter_cache_test.rb +10 -5
  139. data/test/cases/custom_locking_test.rb +1 -1
  140. data/test/cases/database_statements_test.rb +18 -3
  141. data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
  142. data/test/cases/date_time_precision_test.rb +107 -0
  143. data/test/cases/defaults_test.rb +85 -89
  144. data/test/cases/dirty_test.rb +30 -52
  145. data/test/cases/disconnected_test.rb +4 -2
  146. data/test/cases/enum_test.rb +178 -24
  147. data/test/cases/errors_test.rb +16 -0
  148. data/test/cases/explain_test.rb +32 -21
  149. data/test/cases/finder_test.rb +273 -148
  150. data/test/cases/fixture_set/file_test.rb +18 -0
  151. data/test/cases/fixtures_test.rb +112 -32
  152. data/test/cases/forbidden_attributes_protection_test.rb +69 -3
  153. data/test/cases/helper.rb +10 -16
  154. data/test/cases/hot_compatibility_test.rb +89 -1
  155. data/test/cases/inheritance_test.rb +284 -53
  156. data/test/cases/integration_test.rb +23 -7
  157. data/test/cases/invalid_connection_test.rb +4 -2
  158. data/test/cases/invertible_migration_test.rb +124 -32
  159. data/test/cases/json_serialization_test.rb +11 -2
  160. data/test/cases/locking_test.rb +22 -6
  161. data/test/cases/log_subscriber_test.rb +106 -17
  162. data/test/cases/migration/change_schema_test.rb +60 -114
  163. data/test/cases/migration/change_table_test.rb +34 -2
  164. data/test/cases/migration/column_attributes_test.rb +7 -23
  165. data/test/cases/migration/column_positioning_test.rb +8 -8
  166. data/test/cases/migration/columns_test.rb +17 -11
  167. data/test/cases/migration/command_recorder_test.rb +47 -2
  168. data/test/cases/migration/compatibility_test.rb +118 -0
  169. data/test/cases/migration/create_join_table_test.rb +21 -12
  170. data/test/cases/migration/foreign_key_test.rb +52 -18
  171. data/test/cases/migration/index_test.rb +14 -12
  172. data/test/cases/migration/logger_test.rb +1 -1
  173. data/test/cases/migration/pending_migrations_test.rb +0 -1
  174. data/test/cases/migration/references_foreign_key_test.rb +59 -7
  175. data/test/cases/migration/references_index_test.rb +4 -4
  176. data/test/cases/migration/references_statements_test.rb +26 -6
  177. data/test/cases/migration/rename_table_test.rb +25 -25
  178. data/test/cases/migration_test.rb +279 -81
  179. data/test/cases/migrator_test.rb +91 -8
  180. data/test/cases/mixin_test.rb +0 -2
  181. data/test/cases/modules_test.rb +3 -4
  182. data/test/cases/multiparameter_attributes_test.rb +24 -2
  183. data/test/cases/multiple_db_test.rb +11 -4
  184. data/test/cases/nested_attributes_test.rb +61 -33
  185. data/test/cases/persistence_test.rb +102 -10
  186. data/test/cases/pooled_connections_test.rb +3 -3
  187. data/test/cases/primary_keys_test.rb +170 -31
  188. data/test/cases/query_cache_test.rb +216 -96
  189. data/test/cases/quoting_test.rb +65 -19
  190. data/test/cases/readonly_test.rb +2 -1
  191. data/test/cases/reflection_test.rb +68 -22
  192. data/test/cases/relation/delegation_test.rb +3 -8
  193. data/test/cases/relation/merging_test.rb +10 -14
  194. data/test/cases/relation/mutation_test.rb +42 -24
  195. data/test/cases/relation/or_test.rb +92 -0
  196. data/test/cases/relation/predicate_builder_test.rb +4 -2
  197. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  198. data/test/cases/relation/where_chain_test.rb +23 -99
  199. data/test/cases/relation/where_clause_test.rb +182 -0
  200. data/test/cases/relation/where_test.rb +45 -23
  201. data/test/cases/relation_test.rb +67 -58
  202. data/test/cases/relations_test.rb +249 -38
  203. data/test/cases/result_test.rb +10 -0
  204. data/test/cases/sanitize_test.rb +108 -15
  205. data/test/cases/schema_dumper_test.rb +119 -125
  206. data/test/cases/schema_loading_test.rb +52 -0
  207. data/test/cases/scoping/default_scoping_test.rb +113 -39
  208. data/test/cases/scoping/named_scoping_test.rb +46 -9
  209. data/test/cases/scoping/relation_scoping_test.rb +47 -4
  210. data/test/cases/secure_token_test.rb +32 -0
  211. data/test/cases/serialization_test.rb +1 -1
  212. data/test/cases/serialized_attribute_test.rb +93 -6
  213. data/test/cases/statement_cache_test.rb +38 -0
  214. data/test/cases/store_test.rb +2 -1
  215. data/test/cases/suppressor_test.rb +63 -0
  216. data/test/cases/tasks/database_tasks_test.rb +73 -9
  217. data/test/cases/tasks/mysql_rake_test.rb +139 -118
  218. data/test/cases/tasks/postgresql_rake_test.rb +60 -6
  219. data/test/cases/tasks/sqlite_rake_test.rb +30 -3
  220. data/test/cases/test_case.rb +28 -20
  221. data/test/cases/test_fixtures_test.rb +36 -0
  222. data/test/cases/time_precision_test.rb +103 -0
  223. data/test/cases/timestamp_test.rb +44 -10
  224. data/test/cases/touch_later_test.rb +121 -0
  225. data/test/cases/transaction_callbacks_test.rb +128 -62
  226. data/test/cases/transaction_isolation_test.rb +2 -2
  227. data/test/cases/transactions_test.rb +61 -43
  228. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  229. data/test/cases/type/date_time_test.rb +14 -0
  230. data/test/cases/type/integer_test.rb +2 -96
  231. data/test/cases/type/string_test.rb +0 -14
  232. data/test/cases/type_test.rb +39 -0
  233. data/test/cases/types_test.rb +1 -118
  234. data/test/cases/unconnected_test.rb +1 -1
  235. data/test/cases/validations/absence_validation_test.rb +73 -0
  236. data/test/cases/validations/association_validation_test.rb +13 -2
  237. data/test/cases/validations/i18n_validation_test.rb +6 -10
  238. data/test/cases/validations/length_validation_test.rb +62 -30
  239. data/test/cases/validations/presence_validation_test.rb +36 -1
  240. data/test/cases/validations/uniqueness_validation_test.rb +128 -37
  241. data/test/cases/validations_repair_helper.rb +2 -6
  242. data/test/cases/validations_test.rb +36 -7
  243. data/test/cases/view_test.rb +102 -5
  244. data/test/cases/yaml_serialization_test.rb +21 -26
  245. data/test/config.example.yml +97 -0
  246. data/test/fixtures/bad_posts.yml +9 -0
  247. data/test/fixtures/books.yml +20 -0
  248. data/test/fixtures/content.yml +3 -0
  249. data/test/fixtures/content_positions.yml +3 -0
  250. data/test/fixtures/dead_parrots.yml +5 -0
  251. data/test/fixtures/live_parrots.yml +4 -0
  252. data/test/fixtures/naked/yml/parrots.yml +2 -0
  253. data/test/fixtures/naked/yml/trees.yml +3 -0
  254. data/test/fixtures/nodes.yml +29 -0
  255. data/test/fixtures/other_comments.yml +6 -0
  256. data/test/fixtures/other_dogs.yml +2 -0
  257. data/test/fixtures/other_posts.yml +7 -0
  258. data/test/fixtures/price_estimates.yml +10 -1
  259. data/test/fixtures/trees.yml +3 -0
  260. data/test/migrations/10_urban/9_add_expressions.rb +1 -1
  261. data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
  262. data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
  263. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
  264. data/test/migrations/missing/1_people_have_last_names.rb +2 -2
  265. data/test/migrations/missing/3_we_need_reminders.rb +2 -2
  266. data/test/migrations/missing/4_innocent_jointable.rb +2 -2
  267. data/test/migrations/rename/1_we_need_things.rb +2 -2
  268. data/test/migrations/rename/2_rename_things.rb +2 -2
  269. data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
  270. data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
  271. data/test/migrations/to_copy2/1_create_articles.rb +1 -1
  272. data/test/migrations/to_copy2/2_create_comments.rb +1 -1
  273. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
  274. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
  275. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
  276. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
  277. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
  278. data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
  279. data/test/migrations/valid/2_we_need_reminders.rb +2 -2
  280. data/test/migrations/valid/3_innocent_jointable.rb +2 -2
  281. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
  282. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
  283. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
  284. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
  285. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
  286. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
  287. data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
  288. data/test/models/admin/randomly_named_c1.rb +6 -2
  289. data/test/models/aircraft.rb +1 -0
  290. data/test/models/author.rb +4 -7
  291. data/test/models/bird.rb +1 -1
  292. data/test/models/book.rb +5 -0
  293. data/test/models/bulb.rb +2 -1
  294. data/test/models/car.rb +3 -0
  295. data/test/models/cat.rb +10 -0
  296. data/test/models/chef.rb +1 -0
  297. data/test/models/club.rb +2 -0
  298. data/test/models/comment.rb +17 -5
  299. data/test/models/company.rb +4 -2
  300. data/test/models/company_in_module.rb +1 -1
  301. data/test/models/contact.rb +1 -1
  302. data/test/models/content.rb +40 -0
  303. data/test/models/customer.rb +8 -2
  304. data/test/models/developer.rb +19 -0
  305. data/test/models/face.rb +1 -1
  306. data/test/models/guitar.rb +4 -0
  307. data/test/models/hotel.rb +2 -0
  308. data/test/models/member.rb +1 -0
  309. data/test/models/member_detail.rb +4 -3
  310. data/test/models/mentor.rb +3 -0
  311. data/test/models/mocktail_designer.rb +2 -0
  312. data/test/models/node.rb +5 -0
  313. data/test/models/non_primary_key.rb +2 -0
  314. data/test/models/notification.rb +3 -0
  315. data/test/models/other_dog.rb +5 -0
  316. data/test/models/owner.rb +4 -1
  317. data/test/models/parrot.rb +6 -7
  318. data/test/models/person.rb +0 -1
  319. data/test/models/pet.rb +3 -0
  320. data/test/models/pet_treasure.rb +6 -0
  321. data/test/models/pirate.rb +3 -3
  322. data/test/models/post.rb +18 -9
  323. data/test/models/project.rb +9 -0
  324. data/test/models/randomly_named_c1.rb +1 -1
  325. data/test/models/recipe.rb +3 -0
  326. data/test/models/ship.rb +8 -2
  327. data/test/models/tag.rb +6 -0
  328. data/test/models/topic.rb +2 -8
  329. data/test/models/tree.rb +3 -0
  330. data/test/models/tuning_peg.rb +4 -0
  331. data/test/models/user.rb +14 -0
  332. data/test/models/uuid_item.rb +6 -0
  333. data/test/schema/mysql2_specific_schema.rb +33 -23
  334. data/test/schema/oracle_specific_schema.rb +1 -4
  335. data/test/schema/postgresql_specific_schema.rb +36 -124
  336. data/test/schema/schema.rb +170 -65
  337. data/test/schema/schema.rb.original +1057 -0
  338. data/test/schema/sqlite_specific_schema.rb +1 -5
  339. data/test/support/connection.rb +1 -0
  340. data/test/support/schema_dumping_helper.rb +1 -1
  341. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  342. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  343. metadata +146 -30
  344. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  345. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  346. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  347. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  348. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  349. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  350. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  351. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  352. data/test/cases/migration/table_and_index_test.rb +0 -24
  353. data/test/cases/relation/where_test2.rb +0 -36
  354. data/test/cases/type/decimal_test.rb +0 -56
  355. data/test/cases/type/unsigned_integer_test.rb +0 -18
  356. data/test/cases/xml_serialization_test.rb +0 -457
  357. data/test/fixtures/naked/csv/accounts.csv +0 -1
  358. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -123,6 +123,24 @@ END
123
123
  end
124
124
  end
125
125
 
126
+ def test_removes_fixture_config_row
127
+ File.open(::File.join(FIXTURES_ROOT, 'other_posts.yml')) do |fh|
128
+ assert_equal(['second_welcome'], fh.each.map { |name, _| name })
129
+ end
130
+ end
131
+
132
+ def test_extracts_model_class_from_config_row
133
+ File.open(::File.join(FIXTURES_ROOT, 'other_posts.yml')) do |fh|
134
+ assert_equal 'Post', fh.model_class
135
+ end
136
+ end
137
+
138
+ def test_erb_filename
139
+ filename = 'filename.yaml'
140
+ erb = File.new(filename).send(:prepare_erb, "<% Rails.env %>\n")
141
+ assert_equal erb.filename, filename
142
+ end
143
+
126
144
  private
127
145
  def tmp_yaml(name, contents)
128
146
  t = Tempfile.new name
@@ -7,16 +7,18 @@ require 'models/binary'
7
7
  require 'models/book'
8
8
  require 'models/bulb'
9
9
  require 'models/category'
10
+ require 'models/comment'
10
11
  require 'models/company'
11
12
  require 'models/computer'
12
13
  require 'models/course'
13
14
  require 'models/developer'
14
- require 'models/computer'
15
+ require "models/dog"
16
+ require 'models/doubloon'
15
17
  require 'models/joke'
16
18
  require 'models/matey'
19
+ require "models/other_dog"
17
20
  require 'models/parrot'
18
21
  require 'models/pirate'
19
- require 'models/doubloon'
20
22
  require 'models/post'
21
23
  require 'models/randomly_named_c1'
22
24
  require 'models/reply'
@@ -29,10 +31,10 @@ require 'tempfile'
29
31
 
30
32
  class FixturesTest < ActiveRecord::TestCase
31
33
  self.use_instantiated_fixtures = true
32
- self.use_transactional_fixtures = false
34
+ self.use_transactional_tests = false
33
35
 
34
36
  # other_topics fixture should not be included here
35
- fixtures :topics, :developers, :accounts, :tasks, :categories, :funny_jokes, :binaries, :traffic_lights, :author_addresses
37
+ fixtures :topics, :developers, :accounts, :tasks, :categories, :funny_jokes, :binaries, :traffic_lights
36
38
 
37
39
  FIXTURES = %w( accounts binaries companies customers
38
40
  developers developers_projects entrants
@@ -184,7 +186,6 @@ class FixturesTest < ActiveRecord::TestCase
184
186
  end
185
187
 
186
188
  def test_fixtures_from_root_yml_with_instantiation
187
- # assert_equal 2, @accounts.size
188
189
  assert_equal 50, @unknown.credit_limit
189
190
  end
190
191
 
@@ -263,18 +264,19 @@ class FixturesTest < ActiveRecord::TestCase
263
264
  def test_fixtures_are_set_up_with_database_env_variable
264
265
  db_url_tmp = ENV['DATABASE_URL']
265
266
  ENV['DATABASE_URL'] = "sqlite3::memory:"
266
- ActiveRecord::Base.stubs(:configurations).returns({})
267
- test_case = Class.new(ActiveRecord::TestCase) do
268
- fixtures :accounts
267
+ ActiveRecord::Base.stub(:configurations, {}) do
268
+ test_case = Class.new(ActiveRecord::TestCase) do
269
+ fixtures :accounts
269
270
 
270
- def test_fixtures
271
- assert accounts(:signals37)
271
+ def test_fixtures
272
+ assert accounts(:signals37)
273
+ end
272
274
  end
273
- end
274
275
 
275
- result = test_case.new(:test_fixtures).run
276
+ result = test_case.new(:test_fixtures).run
276
277
 
277
- assert result.passed?, "Expected #{result.name} to pass:\n#{result}"
278
+ assert result.passed?, "Expected #{result.name} to pass:\n#{result}"
279
+ end
278
280
  ensure
279
281
  ENV['DATABASE_URL'] = db_url_tmp
280
282
  end
@@ -412,9 +414,11 @@ class FixturesWithoutInstantiationTest < ActiveRecord::TestCase
412
414
  end
413
415
 
414
416
  def test_reloading_fixtures_through_accessor_methods
417
+ topic = Struct.new(:title)
415
418
  assert_equal "The First Topic", topics(:first).title
416
- @loaded_fixtures['topics']['first'].expects(:find).returns(stub(:title => "Fresh Topic!"))
417
- assert_equal "Fresh Topic!", topics(:first, true).title
419
+ assert_called(@loaded_fixtures['topics']['first'], :find, returns: topic.new("Fresh Topic!")) do
420
+ assert_equal "Fresh Topic!", topics(:first, true).title
421
+ end
418
422
  end
419
423
  end
420
424
 
@@ -431,7 +435,7 @@ end
431
435
 
432
436
  class TransactionalFixturesTest < ActiveRecord::TestCase
433
437
  self.use_instantiated_fixtures = true
434
- self.use_transactional_fixtures = true
438
+ self.use_transactional_tests = true
435
439
 
436
440
  fixtures :topics
437
441
 
@@ -477,7 +481,6 @@ class SetupSubclassTest < SetupTest
477
481
  end
478
482
  end
479
483
 
480
-
481
484
  class OverlappingFixturesTest < ActiveRecord::TestCase
482
485
  fixtures :topics, :developers
483
486
  fixtures :developers, :accounts
@@ -518,12 +521,44 @@ class OverRideFixtureMethodTest < ActiveRecord::TestCase
518
521
  end
519
522
  end
520
523
 
524
+ class FixtureWithSetModelClassTest < ActiveRecord::TestCase
525
+ fixtures :other_posts, :other_comments
526
+
527
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
528
+ # and thus takes into account the +set_model_class+.
529
+ self.use_transactional_tests = false
530
+
531
+ def test_uses_fixture_class_defined_in_yaml
532
+ assert_kind_of Post, other_posts(:second_welcome)
533
+ end
534
+
535
+ def test_loads_the_associations_to_fixtures_with_set_model_class
536
+ post = other_posts(:second_welcome)
537
+ comment = other_comments(:second_greetings)
538
+ assert_equal [comment], post.comments
539
+ assert_equal post, comment.post
540
+ end
541
+ end
542
+
543
+ class SetFixtureClassPrevailsTest < ActiveRecord::TestCase
544
+ set_fixture_class bad_posts: Post
545
+ fixtures :bad_posts
546
+
547
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
548
+ # and thus takes into account the +set_model_class+.
549
+ self.use_transactional_tests = false
550
+
551
+ def test_uses_set_fixture_class
552
+ assert_kind_of Post, bad_posts(:bad_welcome)
553
+ end
554
+ end
555
+
521
556
  class CheckSetTableNameFixturesTest < ActiveRecord::TestCase
522
557
  set_fixture_class :funny_jokes => Joke
523
558
  fixtures :funny_jokes
524
559
  # Set to false to blow away fixtures cache and ensure our fixtures are loaded
525
560
  # and thus takes into account our set_fixture_class
526
- self.use_transactional_fixtures = false
561
+ self.use_transactional_tests = false
527
562
 
528
563
  def test_table_method
529
564
  assert_kind_of Joke, funny_jokes(:a_joke)
@@ -535,7 +570,7 @@ class FixtureNameIsNotTableNameFixturesTest < ActiveRecord::TestCase
535
570
  fixtures :items
536
571
  # Set to false to blow away fixtures cache and ensure our fixtures are loaded
537
572
  # and thus takes into account our set_fixture_class
538
- self.use_transactional_fixtures = false
573
+ self.use_transactional_tests = false
539
574
 
540
575
  def test_named_accessor
541
576
  assert_kind_of Book, items(:dvd)
@@ -547,7 +582,7 @@ class FixtureNameIsNotTableNameMultipleFixturesTest < ActiveRecord::TestCase
547
582
  fixtures :items, :funny_jokes
548
583
  # Set to false to blow away fixtures cache and ensure our fixtures are loaded
549
584
  # and thus takes into account our set_fixture_class
550
- self.use_transactional_fixtures = false
585
+ self.use_transactional_tests = false
551
586
 
552
587
  def test_named_accessor_of_differently_named_fixture
553
588
  assert_kind_of Book, items(:dvd)
@@ -561,7 +596,7 @@ end
561
596
  class CustomConnectionFixturesTest < ActiveRecord::TestCase
562
597
  set_fixture_class :courses => Course
563
598
  fixtures :courses
564
- self.use_transactional_fixtures = false
599
+ self.use_transactional_tests = false
565
600
 
566
601
  def test_leaky_destroy
567
602
  assert_nothing_raised { courses(:ruby) }
@@ -576,7 +611,7 @@ end
576
611
  class TransactionalFixturesOnCustomConnectionTest < ActiveRecord::TestCase
577
612
  set_fixture_class :courses => Course
578
613
  fixtures :courses
579
- self.use_transactional_fixtures = true
614
+ self.use_transactional_tests = true
580
615
 
581
616
  def test_leaky_destroy
582
617
  assert_nothing_raised { courses(:ruby) }
@@ -592,7 +627,7 @@ class InvalidTableNameFixturesTest < ActiveRecord::TestCase
592
627
  fixtures :funny_jokes
593
628
  # Set to false to blow away fixtures cache and ensure our fixtures are loaded
594
629
  # and thus takes into account our lack of set_fixture_class
595
- self.use_transactional_fixtures = false
630
+ self.use_transactional_tests = false
596
631
 
597
632
  def test_raises_error
598
633
  assert_raise ActiveRecord::FixtureClassNotFound do
@@ -606,7 +641,7 @@ class CheckEscapedYamlFixturesTest < ActiveRecord::TestCase
606
641
  fixtures :funny_jokes
607
642
  # Set to false to blow away fixtures cache and ensure our fixtures are loaded
608
643
  # and thus takes into account our set_fixture_class
609
- self.use_transactional_fixtures = false
644
+ self.use_transactional_tests = false
610
645
 
611
646
  def test_proper_escaped_fixture
612
647
  assert_equal "The \\n Aristocrats\nAte the candy\n", funny_jokes(:another_joke).name
@@ -676,7 +711,7 @@ class LoadAllFixturesWithPathnameTest < ActiveRecord::TestCase
676
711
  end
677
712
 
678
713
  class FasterFixturesTest < ActiveRecord::TestCase
679
- self.use_transactional_fixtures = false
714
+ self.use_transactional_tests = false
680
715
  fixtures :categories, :authors
681
716
 
682
717
  def load_extra_fixture(name)
@@ -702,7 +737,8 @@ class FasterFixturesTest < ActiveRecord::TestCase
702
737
  end
703
738
 
704
739
  class FoxyFixturesTest < ActiveRecord::TestCase
705
- fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers, :developers, :"admin/accounts", :"admin/users"
740
+ fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers,
741
+ :developers, :"admin/accounts", :"admin/users", :live_parrots, :dead_parrots, :books
706
742
 
707
743
  if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
708
744
  require 'models/uuid_parent'
@@ -822,6 +858,10 @@ class FoxyFixturesTest < ActiveRecord::TestCase
822
858
  assert_equal("X marks the spot!", pirates(:mark).catchphrase)
823
859
  end
824
860
 
861
+ def test_supports_label_interpolation_for_integer_label
862
+ assert_equal("#1 pirate!", pirates(1).catchphrase)
863
+ end
864
+
825
865
  def test_supports_polymorphic_belongs_to
826
866
  assert_equal(pirates(:redbeard), treasures(:sapphire).looter)
827
867
  assert_equal(parrots(:louis), treasures(:ruby).looter)
@@ -838,10 +878,23 @@ class FoxyFixturesTest < ActiveRecord::TestCase
838
878
  assert_equal pirates(:blackbeard), parrots(:polly).killer
839
879
  end
840
880
 
881
+ def test_supports_sti_with_respective_files
882
+ assert_kind_of LiveParrot, live_parrots(:dusty)
883
+ assert_kind_of DeadParrot, dead_parrots(:deadbird)
884
+ assert_equal pirates(:blackbeard), dead_parrots(:deadbird).killer
885
+ end
886
+
841
887
  def test_namespaced_models
842
888
  assert admin_accounts(:signals37).users.include?(admin_users(:david))
843
889
  assert_equal 2, admin_accounts(:signals37).users.size
844
890
  end
891
+
892
+ def test_resolves_enums
893
+ assert books(:awdr).published?
894
+ assert books(:awdr).read?
895
+ assert books(:rfr).proposed?
896
+ assert books(:ddd).published?
897
+ end
845
898
  end
846
899
 
847
900
  class ActiveSupportSubclassWithFixturesTest < ActiveRecord::TestCase
@@ -860,9 +913,9 @@ class CustomNameForFixtureOrModelTest < ActiveRecord::TestCase
860
913
  set_fixture_class :randomly_named_a9 =>
861
914
  ClassNameThatDoesNotFollowCONVENTIONS,
862
915
  :'admin/randomly_named_a9' =>
863
- Admin::ClassNameThatDoesNotFollowCONVENTIONS,
916
+ Admin::ClassNameThatDoesNotFollowCONVENTIONS1,
864
917
  'admin/randomly_named_b0' =>
865
- Admin::ClassNameThatDoesNotFollowCONVENTIONS
918
+ Admin::ClassNameThatDoesNotFollowCONVENTIONS2
866
919
 
867
920
  fixtures :randomly_named_a9, 'admin/randomly_named_a9',
868
921
  :'admin/randomly_named_b0'
@@ -873,15 +926,15 @@ class CustomNameForFixtureOrModelTest < ActiveRecord::TestCase
873
926
  end
874
927
 
875
928
  def test_named_accessor_for_randomly_named_namespaced_fixture_and_class
876
- assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS,
929
+ assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS1,
877
930
  admin_randomly_named_a9(:first_instance)
878
- assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS,
931
+ assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS2,
879
932
  admin_randomly_named_b0(:second_instance)
880
933
  end
881
934
 
882
935
  def test_table_name_is_defined_in_the_model
883
- assert_equal 'randomly_named_table', ActiveRecord::FixtureSet::all_loaded_fixtures["admin/randomly_named_a9"].table_name
884
- assert_equal 'randomly_named_table', Admin::ClassNameThatDoesNotFollowCONVENTIONS.table_name
936
+ assert_equal 'randomly_named_table2', ActiveRecord::FixtureSet::all_loaded_fixtures["admin/randomly_named_a9"].table_name
937
+ assert_equal 'randomly_named_table2', Admin::ClassNameThatDoesNotFollowCONVENTIONS1.table_name
885
938
  end
886
939
  end
887
940
 
@@ -906,3 +959,30 @@ class FixturesWithAbstractBelongsTo < ActiveRecord::TestCase
906
959
  assert_equal pirates(:blackbeard), doubloons(:blackbeards_doubloon).pirate
907
960
  end
908
961
  end
962
+
963
+ class FixtureClassNamesTest < ActiveRecord::TestCase
964
+ def setup
965
+ @saved_cache = self.fixture_class_names.dup
966
+ end
967
+
968
+ def teardown
969
+ self.fixture_class_names.replace(@saved_cache)
970
+ end
971
+
972
+ test "fixture_class_names returns nil for unregistered identifier" do
973
+ assert_nil self.fixture_class_names['unregistered_identifier']
974
+ end
975
+ end
976
+
977
+ class SameNameDifferentDatabaseFixturesTest < ActiveRecord::TestCase
978
+ fixtures :dogs, :other_dogs
979
+
980
+ test "fixtures are properly loaded" do
981
+ # Force loading the fixtures again to reproduce issue
982
+ ActiveRecord::FixtureSet.reset_cache
983
+ create_fixtures("dogs", "other_dogs")
984
+
985
+ assert_kind_of Dog, dogs(:sophie)
986
+ assert_kind_of OtherDog, other_dogs(:lassie)
987
+ end
988
+ end
@@ -1,14 +1,20 @@
1
1
  require 'cases/helper'
2
2
  require 'active_support/core_ext/hash/indifferent_access'
3
- require 'models/person'
3
+
4
4
  require 'models/company'
5
+ require 'models/person'
6
+ require 'models/ship'
7
+ require 'models/ship_part'
8
+ require 'models/treasure'
5
9
 
6
- class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
10
+ class ProtectedParams
7
11
  attr_accessor :permitted
8
12
  alias :permitted? :permitted
9
13
 
14
+ delegate :keys, :key?, :has_key?, :empty?, to: :@parameters
15
+
10
16
  def initialize(attributes)
11
- super(attributes)
17
+ @parameters = attributes.with_indifferent_access
12
18
  @permitted = false
13
19
  end
14
20
 
@@ -17,6 +23,18 @@ class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
17
23
  self
18
24
  end
19
25
 
26
+ def [](key)
27
+ @parameters[key]
28
+ end
29
+
30
+ def to_h
31
+ @parameters
32
+ end
33
+
34
+ def stringify_keys
35
+ dup
36
+ end
37
+
20
38
  def dup
21
39
  super.tap do |duplicate|
22
40
  duplicate.instance_variable_set :@permitted, @permitted
@@ -75,6 +93,13 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
75
93
  end
76
94
  end
77
95
 
96
+ def test_create_with_works_with_permitted_params
97
+ params = ProtectedParams.new(first_name: 'Guille').permit!
98
+
99
+ person = Person.create_with(params).create!
100
+ assert_equal 'Guille', person.first_name
101
+ end
102
+
78
103
  def test_create_with_works_with_params_values
79
104
  params = ProtectedParams.new(first_name: 'Guille')
80
105
 
@@ -90,10 +115,51 @@ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
90
115
  end
91
116
  end
92
117
 
118
+ def test_where_works_with_permitted_params
119
+ params = ProtectedParams.new(first_name: 'Guille').permit!
120
+
121
+ person = Person.where(params).create!
122
+ assert_equal 'Guille', person.first_name
123
+ end
124
+
93
125
  def test_where_works_with_params_values
94
126
  params = ProtectedParams.new(first_name: 'Guille')
95
127
 
96
128
  person = Person.where(first_name: params[:first_name]).create!
97
129
  assert_equal 'Guille', person.first_name
98
130
  end
131
+
132
+ def test_where_not_checks_permitted
133
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
134
+
135
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
136
+ Person.where().not(params)
137
+ end
138
+ end
139
+
140
+ def test_where_not_works_with_permitted_params
141
+ params = ProtectedParams.new(first_name: 'Guille').permit!
142
+ Person.create!(params)
143
+ assert_empty Person.where.not(params).select {|p| p.first_name == 'Guille' }
144
+ end
145
+
146
+ def test_strong_params_style_objects_work_with_singular_associations
147
+ params = ProtectedParams.new( name: "Stern", ship_attributes: ProtectedParams.new(name: "The Black Rock").permit!).permit!
148
+ part = ShipPart.new(params)
149
+
150
+ assert_equal "Stern", part.name
151
+ assert_equal "The Black Rock", part.ship.name
152
+ end
153
+
154
+ def test_strong_params_style_objects_work_with_collection_associations
155
+ params = ProtectedParams.new(
156
+ trinkets_attributes: ProtectedParams.new(
157
+ "0" => ProtectedParams.new(name: "Necklace").permit!,
158
+ "1" => ProtectedParams.new(name: "Spoon").permit! ) ).permit!
159
+ part = ShipPart.new(params)
160
+
161
+ assert_equal "Necklace", part.trinkets[0].name
162
+ assert_equal "Spoon", part.trinkets[1].name
163
+ end
164
+
99
165
  end
@@ -1,8 +1,7 @@
1
- require File.expand_path('../../../../load_paths', __FILE__)
2
-
3
1
  require 'config'
4
2
 
5
3
  require 'active_support/testing/autorun'
4
+ require 'active_support/testing/method_call_assertions'
6
5
  require 'stringio'
7
6
 
8
7
  require 'active_record'
@@ -24,15 +23,15 @@ ActiveSupport::Deprecation.debug = true
24
23
  # Disable available locale checks to avoid warnings running the test suite.
25
24
  I18n.enforce_available_locales = false
26
25
 
27
- # Enable raise errors in after_commit and after_rollback.
28
- ActiveRecord::Base.raise_in_transactional_callbacks = true
29
-
30
26
  # Connect to the database
31
27
  ARTest.connect
32
28
 
33
29
  # Quote "type" if it's a reserved word for the current connection.
34
30
  QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
35
31
 
32
+ # FIXME: Remove this when the deprecation cycle on TZ aware types by default ends.
33
+ ActiveRecord::Base.time_zone_aware_types << :time
34
+
36
35
  def current_adapter?(*types)
37
36
  types.any? do |type|
38
37
  ActiveRecord::ConnectionAdapters.const_defined?(type) &&
@@ -45,13 +44,12 @@ def in_memory_db?
45
44
  ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
46
45
  end
47
46
 
48
- def mysql_56?
49
- current_adapter?(:Mysql2Adapter) &&
50
- ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0"
47
+ def subsecond_precision_supported?
48
+ ActiveRecord::Base.connection.supports_datetime_with_precision?
51
49
  end
52
50
 
53
51
  def mysql_enforcing_gtid_consistency?
54
- current_adapter?(:MysqlAdapter, :Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
52
+ current_adapter?(:Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
55
53
  end
56
54
 
57
55
  def supports_savepoints?
@@ -124,7 +122,7 @@ def enable_extension!(extension, connection)
124
122
  return connection.reconnect! if connection.extension_enabled?(extension)
125
123
 
126
124
  connection.enable_extension extension
127
- connection.commit_db_transaction
125
+ connection.commit_db_transaction if connection.transaction_open?
128
126
  connection.reconnect!
129
127
  end
130
128
 
@@ -140,10 +138,11 @@ require "cases/validations_repair_helper"
140
138
  class ActiveSupport::TestCase
141
139
  include ActiveRecord::TestFixtures
142
140
  include ActiveRecord::ValidationsRepairHelper
141
+ include ActiveSupport::Testing::MethodCallAssertions
143
142
 
144
143
  self.fixture_path = FIXTURES_ROOT
145
144
  self.use_instantiated_fixtures = false
146
- self.use_transactional_fixtures = true
145
+ self.use_transactional_tests = true
147
146
 
148
147
  def create_fixtures(*fixture_set_names, &block)
149
148
  ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
@@ -203,8 +202,3 @@ module InTimeZone
203
202
  end
204
203
 
205
204
  require 'mocha/setup' # FIXME: stop using mocha
206
-
207
- # FIXME: we have tests that depend on run order, we should fix that and
208
- # remove this method call.
209
- require 'active_support/test_case'
210
- ActiveSupport::TestCase.test_order = :sorted