ibm_db 3.0.4 → 3.0.5

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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -1
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/README +225 -225
  6. data/ext/Makefile.nt32 +181 -181
  7. data/ext/Makefile.nt32.191 +212 -212
  8. data/ext/extconf.rb +291 -291
  9. data/ext/ibm_db.c +11887 -11884
  10. data/ext/ruby_ibm_db.h +241 -241
  11. data/ext/ruby_ibm_db_cli.c +866 -866
  12. data/ext/ruby_ibm_db_cli.h +500 -500
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -27
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
  19. data/test/assets/example.log +1 -1
  20. data/test/assets/test.txt +1 -1
  21. data/test/cases/adapter_test.rb +276 -261
  22. data/test/cases/aggregations_test.rb +158 -158
  23. data/test/cases/ar_schema_test.rb +161 -161
  24. data/test/cases/associations/association_scope_test.rb +21 -21
  25. data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
  26. data/test/cases/associations/callbacks_test.rb +192 -192
  27. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  28. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
  29. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  30. data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
  31. data/test/cases/associations/eager_singularization_test.rb +148 -148
  32. data/test/cases/associations/eager_test.rb +1429 -1411
  33. data/test/cases/associations/extension_test.rb +82 -82
  34. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
  35. data/test/cases/associations/has_many_associations_test.rb +2182 -2162
  36. data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
  37. data/test/cases/associations/has_one_associations_test.rb +610 -610
  38. data/test/cases/associations/has_one_through_associations_test.rb +380 -380
  39. data/test/cases/associations/inner_join_association_test.rb +139 -139
  40. data/test/cases/associations/inverse_associations_test.rb +706 -693
  41. data/test/cases/associations/join_model_test.rb +754 -754
  42. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  43. data/test/cases/associations/required_test.rb +82 -82
  44. data/test/cases/associations_test.rb +380 -380
  45. data/test/cases/attribute_decorators_test.rb +125 -125
  46. data/test/cases/attribute_methods/read_test.rb +60 -60
  47. data/test/cases/attribute_methods/serialization_test.rb +29 -29
  48. data/test/cases/attribute_methods_test.rb +952 -952
  49. data/test/cases/attribute_set_test.rb +210 -200
  50. data/test/cases/attribute_test.rb +180 -180
  51. data/test/cases/attributes_test.rb +136 -136
  52. data/test/cases/autosave_association_test.rb +1595 -1595
  53. data/test/cases/base_test.rb +1664 -1638
  54. data/test/cases/batches_test.rb +212 -212
  55. data/test/cases/binary_test.rb +52 -52
  56. data/test/cases/bind_parameter_test.rb +100 -100
  57. data/test/cases/calculations_test.rb +646 -646
  58. data/test/cases/callbacks_test.rb +543 -543
  59. data/test/cases/clone_test.rb +40 -40
  60. data/test/cases/coders/yaml_column_test.rb +63 -63
  61. data/test/cases/column_alias_test.rb +17 -17
  62. data/test/cases/column_definition_test.rb +123 -123
  63. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
  64. data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
  65. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  66. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
  67. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
  68. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  69. data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
  70. data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
  71. data/test/cases/connection_management_test.rb +122 -122
  72. data/test/cases/connection_pool_test.rb +346 -346
  73. data/test/cases/connection_specification/resolver_test.rb +116 -116
  74. data/test/cases/core_test.rb +112 -112
  75. data/test/cases/counter_cache_test.rb +209 -209
  76. data/test/cases/custom_locking_test.rb +17 -17
  77. data/test/cases/database_statements_test.rb +19 -19
  78. data/test/cases/date_time_test.rb +61 -61
  79. data/test/cases/defaults_test.rb +223 -223
  80. data/test/cases/dirty_test.rb +785 -775
  81. data/test/cases/disconnected_test.rb +28 -28
  82. data/test/cases/dup_test.rb +157 -157
  83. data/test/cases/enum_test.rb +290 -290
  84. data/test/cases/explain_subscriber_test.rb +64 -64
  85. data/test/cases/explain_test.rb +76 -76
  86. data/test/cases/finder_respond_to_test.rb +60 -60
  87. data/test/cases/finder_test.rb +1169 -1166
  88. data/test/cases/fixture_set/file_test.rb +138 -138
  89. data/test/cases/fixtures_test.rb +908 -897
  90. data/test/cases/forbidden_attributes_protection_test.rb +99 -99
  91. data/test/cases/habtm_destroy_order_test.rb +61 -61
  92. data/test/cases/helper.rb +210 -210
  93. data/test/cases/hot_compatibility_test.rb +54 -54
  94. data/test/cases/i18n_test.rb +45 -45
  95. data/test/cases/inheritance_test.rb +375 -375
  96. data/test/cases/integration_test.rb +139 -139
  97. data/test/cases/invalid_connection_test.rb +22 -22
  98. data/test/cases/invalid_date_test.rb +32 -32
  99. data/test/cases/invertible_migration_test.rb +295 -295
  100. data/test/cases/json_serialization_test.rb +302 -302
  101. data/test/cases/locking_test.rb +477 -477
  102. data/test/cases/log_subscriber_test.rb +136 -136
  103. data/test/cases/migration/change_schema_test - Copy.rb +448 -448
  104. data/test/cases/migration/change_schema_test.rb +512 -472
  105. data/test/cases/migration/change_table_test.rb +224 -224
  106. data/test/cases/migration/column_attributes_test.rb +192 -192
  107. data/test/cases/migration/column_positioning_test.rb +56 -56
  108. data/test/cases/migration/columns_test.rb +304 -304
  109. data/test/cases/migration/command_recorder_test.rb +305 -305
  110. data/test/cases/migration/create_join_table_test.rb +148 -148
  111. data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
  112. data/test/cases/migration/foreign_key_test.rb +328 -360
  113. data/test/cases/migration/helper.rb +39 -39
  114. data/test/cases/migration/index_test.rb +216 -216
  115. data/test/cases/migration/logger_test.rb +36 -36
  116. data/test/cases/migration/pending_migrations_test.rb +53 -53
  117. data/test/cases/migration/references_foreign_key_test.rb +169 -214
  118. data/test/cases/migration/references_index_test.rb +101 -101
  119. data/test/cases/migration/references_statements_test.rb +116 -116
  120. data/test/cases/migration/rename_table_test.rb +93 -93
  121. data/test/cases/migration/table_and_index_test.rb +24 -24
  122. data/test/cases/migration_test.rb +959 -959
  123. data/test/cases/migrator_test.rb +388 -388
  124. data/test/cases/mixin_test.rb +70 -70
  125. data/test/cases/modules_test.rb +173 -173
  126. data/test/cases/multiparameter_attributes_test.rb +350 -350
  127. data/test/cases/multiple_db_test.rb +115 -115
  128. data/test/cases/nested_attributes_test.rb +1070 -1057
  129. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  130. data/test/cases/persistence_test.rb +909 -909
  131. data/test/cases/pooled_connections_test.rb +81 -81
  132. data/test/cases/primary_keys_test.rb +237 -237
  133. data/test/cases/query_cache_test.rb +326 -326
  134. data/test/cases/quoting_test.rb +156 -156
  135. data/test/cases/readonly_test.rb +118 -118
  136. data/test/cases/reaper_test.rb +85 -85
  137. data/test/cases/reflection_test.rb +463 -454
  138. data/test/cases/relation/delegation_test.rb +68 -68
  139. data/test/cases/relation/merging_test.rb +161 -161
  140. data/test/cases/relation/mutation_test.rb +165 -165
  141. data/test/cases/relation/predicate_builder_test.rb +14 -14
  142. data/test/cases/relation/where_chain_test.rb +181 -181
  143. data/test/cases/relation/where_test.rb +300 -300
  144. data/test/cases/relation/where_test2.rb +36 -36
  145. data/test/cases/relation_test.rb +319 -297
  146. data/test/cases/relations_test.rb +1815 -1815
  147. data/test/cases/reload_models_test.rb +22 -22
  148. data/test/cases/result_test.rb +80 -80
  149. data/test/cases/sanitize_test.rb +83 -83
  150. data/test/cases/schema_dumper_test.rb +463 -463
  151. data/test/cases/scoping/default_scoping_test.rb +454 -454
  152. data/test/cases/scoping/named_scoping_test.rb +524 -524
  153. data/test/cases/scoping/relation_scoping_test.rb +357 -357
  154. data/test/cases/serialization_test.rb +104 -104
  155. data/test/cases/serialized_attribute_test.rb +277 -277
  156. data/test/cases/statement_cache_test.rb +98 -98
  157. data/test/cases/store_test.rb +194 -194
  158. data/test/cases/tasks/database_tasks_test.rb +398 -396
  159. data/test/cases/tasks/mysql_rake_test.rb +324 -311
  160. data/test/cases/tasks/postgresql_rake_test.rb +250 -245
  161. data/test/cases/tasks/sqlite_rake_test.rb +193 -193
  162. data/test/cases/test_case.rb +123 -123
  163. data/test/cases/timestamp_test.rb +467 -468
  164. data/test/cases/transaction_callbacks_test.rb +452 -452
  165. data/test/cases/transaction_isolation_test.rb +106 -106
  166. data/test/cases/transactions_test.rb +817 -817
  167. data/test/cases/type/decimal_test.rb +56 -51
  168. data/test/cases/type/integer_test.rb +121 -121
  169. data/test/cases/type/string_test.rb +36 -36
  170. data/test/cases/type/type_map_test.rb +177 -177
  171. data/test/cases/type/unsigned_integer_test.rb +18 -18
  172. data/test/cases/types_test.rb +141 -141
  173. data/test/cases/unconnected_test.rb +33 -33
  174. data/test/cases/validations/association_validation_test.rb +86 -86
  175. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  176. data/test/cases/validations/i18n_validation_test.rb +90 -90
  177. data/test/cases/validations/length_validation_test.rb +47 -47
  178. data/test/cases/validations/presence_validation_test.rb +68 -68
  179. data/test/cases/validations/uniqueness_validation_test.rb +457 -434
  180. data/test/cases/validations_repair_helper.rb +23 -23
  181. data/test/cases/validations_test.rb +165 -165
  182. data/test/cases/view_test.rb +119 -113
  183. data/test/cases/xml_serialization_test.rb +457 -457
  184. data/test/cases/yaml_serialization_test.rb +126 -86
  185. data/test/config.rb +5 -5
  186. data/test/config.yml +154 -154
  187. data/test/connections/native_ibm_db/connection.rb +43 -43
  188. data/test/fixtures/accounts.yml +29 -29
  189. data/test/fixtures/admin/accounts.yml +2 -2
  190. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  191. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  192. data/test/fixtures/admin/users.yml +10 -10
  193. data/test/fixtures/author_addresses.yml +17 -17
  194. data/test/fixtures/author_favorites.yml +3 -3
  195. data/test/fixtures/authors.yml +23 -23
  196. data/test/fixtures/binaries.yml +133 -133
  197. data/test/fixtures/books.yml +11 -11
  198. data/test/fixtures/bulbs.yml +5 -5
  199. data/test/fixtures/cars.yml +9 -9
  200. data/test/fixtures/categories.yml +19 -19
  201. data/test/fixtures/categories/special_categories.yml +9 -9
  202. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  203. data/test/fixtures/categories_ordered.yml +7 -7
  204. data/test/fixtures/categories_posts.yml +31 -31
  205. data/test/fixtures/categorizations.yml +23 -23
  206. data/test/fixtures/clubs.yml +8 -8
  207. data/test/fixtures/collections.yml +3 -3
  208. data/test/fixtures/colleges.yml +3 -3
  209. data/test/fixtures/comments.yml +65 -65
  210. data/test/fixtures/companies.yml +67 -67
  211. data/test/fixtures/computers.yml +10 -10
  212. data/test/fixtures/courses.yml +8 -8
  213. data/test/fixtures/customers.yml +25 -25
  214. data/test/fixtures/dashboards.yml +6 -6
  215. data/test/fixtures/developers.yml +21 -21
  216. data/test/fixtures/developers_projects.yml +16 -16
  217. data/test/fixtures/dog_lovers.yml +7 -7
  218. data/test/fixtures/dogs.yml +4 -4
  219. data/test/fixtures/doubloons.yml +3 -3
  220. data/test/fixtures/edges.yml +5 -5
  221. data/test/fixtures/entrants.yml +14 -14
  222. data/test/fixtures/essays.yml +6 -6
  223. data/test/fixtures/faces.yml +11 -11
  224. data/test/fixtures/fk_test_has_fk.yml +3 -3
  225. data/test/fixtures/fk_test_has_pk.yml +1 -1
  226. data/test/fixtures/friendships.yml +4 -4
  227. data/test/fixtures/funny_jokes.yml +10 -10
  228. data/test/fixtures/interests.yml +33 -33
  229. data/test/fixtures/items.yml +3 -3
  230. data/test/fixtures/jobs.yml +7 -7
  231. data/test/fixtures/legacy_things.yml +3 -3
  232. data/test/fixtures/mateys.yml +4 -4
  233. data/test/fixtures/member_details.yml +8 -8
  234. data/test/fixtures/member_types.yml +6 -6
  235. data/test/fixtures/members.yml +11 -11
  236. data/test/fixtures/memberships.yml +34 -34
  237. data/test/fixtures/men.yml +5 -5
  238. data/test/fixtures/minimalistics.yml +2 -2
  239. data/test/fixtures/minivans.yml +5 -5
  240. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  241. data/test/fixtures/mixins.yml +29 -29
  242. data/test/fixtures/movies.yml +7 -7
  243. data/test/fixtures/naked/csv/accounts.csv +1 -1
  244. data/test/fixtures/naked/yml/accounts.yml +1 -1
  245. data/test/fixtures/naked/yml/companies.yml +1 -1
  246. data/test/fixtures/naked/yml/courses.yml +1 -1
  247. data/test/fixtures/organizations.yml +5 -5
  248. data/test/fixtures/other_topics.yml +42 -42
  249. data/test/fixtures/owners.yml +9 -9
  250. data/test/fixtures/parrots.yml +27 -27
  251. data/test/fixtures/parrots_pirates.yml +7 -7
  252. data/test/fixtures/people.yml +24 -24
  253. data/test/fixtures/peoples_treasures.yml +3 -3
  254. data/test/fixtures/pets.yml +19 -19
  255. data/test/fixtures/pirates.yml +12 -12
  256. data/test/fixtures/posts.yml +80 -80
  257. data/test/fixtures/price_estimates.yml +7 -7
  258. data/test/fixtures/products.yml +4 -4
  259. data/test/fixtures/projects.yml +7 -7
  260. data/test/fixtures/randomly_named_a9.yml +7 -7
  261. data/test/fixtures/ratings.yml +14 -14
  262. data/test/fixtures/readers.yml +11 -11
  263. data/test/fixtures/references.yml +17 -17
  264. data/test/fixtures/reserved_words/distinct.yml +5 -5
  265. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  266. data/test/fixtures/reserved_words/group.yml +14 -14
  267. data/test/fixtures/reserved_words/select.yml +8 -8
  268. data/test/fixtures/reserved_words/values.yml +7 -7
  269. data/test/fixtures/ships.yml +6 -6
  270. data/test/fixtures/speedometers.yml +8 -8
  271. data/test/fixtures/sponsors.yml +12 -12
  272. data/test/fixtures/string_key_objects.yml +7 -7
  273. data/test/fixtures/subscribers.yml +10 -10
  274. data/test/fixtures/subscriptions.yml +12 -12
  275. data/test/fixtures/taggings.yml +78 -78
  276. data/test/fixtures/tags.yml +11 -11
  277. data/test/fixtures/tasks.yml +7 -7
  278. data/test/fixtures/teapots.yml +3 -3
  279. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  280. data/test/fixtures/to_be_linked/users.yml +10 -10
  281. data/test/fixtures/topics.yml +49 -49
  282. data/test/fixtures/toys.yml +14 -14
  283. data/test/fixtures/traffic_lights.yml +9 -9
  284. data/test/fixtures/treasures.yml +10 -10
  285. data/test/fixtures/uuid_children.yml +3 -3
  286. data/test/fixtures/uuid_parents.yml +2 -2
  287. data/test/fixtures/variants.yml +4 -4
  288. data/test/fixtures/vegetables.yml +19 -19
  289. data/test/fixtures/vertices.yml +3 -3
  290. data/test/fixtures/warehouse_things.yml +2 -2
  291. data/test/fixtures/zines.yml +5 -5
  292. data/test/ibm_db_test.rb +24 -24
  293. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  294. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  295. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  296. data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
  297. data/test/migrations/missing/1_people_have_last_names.rb +8 -8
  298. data/test/migrations/missing/3_we_need_reminders.rb +11 -11
  299. data/test/migrations/missing/4_innocent_jointable.rb +11 -11
  300. data/test/migrations/rename/1_we_need_things.rb +10 -10
  301. data/test/migrations/rename/2_rename_things.rb +8 -8
  302. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  303. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  304. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  305. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  306. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  307. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  308. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  309. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  310. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  311. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  312. data/test/migrations/valid/2_we_need_reminders.rb +11 -11
  313. data/test/migrations/valid/3_innocent_jointable.rb +11 -11
  314. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  315. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
  316. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
  317. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  318. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  319. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  320. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  321. data/test/models/admin.rb +4 -4
  322. data/test/models/admin/account.rb +2 -2
  323. data/test/models/admin/randomly_named_c1.rb +3 -3
  324. data/test/models/admin/user.rb +40 -40
  325. data/test/models/aircraft.rb +4 -4
  326. data/test/models/arunit2_model.rb +3 -3
  327. data/test/models/author.rb +212 -212
  328. data/test/models/auto_id.rb +4 -4
  329. data/test/models/autoloadable/extra_firm.rb +2 -2
  330. data/test/models/binary.rb +1 -1
  331. data/test/models/bird.rb +12 -12
  332. data/test/models/book.rb +18 -18
  333. data/test/models/boolean.rb +2 -2
  334. data/test/models/bulb.rb +51 -51
  335. data/test/models/cake_designer.rb +3 -3
  336. data/test/models/car.rb +26 -26
  337. data/test/models/carrier.rb +2 -2
  338. data/test/models/categorization.rb +19 -19
  339. data/test/models/category.rb +35 -35
  340. data/test/models/chef.rb +7 -3
  341. data/test/models/citation.rb +3 -3
  342. data/test/models/club.rb +23 -23
  343. data/test/models/college.rb +10 -10
  344. data/test/models/column.rb +3 -3
  345. data/test/models/column_name.rb +3 -3
  346. data/test/models/comment.rb +64 -64
  347. data/test/models/company.rb +228 -225
  348. data/test/models/company_in_module.rb +98 -98
  349. data/test/models/computer.rb +3 -3
  350. data/test/models/contact.rb +41 -41
  351. data/test/models/contract.rb +20 -20
  352. data/test/models/country.rb +7 -7
  353. data/test/models/course.rb +6 -6
  354. data/test/models/customer.rb +77 -77
  355. data/test/models/customer_carrier.rb +14 -14
  356. data/test/models/dashboard.rb +3 -3
  357. data/test/models/default.rb +2 -2
  358. data/test/models/department.rb +4 -4
  359. data/test/models/developer.rb +255 -252
  360. data/test/models/dog.rb +5 -5
  361. data/test/models/dog_lover.rb +5 -5
  362. data/test/models/doubloon.rb +12 -12
  363. data/test/models/drink_designer.rb +3 -3
  364. data/test/models/edge.rb +5 -5
  365. data/test/models/electron.rb +5 -5
  366. data/test/models/engine.rb +4 -4
  367. data/test/models/entrant.rb +3 -3
  368. data/test/models/essay.rb +5 -5
  369. data/test/models/event.rb +2 -2
  370. data/test/models/eye.rb +37 -37
  371. data/test/models/face.rb +9 -9
  372. data/test/models/friendship.rb +6 -6
  373. data/test/models/guid.rb +1 -1
  374. data/test/models/hotel.rb +9 -6
  375. data/test/models/image.rb +3 -3
  376. data/test/models/interest.rb +5 -5
  377. data/test/models/invoice.rb +4 -4
  378. data/test/models/item.rb +7 -7
  379. data/test/models/job.rb +7 -7
  380. data/test/models/joke.rb +7 -7
  381. data/test/models/keyboard.rb +3 -3
  382. data/test/models/legacy_thing.rb +3 -3
  383. data/test/models/lesson.rb +11 -11
  384. data/test/models/line_item.rb +3 -3
  385. data/test/models/liquid.rb +4 -4
  386. data/test/models/man.rb +11 -11
  387. data/test/models/matey.rb +4 -4
  388. data/test/models/member.rb +41 -41
  389. data/test/models/member_detail.rb +7 -7
  390. data/test/models/member_type.rb +3 -3
  391. data/test/models/membership.rb +35 -35
  392. data/test/models/minimalistic.rb +2 -2
  393. data/test/models/minivan.rb +9 -9
  394. data/test/models/mixed_case_monkey.rb +3 -3
  395. data/test/models/molecule.rb +6 -6
  396. data/test/models/movie.rb +5 -5
  397. data/test/models/order.rb +4 -4
  398. data/test/models/organization.rb +14 -14
  399. data/test/models/owner.rb +34 -34
  400. data/test/models/parrot.rb +29 -29
  401. data/test/models/person.rb +143 -143
  402. data/test/models/personal_legacy_thing.rb +4 -4
  403. data/test/models/pet.rb +15 -15
  404. data/test/models/pirate.rb +92 -92
  405. data/test/models/possession.rb +3 -3
  406. data/test/models/post.rb +264 -264
  407. data/test/models/price_estimate.rb +4 -4
  408. data/test/models/professor.rb +5 -5
  409. data/test/models/project.rb +31 -29
  410. data/test/models/publisher.rb +2 -2
  411. data/test/models/publisher/article.rb +4 -4
  412. data/test/models/publisher/magazine.rb +3 -3
  413. data/test/models/randomly_named_c1.rb +3 -3
  414. data/test/models/rating.rb +4 -4
  415. data/test/models/reader.rb +23 -23
  416. data/test/models/record.rb +2 -2
  417. data/test/models/reference.rb +22 -22
  418. data/test/models/reply.rb +61 -61
  419. data/test/models/ship.rb +33 -33
  420. data/test/models/ship_part.rb +7 -7
  421. data/test/models/shop.rb +17 -17
  422. data/test/models/shop_account.rb +6 -6
  423. data/test/models/speedometer.rb +6 -6
  424. data/test/models/sponsor.rb +7 -7
  425. data/test/models/string_key_object.rb +3 -3
  426. data/test/models/student.rb +4 -4
  427. data/test/models/subject.rb +16 -16
  428. data/test/models/subscriber.rb +8 -8
  429. data/test/models/subscription.rb +4 -4
  430. data/test/models/tag.rb +7 -7
  431. data/test/models/tagging.rb +13 -13
  432. data/test/models/task.rb +5 -5
  433. data/test/models/topic.rb +124 -124
  434. data/test/models/toy.rb +6 -6
  435. data/test/models/traffic_light.rb +4 -4
  436. data/test/models/treasure.rb +14 -14
  437. data/test/models/treaty.rb +7 -7
  438. data/test/models/tyre.rb +11 -11
  439. data/test/models/uuid_child.rb +3 -3
  440. data/test/models/uuid_parent.rb +3 -3
  441. data/test/models/vegetables.rb +24 -24
  442. data/test/models/vehicle.rb +6 -6
  443. data/test/models/vertex.rb +9 -9
  444. data/test/models/warehouse_thing.rb +5 -5
  445. data/test/models/wheel.rb +3 -3
  446. data/test/models/without_table.rb +3 -3
  447. data/test/models/zine.rb +3 -3
  448. data/test/schema/mysql2_specific_schema.rb +58 -58
  449. data/test/schema/mysql_specific_schema.rb +70 -70
  450. data/test/schema/oracle_specific_schema.rb +43 -43
  451. data/test/schema/postgresql_specific_schema.rb +202 -202
  452. data/test/schema/schema.rb +952 -938
  453. data/test/schema/sqlite_specific_schema.rb +21 -21
  454. data/test/support/config.rb +43 -43
  455. data/test/support/connection.rb +22 -22
  456. data/test/support/connection_helper.rb +14 -14
  457. data/test/support/ddl_helper.rb +8 -8
  458. data/test/support/schema_dumping_helper.rb +20 -20
  459. metadata +3 -3
@@ -1,99 +1,99 @@
1
- require 'cases/helper'
2
- require 'active_support/core_ext/hash/indifferent_access'
3
- require 'models/person'
4
- require 'models/company'
5
-
6
- class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
7
- attr_accessor :permitted
8
- alias :permitted? :permitted
9
-
10
- def initialize(attributes)
11
- super(attributes)
12
- @permitted = false
13
- end
14
-
15
- def permit!
16
- @permitted = true
17
- self
18
- end
19
-
20
- def dup
21
- super.tap do |duplicate|
22
- duplicate.instance_variable_set :@permitted, @permitted
23
- end
24
- end
25
- end
26
-
27
- class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
28
- def test_forbidden_attributes_cannot_be_used_for_mass_assignment
29
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
30
- assert_raises(ActiveModel::ForbiddenAttributesError) do
31
- Person.new(params)
32
- end
33
- end
34
-
35
- def test_permitted_attributes_can_be_used_for_mass_assignment
36
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
37
- params.permit!
38
- person = Person.new(params)
39
-
40
- assert_equal 'Guille', person.first_name
41
- assert_equal 'm', person.gender
42
- end
43
-
44
- def test_forbidden_attributes_cannot_be_used_for_sti_inheritance_column
45
- params = ProtectedParams.new(type: 'Client')
46
- assert_raises(ActiveModel::ForbiddenAttributesError) do
47
- Company.new(params)
48
- end
49
- end
50
-
51
- def test_permitted_attributes_can_be_used_for_sti_inheritance_column
52
- params = ProtectedParams.new(type: 'Client')
53
- params.permit!
54
- person = Company.new(params)
55
- assert_equal person.class, Client
56
- end
57
-
58
- def test_regular_hash_should_still_be_used_for_mass_assignment
59
- person = Person.new(first_name: 'Guille', gender: 'm')
60
-
61
- assert_equal 'Guille', person.first_name
62
- assert_equal 'm', person.gender
63
- end
64
-
65
- def test_blank_attributes_should_not_raise
66
- person = Person.new
67
- assert_nil person.assign_attributes(ProtectedParams.new({}))
68
- end
69
-
70
- def test_create_with_checks_permitted
71
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
72
-
73
- assert_raises(ActiveModel::ForbiddenAttributesError) do
74
- Person.create_with(params).create!
75
- end
76
- end
77
-
78
- def test_create_with_works_with_params_values
79
- params = ProtectedParams.new(first_name: 'Guille')
80
-
81
- person = Person.create_with(first_name: params[:first_name]).create!
82
- assert_equal 'Guille', person.first_name
83
- end
84
-
85
- def test_where_checks_permitted
86
- params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
87
-
88
- assert_raises(ActiveModel::ForbiddenAttributesError) do
89
- Person.where(params).create!
90
- end
91
- end
92
-
93
- def test_where_works_with_params_values
94
- params = ProtectedParams.new(first_name: 'Guille')
95
-
96
- person = Person.where(first_name: params[:first_name]).create!
97
- assert_equal 'Guille', person.first_name
98
- end
99
- end
1
+ require 'cases/helper'
2
+ require 'active_support/core_ext/hash/indifferent_access'
3
+ require 'models/person'
4
+ require 'models/company'
5
+
6
+ class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
7
+ attr_accessor :permitted
8
+ alias :permitted? :permitted
9
+
10
+ def initialize(attributes)
11
+ super(attributes)
12
+ @permitted = false
13
+ end
14
+
15
+ def permit!
16
+ @permitted = true
17
+ self
18
+ end
19
+
20
+ def dup
21
+ super.tap do |duplicate|
22
+ duplicate.instance_variable_set :@permitted, @permitted
23
+ end
24
+ end
25
+ end
26
+
27
+ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
28
+ def test_forbidden_attributes_cannot_be_used_for_mass_assignment
29
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
30
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
31
+ Person.new(params)
32
+ end
33
+ end
34
+
35
+ def test_permitted_attributes_can_be_used_for_mass_assignment
36
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
37
+ params.permit!
38
+ person = Person.new(params)
39
+
40
+ assert_equal 'Guille', person.first_name
41
+ assert_equal 'm', person.gender
42
+ end
43
+
44
+ def test_forbidden_attributes_cannot_be_used_for_sti_inheritance_column
45
+ params = ProtectedParams.new(type: 'Client')
46
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
47
+ Company.new(params)
48
+ end
49
+ end
50
+
51
+ def test_permitted_attributes_can_be_used_for_sti_inheritance_column
52
+ params = ProtectedParams.new(type: 'Client')
53
+ params.permit!
54
+ person = Company.new(params)
55
+ assert_equal person.class, Client
56
+ end
57
+
58
+ def test_regular_hash_should_still_be_used_for_mass_assignment
59
+ person = Person.new(first_name: 'Guille', gender: 'm')
60
+
61
+ assert_equal 'Guille', person.first_name
62
+ assert_equal 'm', person.gender
63
+ end
64
+
65
+ def test_blank_attributes_should_not_raise
66
+ person = Person.new
67
+ assert_nil person.assign_attributes(ProtectedParams.new({}))
68
+ end
69
+
70
+ def test_create_with_checks_permitted
71
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
72
+
73
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
74
+ Person.create_with(params).create!
75
+ end
76
+ end
77
+
78
+ def test_create_with_works_with_params_values
79
+ params = ProtectedParams.new(first_name: 'Guille')
80
+
81
+ person = Person.create_with(first_name: params[:first_name]).create!
82
+ assert_equal 'Guille', person.first_name
83
+ end
84
+
85
+ def test_where_checks_permitted
86
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
87
+
88
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
89
+ Person.where(params).create!
90
+ end
91
+ end
92
+
93
+ def test_where_works_with_params_values
94
+ params = ProtectedParams.new(first_name: 'Guille')
95
+
96
+ person = Person.where(first_name: params[:first_name]).create!
97
+ assert_equal 'Guille', person.first_name
98
+ end
99
+ end
@@ -1,61 +1,61 @@
1
- require "cases/helper"
2
- require "models/lesson"
3
- require "models/student"
4
-
5
- class HabtmDestroyOrderTest < ActiveRecord::TestCase
6
- test "may not delete a lesson with students" do
7
- sicp = Lesson.new(:name => "SICP")
8
- ben = Student.new(:name => "Ben Bitdiddle")
9
- sicp.students << ben
10
- sicp.save!
11
- assert_raises LessonError do
12
- assert_no_difference('Lesson.count') do
13
- sicp.destroy
14
- end
15
- end
16
- assert !sicp.destroyed?
17
- end
18
-
19
- test 'should not raise error if have foreign key in the join table' do
20
- student = Student.new(:name => "Ben Bitdiddle")
21
- lesson = Lesson.new(:name => "SICP")
22
- lesson.students << student
23
- lesson.save!
24
- assert_nothing_raised do
25
- student.destroy
26
- end
27
- end
28
-
29
- test "not destroying a student with lessons leaves student<=>lesson association intact" do
30
- # test a normal before_destroy doesn't destroy the habtm joins
31
- begin
32
- sicp = Lesson.new(:name => "SICP")
33
- ben = Student.new(:name => "Ben Bitdiddle")
34
- # add a before destroy to student
35
- Student.class_eval do
36
- before_destroy do
37
- raise ActiveRecord::Rollback unless lessons.empty?
38
- end
39
- end
40
- ben.lessons << sicp
41
- ben.save!
42
- ben.destroy
43
- assert !ben.reload.lessons.empty?
44
- ensure
45
- # get rid of it so Student is still like it was
46
- Student.reset_callbacks(:destroy)
47
- end
48
- end
49
-
50
- test "not destroying a lesson with students leaves student<=>lesson association intact" do
51
- # test a more aggressive before_destroy doesn't destroy the habtm joins and still throws the exception
52
- sicp = Lesson.new(:name => "SICP")
53
- ben = Student.new(:name => "Ben Bitdiddle")
54
- sicp.students << ben
55
- sicp.save!
56
- assert_raises LessonError do
57
- sicp.destroy
58
- end
59
- assert !sicp.reload.students.empty?
60
- end
61
- end
1
+ require "cases/helper"
2
+ require "models/lesson"
3
+ require "models/student"
4
+
5
+ class HabtmDestroyOrderTest < ActiveRecord::TestCase
6
+ test "may not delete a lesson with students" do
7
+ sicp = Lesson.new(:name => "SICP")
8
+ ben = Student.new(:name => "Ben Bitdiddle")
9
+ sicp.students << ben
10
+ sicp.save!
11
+ assert_raises LessonError do
12
+ assert_no_difference('Lesson.count') do
13
+ sicp.destroy
14
+ end
15
+ end
16
+ assert !sicp.destroyed?
17
+ end
18
+
19
+ test 'should not raise error if have foreign key in the join table' do
20
+ student = Student.new(:name => "Ben Bitdiddle")
21
+ lesson = Lesson.new(:name => "SICP")
22
+ lesson.students << student
23
+ lesson.save!
24
+ assert_nothing_raised do
25
+ student.destroy
26
+ end
27
+ end
28
+
29
+ test "not destroying a student with lessons leaves student<=>lesson association intact" do
30
+ # test a normal before_destroy doesn't destroy the habtm joins
31
+ begin
32
+ sicp = Lesson.new(:name => "SICP")
33
+ ben = Student.new(:name => "Ben Bitdiddle")
34
+ # add a before destroy to student
35
+ Student.class_eval do
36
+ before_destroy do
37
+ raise ActiveRecord::Rollback unless lessons.empty?
38
+ end
39
+ end
40
+ ben.lessons << sicp
41
+ ben.save!
42
+ ben.destroy
43
+ assert !ben.reload.lessons.empty?
44
+ ensure
45
+ # get rid of it so Student is still like it was
46
+ Student.reset_callbacks(:destroy)
47
+ end
48
+ end
49
+
50
+ test "not destroying a lesson with students leaves student<=>lesson association intact" do
51
+ # test a more aggressive before_destroy doesn't destroy the habtm joins and still throws the exception
52
+ sicp = Lesson.new(:name => "SICP")
53
+ ben = Student.new(:name => "Ben Bitdiddle")
54
+ sicp.students << ben
55
+ sicp.save!
56
+ assert_raises LessonError do
57
+ sicp.destroy
58
+ end
59
+ assert !sicp.reload.students.empty?
60
+ end
61
+ end
@@ -1,210 +1,210 @@
1
- require File.expand_path('../../../../load_paths', __FILE__)
2
-
3
- require 'config'
4
-
5
- require 'active_support/testing/autorun'
6
- require 'stringio'
7
-
8
- require 'active_record'
9
- require 'cases/test_case'
10
- require 'active_support/dependencies'
11
- require 'active_support/logger'
12
- require 'active_support/core_ext/string/strip'
13
-
14
- require 'support/config'
15
- require 'support/connection'
16
-
17
- # TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
18
-
19
- Thread.abort_on_exception = true
20
-
21
- # Show backtraces for deprecated behavior for quicker cleanup.
22
- ActiveSupport::Deprecation.debug = true
23
-
24
- # Disable available locale checks to avoid warnings running the test suite.
25
- I18n.enforce_available_locales = false
26
-
27
- # Enable raise errors in after_commit and after_rollback.
28
- ActiveRecord::Base.raise_in_transactional_callbacks = true
29
-
30
- # Connect to the database
31
- ARTest.connect
32
-
33
- # Quote "type" if it's a reserved word for the current connection.
34
- QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
35
-
36
- def current_adapter?(*types)
37
- types.any? do |type|
38
- ActiveRecord::ConnectionAdapters.const_defined?(type) &&
39
- ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
40
- end
41
- end
42
-
43
- def in_memory_db?
44
- current_adapter?(:SQLite3Adapter) &&
45
- ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
46
- end
47
-
48
- def mysql_56?
49
- current_adapter?(:Mysql2Adapter) &&
50
- ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0"
51
- end
52
-
53
- def mysql_enforcing_gtid_consistency?
54
- current_adapter?(:MysqlAdapter, :Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
55
- end
56
-
57
- def supports_savepoints?
58
- ActiveRecord::Base.connection.supports_savepoints?
59
- end
60
-
61
- def with_env_tz(new_tz = 'US/Eastern')
62
- old_tz, ENV['TZ'] = ENV['TZ'], new_tz
63
- yield
64
- ensure
65
- old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
66
- end
67
-
68
- def with_timezone_config(cfg)
69
- verify_default_timezone_config
70
-
71
- old_default_zone = ActiveRecord::Base.default_timezone
72
- old_awareness = ActiveRecord::Base.time_zone_aware_attributes
73
- old_zone = Time.zone
74
-
75
- if cfg.has_key?(:default)
76
- ActiveRecord::Base.default_timezone = cfg[:default]
77
- end
78
- if cfg.has_key?(:aware_attributes)
79
- ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
80
- end
81
- if cfg.has_key?(:zone)
82
- Time.zone = cfg[:zone]
83
- end
84
- yield
85
- ensure
86
- ActiveRecord::Base.default_timezone = old_default_zone
87
- ActiveRecord::Base.time_zone_aware_attributes = old_awareness
88
- Time.zone = old_zone
89
- end
90
-
91
- # This method makes sure that tests don't leak global state related to time zones.
92
- EXPECTED_ZONE = nil
93
- EXPECTED_DEFAULT_TIMEZONE = :utc
94
- EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
95
- def verify_default_timezone_config
96
- if Time.zone != EXPECTED_ZONE
97
- $stderr.puts <<-MSG
98
- \n#{self}
99
- Global state `Time.zone` was leaked.
100
- Expected: #{EXPECTED_ZONE}
101
- Got: #{Time.zone}
102
- MSG
103
- end
104
- if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
105
- $stderr.puts <<-MSG
106
- \n#{self}
107
- Global state `ActiveRecord::Base.default_timezone` was leaked.
108
- Expected: #{EXPECTED_DEFAULT_TIMEZONE}
109
- Got: #{ActiveRecord::Base.default_timezone}
110
- MSG
111
- end
112
- if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
113
- $stderr.puts <<-MSG
114
- \n#{self}
115
- Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
116
- Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
117
- Got: #{ActiveRecord::Base.time_zone_aware_attributes}
118
- MSG
119
- end
120
- end
121
-
122
- def enable_extension!(extension, connection)
123
- return false unless connection.supports_extensions?
124
- return connection.reconnect! if connection.extension_enabled?(extension)
125
-
126
- connection.enable_extension extension
127
- connection.commit_db_transaction
128
- connection.reconnect!
129
- end
130
-
131
- def disable_extension!(extension, connection)
132
- return false unless connection.supports_extensions?
133
- return true unless connection.extension_enabled?(extension)
134
-
135
- connection.disable_extension extension
136
- connection.reconnect!
137
- end
138
-
139
- require "cases/validations_repair_helper"
140
- class ActiveSupport::TestCase
141
- include ActiveRecord::TestFixtures
142
- include ActiveRecord::ValidationsRepairHelper
143
-
144
- self.fixture_path = FIXTURES_ROOT
145
- self.use_instantiated_fixtures = false
146
- self.use_transactional_fixtures = true
147
-
148
- def create_fixtures(*fixture_set_names, &block)
149
- ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
150
- end
151
- end
152
-
153
- def load_schema
154
- # silence verbose schema loading
155
- original_stdout = $stdout
156
- $stdout = StringIO.new
157
-
158
- adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
159
- adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
160
-
161
- load SCHEMA_ROOT + "/schema.rb"
162
-
163
- if File.exist?(adapter_specific_schema_file)
164
- load adapter_specific_schema_file
165
- end
166
- ensure
167
- $stdout = original_stdout
168
- end
169
-
170
- load_schema
171
-
172
- class SQLSubscriber
173
- attr_reader :logged
174
- attr_reader :payloads
175
-
176
- def initialize
177
- @logged = []
178
- @payloads = []
179
- end
180
-
181
- def start(name, id, payload)
182
- @payloads << payload
183
- @logged << [payload[:sql].squish, payload[:name], payload[:binds]]
184
- end
185
-
186
- def finish(name, id, payload); end
187
- end
188
-
189
- module InTimeZone
190
- private
191
-
192
- def in_time_zone(zone)
193
- old_zone = Time.zone
194
- old_tz = ActiveRecord::Base.time_zone_aware_attributes
195
-
196
- Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
197
- ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
198
- yield
199
- ensure
200
- Time.zone = old_zone
201
- ActiveRecord::Base.time_zone_aware_attributes = old_tz
202
- end
203
- end
204
-
205
- 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
1
+ require File.expand_path('../../../../load_paths', __FILE__)
2
+
3
+ require 'config'
4
+
5
+ require 'active_support/testing/autorun'
6
+ require 'stringio'
7
+
8
+ require 'active_record'
9
+ require 'cases/test_case'
10
+ require 'active_support/dependencies'
11
+ require 'active_support/logger'
12
+ require 'active_support/core_ext/string/strip'
13
+
14
+ require 'support/config'
15
+ require 'support/connection'
16
+
17
+ # TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
18
+
19
+ Thread.abort_on_exception = true
20
+
21
+ # Show backtraces for deprecated behavior for quicker cleanup.
22
+ ActiveSupport::Deprecation.debug = true
23
+
24
+ # Disable available locale checks to avoid warnings running the test suite.
25
+ I18n.enforce_available_locales = false
26
+
27
+ # Enable raise errors in after_commit and after_rollback.
28
+ ActiveRecord::Base.raise_in_transactional_callbacks = true
29
+
30
+ # Connect to the database
31
+ ARTest.connect
32
+
33
+ # Quote "type" if it's a reserved word for the current connection.
34
+ QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
35
+
36
+ def current_adapter?(*types)
37
+ types.any? do |type|
38
+ ActiveRecord::ConnectionAdapters.const_defined?(type) &&
39
+ ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
40
+ end
41
+ end
42
+
43
+ def in_memory_db?
44
+ current_adapter?(:SQLite3Adapter) &&
45
+ ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
46
+ end
47
+
48
+ def mysql_56?
49
+ current_adapter?(:Mysql2Adapter) &&
50
+ ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0"
51
+ end
52
+
53
+ def mysql_enforcing_gtid_consistency?
54
+ current_adapter?(:MysqlAdapter, :Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
55
+ end
56
+
57
+ def supports_savepoints?
58
+ ActiveRecord::Base.connection.supports_savepoints?
59
+ end
60
+
61
+ def with_env_tz(new_tz = 'US/Eastern')
62
+ old_tz, ENV['TZ'] = ENV['TZ'], new_tz
63
+ yield
64
+ ensure
65
+ old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
66
+ end
67
+
68
+ def with_timezone_config(cfg)
69
+ verify_default_timezone_config
70
+
71
+ old_default_zone = ActiveRecord::Base.default_timezone
72
+ old_awareness = ActiveRecord::Base.time_zone_aware_attributes
73
+ old_zone = Time.zone
74
+
75
+ if cfg.has_key?(:default)
76
+ ActiveRecord::Base.default_timezone = cfg[:default]
77
+ end
78
+ if cfg.has_key?(:aware_attributes)
79
+ ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
80
+ end
81
+ if cfg.has_key?(:zone)
82
+ Time.zone = cfg[:zone]
83
+ end
84
+ yield
85
+ ensure
86
+ ActiveRecord::Base.default_timezone = old_default_zone
87
+ ActiveRecord::Base.time_zone_aware_attributes = old_awareness
88
+ Time.zone = old_zone
89
+ end
90
+
91
+ # This method makes sure that tests don't leak global state related to time zones.
92
+ EXPECTED_ZONE = nil
93
+ EXPECTED_DEFAULT_TIMEZONE = :utc
94
+ EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
95
+ def verify_default_timezone_config
96
+ if Time.zone != EXPECTED_ZONE
97
+ $stderr.puts <<-MSG
98
+ \n#{self}
99
+ Global state `Time.zone` was leaked.
100
+ Expected: #{EXPECTED_ZONE}
101
+ Got: #{Time.zone}
102
+ MSG
103
+ end
104
+ if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
105
+ $stderr.puts <<-MSG
106
+ \n#{self}
107
+ Global state `ActiveRecord::Base.default_timezone` was leaked.
108
+ Expected: #{EXPECTED_DEFAULT_TIMEZONE}
109
+ Got: #{ActiveRecord::Base.default_timezone}
110
+ MSG
111
+ end
112
+ if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
113
+ $stderr.puts <<-MSG
114
+ \n#{self}
115
+ Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
116
+ Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
117
+ Got: #{ActiveRecord::Base.time_zone_aware_attributes}
118
+ MSG
119
+ end
120
+ end
121
+
122
+ def enable_extension!(extension, connection)
123
+ return false unless connection.supports_extensions?
124
+ return connection.reconnect! if connection.extension_enabled?(extension)
125
+
126
+ connection.enable_extension extension
127
+ connection.commit_db_transaction
128
+ connection.reconnect!
129
+ end
130
+
131
+ def disable_extension!(extension, connection)
132
+ return false unless connection.supports_extensions?
133
+ return true unless connection.extension_enabled?(extension)
134
+
135
+ connection.disable_extension extension
136
+ connection.reconnect!
137
+ end
138
+
139
+ require "cases/validations_repair_helper"
140
+ class ActiveSupport::TestCase
141
+ include ActiveRecord::TestFixtures
142
+ include ActiveRecord::ValidationsRepairHelper
143
+
144
+ self.fixture_path = FIXTURES_ROOT
145
+ self.use_instantiated_fixtures = false
146
+ self.use_transactional_fixtures = true
147
+
148
+ def create_fixtures(*fixture_set_names, &block)
149
+ ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
150
+ end
151
+ end
152
+
153
+ def load_schema
154
+ # silence verbose schema loading
155
+ original_stdout = $stdout
156
+ $stdout = StringIO.new
157
+
158
+ adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
159
+ adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
160
+
161
+ load SCHEMA_ROOT + "/schema.rb"
162
+
163
+ if File.exist?(adapter_specific_schema_file)
164
+ load adapter_specific_schema_file
165
+ end
166
+ ensure
167
+ $stdout = original_stdout
168
+ end
169
+
170
+ load_schema
171
+
172
+ class SQLSubscriber
173
+ attr_reader :logged
174
+ attr_reader :payloads
175
+
176
+ def initialize
177
+ @logged = []
178
+ @payloads = []
179
+ end
180
+
181
+ def start(name, id, payload)
182
+ @payloads << payload
183
+ @logged << [payload[:sql].squish, payload[:name], payload[:binds]]
184
+ end
185
+
186
+ def finish(name, id, payload); end
187
+ end
188
+
189
+ module InTimeZone
190
+ private
191
+
192
+ def in_time_zone(zone)
193
+ old_zone = Time.zone
194
+ old_tz = ActiveRecord::Base.time_zone_aware_attributes
195
+
196
+ Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
197
+ ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
198
+ yield
199
+ ensure
200
+ Time.zone = old_zone
201
+ ActiveRecord::Base.time_zone_aware_attributes = old_tz
202
+ end
203
+ end
204
+
205
+ 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