ibm_db 3.0.0-x86-mingw32 → 3.0.1-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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/MANIFEST +14 -14
  4. data/README +225 -225
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/OLD/extconf.rb +264 -0
  8. data/ext/{extconf_MacOS.rb → OLD/extconf_MacOS.rb} +269 -269
  9. data/ext/extconf.rb +291 -264
  10. data/ext/ibm_db.c +2 -2
  11. data/ext/ruby_ibm_db.h +241 -241
  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 +4 -4
  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/lib/mswin32/ibm_db.rb +115 -115
  19. data/test/active_record/connection_adapters/fake_adapter.rb +46 -0
  20. data/test/assets/example.log +1 -0
  21. data/test/assets/flowers.jpg +0 -0
  22. data/test/assets/test.txt +1 -0
  23. data/test/cases/adapter_test.rb +261 -207
  24. data/test/cases/aggregations_test.rb +158 -0
  25. data/test/cases/ar_schema_test.rb +161 -0
  26. data/test/cases/associations/association_scope_test.rb +21 -0
  27. data/test/cases/associations/belongs_to_associations_test.rb +1029 -711
  28. data/test/cases/associations/callbacks_test.rb +192 -0
  29. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -181
  30. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -0
  31. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -0
  32. data/test/cases/associations/eager_load_nested_include_test.rb +128 -0
  33. data/test/cases/associations/eager_singularization_test.rb +148 -0
  34. data/test/cases/associations/eager_test.rb +1411 -0
  35. data/test/cases/associations/extension_test.rb +82 -0
  36. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +932 -851
  37. data/test/cases/associations/has_many_associations_test.rb +2162 -0
  38. data/test/cases/associations/has_many_through_associations_test.rb +1204 -0
  39. data/test/cases/associations/has_one_associations_test.rb +610 -0
  40. data/test/cases/associations/has_one_through_associations_test.rb +380 -0
  41. data/test/cases/associations/inner_join_association_test.rb +139 -0
  42. data/test/cases/associations/inverse_associations_test.rb +693 -0
  43. data/test/cases/associations/join_model_test.rb +754 -743
  44. data/test/cases/associations/nested_through_associations_test.rb +579 -0
  45. data/test/cases/associations/required_test.rb +82 -0
  46. data/test/cases/associations_test.rb +380 -0
  47. data/test/cases/attribute_decorators_test.rb +125 -0
  48. data/test/cases/attribute_methods/read_test.rb +60 -0
  49. data/test/cases/attribute_methods/serialization_test.rb +29 -0
  50. data/test/cases/attribute_methods_test.rb +952 -822
  51. data/test/cases/attribute_set_test.rb +200 -0
  52. data/test/cases/attribute_test.rb +180 -0
  53. data/test/cases/attributes_test.rb +136 -0
  54. data/test/cases/autosave_association_test.rb +1595 -0
  55. data/test/cases/base_test.rb +1638 -2133
  56. data/test/cases/batches_test.rb +212 -0
  57. data/test/cases/binary_test.rb +52 -0
  58. data/test/cases/bind_parameter_test.rb +100 -0
  59. data/test/cases/calculations_test.rb +646 -482
  60. data/test/cases/callbacks_test.rb +543 -0
  61. data/test/cases/clone_test.rb +40 -0
  62. data/test/cases/coders/yaml_column_test.rb +63 -0
  63. data/test/cases/column_alias_test.rb +17 -0
  64. data/test/cases/column_definition_test.rb +123 -0
  65. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -0
  66. data/test/cases/connection_adapters/connection_handler_test.rb +53 -0
  67. data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
  68. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -0
  69. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -0
  70. data/test/cases/connection_adapters/quoting_test.rb +13 -0
  71. data/test/cases/connection_adapters/schema_cache_test.rb +56 -0
  72. data/test/cases/connection_adapters/type_lookup_test.rb +110 -0
  73. data/test/cases/connection_management_test.rb +122 -0
  74. data/test/cases/connection_pool_test.rb +346 -0
  75. data/test/cases/connection_specification/resolver_test.rb +116 -0
  76. data/test/cases/core_test.rb +112 -0
  77. data/test/cases/counter_cache_test.rb +209 -0
  78. data/test/cases/custom_locking_test.rb +17 -0
  79. data/test/cases/database_statements_test.rb +19 -0
  80. data/test/cases/date_time_test.rb +61 -0
  81. data/test/cases/defaults_test.rb +223 -0
  82. data/test/cases/dirty_test.rb +775 -0
  83. data/test/cases/disconnected_test.rb +28 -0
  84. data/test/cases/dup_test.rb +157 -0
  85. data/test/cases/enum_test.rb +290 -0
  86. data/test/cases/explain_subscriber_test.rb +64 -0
  87. data/test/cases/explain_test.rb +76 -0
  88. data/test/cases/finder_respond_to_test.rb +60 -0
  89. data/test/cases/finder_test.rb +1166 -0
  90. data/test/cases/fixture_set/file_test.rb +138 -0
  91. data/test/cases/fixtures_test.rb +897 -0
  92. data/test/cases/forbidden_attributes_protection_test.rb +99 -0
  93. data/test/cases/habtm_destroy_order_test.rb +61 -0
  94. data/test/cases/helper.rb +210 -0
  95. data/test/cases/hot_compatibility_test.rb +54 -0
  96. data/test/cases/i18n_test.rb +45 -0
  97. data/test/cases/inheritance_test.rb +375 -0
  98. data/test/cases/integration_test.rb +139 -0
  99. data/test/cases/invalid_connection_test.rb +22 -0
  100. data/test/cases/invalid_date_test.rb +32 -0
  101. data/test/cases/invertible_migration_test.rb +295 -0
  102. data/test/cases/json_serialization_test.rb +302 -0
  103. data/test/cases/locking_test.rb +477 -0
  104. data/test/cases/log_subscriber_test.rb +136 -0
  105. data/test/cases/migration/change_schema_test - Copy.rb +448 -0
  106. data/test/cases/migration/change_schema_test.rb +472 -0
  107. data/test/cases/migration/change_table_test.rb +224 -0
  108. data/test/cases/migration/column_attributes_test.rb +192 -0
  109. data/test/cases/migration/column_positioning_test.rb +56 -0
  110. data/test/cases/migration/columns_test.rb +304 -0
  111. data/test/cases/migration/command_recorder_test.rb +305 -0
  112. data/test/cases/migration/create_join_table_test.rb +148 -0
  113. data/test/cases/migration/foreign_key_test - Changed.rb +325 -0
  114. data/test/cases/migration/foreign_key_test.rb +360 -0
  115. data/test/cases/migration/helper.rb +39 -0
  116. data/test/cases/migration/index_test.rb +216 -0
  117. data/test/cases/migration/logger_test.rb +36 -0
  118. data/test/cases/migration/pending_migrations_test.rb +53 -0
  119. data/test/cases/migration/references_foreign_key_test.rb +214 -0
  120. data/test/cases/migration/references_index_test.rb +101 -0
  121. data/test/cases/migration/references_statements_test.rb +116 -0
  122. data/test/cases/migration/rename_table_test.rb +93 -0
  123. data/test/cases/migration/table_and_index_test.rb +24 -0
  124. data/test/cases/migration_test.rb +959 -2408
  125. data/test/cases/migrator_test.rb +388 -0
  126. data/test/cases/mixin_test.rb +70 -0
  127. data/test/cases/modules_test.rb +173 -0
  128. data/test/cases/multiparameter_attributes_test.rb +350 -0
  129. data/test/cases/multiple_db_test.rb +115 -0
  130. data/test/cases/nested_attributes_test.rb +1057 -0
  131. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -0
  132. data/test/cases/persistence_test.rb +909 -642
  133. data/test/cases/pooled_connections_test.rb +81 -0
  134. data/test/cases/primary_keys_test.rb +237 -0
  135. data/test/cases/query_cache_test.rb +326 -257
  136. data/test/cases/quoting_test.rb +156 -0
  137. data/test/cases/readonly_test.rb +118 -0
  138. data/test/cases/reaper_test.rb +85 -0
  139. data/test/cases/reflection_test.rb +454 -0
  140. data/test/cases/relation/delegation_test.rb +68 -0
  141. data/test/cases/relation/merging_test.rb +161 -0
  142. data/test/cases/relation/mutation_test.rb +165 -0
  143. data/test/cases/relation/predicate_builder_test.rb +14 -0
  144. data/test/cases/relation/where_chain_test.rb +181 -0
  145. data/test/cases/relation/where_test.rb +300 -0
  146. data/test/cases/relation/where_test2.rb +36 -0
  147. data/test/cases/relation_test.rb +297 -0
  148. data/test/cases/relations_test.rb +1815 -1182
  149. data/test/cases/reload_models_test.rb +22 -0
  150. data/test/cases/result_test.rb +80 -0
  151. data/test/cases/sanitize_test.rb +83 -0
  152. data/test/cases/schema_dumper_test.rb +463 -256
  153. data/test/cases/scoping/default_scoping_test.rb +454 -0
  154. data/test/cases/scoping/named_scoping_test.rb +524 -0
  155. data/test/cases/scoping/relation_scoping_test.rb +357 -0
  156. data/test/cases/serialization_test.rb +104 -0
  157. data/test/cases/serialized_attribute_test.rb +277 -0
  158. data/test/cases/statement_cache_test.rb +98 -0
  159. data/test/cases/store_test.rb +194 -0
  160. data/test/cases/tasks/database_tasks_test.rb +396 -0
  161. data/test/cases/tasks/mysql_rake_test.rb +311 -0
  162. data/test/cases/tasks/postgresql_rake_test.rb +245 -0
  163. data/test/cases/tasks/sqlite_rake_test.rb +193 -0
  164. data/test/cases/test_case.rb +123 -0
  165. data/test/cases/timestamp_test.rb +468 -0
  166. data/test/cases/transaction_callbacks_test.rb +452 -300
  167. data/test/cases/transaction_isolation_test.rb +106 -0
  168. data/test/cases/transactions_test.rb +817 -0
  169. data/test/cases/type/decimal_test.rb +51 -0
  170. data/test/cases/type/integer_test.rb +121 -0
  171. data/test/cases/type/string_test.rb +36 -0
  172. data/test/cases/type/type_map_test.rb +177 -0
  173. data/test/cases/type/unsigned_integer_test.rb +18 -0
  174. data/test/cases/types_test.rb +141 -0
  175. data/test/cases/unconnected_test.rb +33 -0
  176. data/test/cases/validations/association_validation_test.rb +86 -0
  177. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -0
  178. data/test/cases/validations/i18n_validation_test.rb +90 -0
  179. data/test/cases/validations/length_validation_test.rb +47 -0
  180. data/test/cases/validations/presence_validation_test.rb +68 -0
  181. data/test/cases/validations/uniqueness_validation_test.rb +434 -299
  182. data/test/cases/validations_repair_helper.rb +23 -0
  183. data/test/cases/validations_test.rb +165 -0
  184. data/test/cases/view_test.rb +113 -0
  185. data/test/cases/xml_serialization_test.rb +457 -408
  186. data/test/cases/yaml_serialization_test.rb +86 -0
  187. data/test/config.rb +5 -0
  188. data/test/config.yml +154 -154
  189. data/test/connections/native_ibm_db/connection.rb +43 -43
  190. data/test/fixtures/accounts.yml +29 -0
  191. data/test/fixtures/admin/accounts.yml +2 -0
  192. data/test/fixtures/admin/randomly_named_a9.yml +7 -0
  193. data/test/fixtures/admin/randomly_named_b0.yml +7 -0
  194. data/test/fixtures/admin/users.yml +10 -0
  195. data/test/fixtures/all/admin +1 -0
  196. data/test/fixtures/all/developers.yml +0 -0
  197. data/test/fixtures/all/people.yml +0 -0
  198. data/test/fixtures/all/tasks.yml +0 -0
  199. data/test/fixtures/author_addresses.yml +18 -0
  200. data/test/fixtures/author_favorites.yml +4 -0
  201. data/test/fixtures/authors.yml +23 -0
  202. data/test/fixtures/binaries.yml +133 -0
  203. data/test/fixtures/books.yml +11 -0
  204. data/test/fixtures/bulbs.yml +5 -0
  205. data/test/fixtures/cars.yml +9 -0
  206. data/test/fixtures/categories.yml +19 -0
  207. data/test/fixtures/categories/special_categories.yml +9 -0
  208. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  209. data/test/fixtures/categories_ordered.yml +7 -0
  210. data/test/fixtures/categories_posts.yml +31 -0
  211. data/test/fixtures/categorizations.yml +23 -0
  212. data/test/fixtures/clubs.yml +8 -0
  213. data/test/fixtures/collections.yml +3 -0
  214. data/test/fixtures/colleges.yml +3 -0
  215. data/test/fixtures/comments.yml +65 -0
  216. data/test/fixtures/companies.yml +67 -0
  217. data/test/fixtures/computers.yml +10 -0
  218. data/test/fixtures/courses.yml +8 -0
  219. data/test/fixtures/customers.yml +26 -0
  220. data/test/fixtures/dashboards.yml +6 -0
  221. data/test/fixtures/developers.yml +22 -0
  222. data/test/fixtures/developers_projects.yml +17 -0
  223. data/test/fixtures/dog_lovers.yml +7 -0
  224. data/test/fixtures/dogs.yml +4 -0
  225. data/test/fixtures/doubloons.yml +3 -0
  226. data/test/fixtures/edges.yml +5 -0
  227. data/test/fixtures/entrants.yml +14 -0
  228. data/test/fixtures/essays.yml +6 -0
  229. data/test/fixtures/faces.yml +11 -0
  230. data/test/fixtures/fk_test_has_fk.yml +3 -0
  231. data/test/fixtures/fk_test_has_pk.yml +2 -0
  232. data/test/fixtures/friendships.yml +4 -0
  233. data/test/fixtures/funny_jokes.yml +10 -0
  234. data/test/fixtures/interests.yml +33 -0
  235. data/test/fixtures/items.yml +3 -0
  236. data/test/fixtures/jobs.yml +7 -0
  237. data/test/fixtures/legacy_things.yml +3 -0
  238. data/test/fixtures/mateys.yml +4 -0
  239. data/test/fixtures/member_details.yml +8 -0
  240. data/test/fixtures/member_types.yml +6 -0
  241. data/test/fixtures/members.yml +11 -0
  242. data/test/fixtures/memberships.yml +34 -0
  243. data/test/fixtures/men.yml +5 -0
  244. data/test/fixtures/minimalistics.yml +2 -0
  245. data/test/fixtures/minivans.yml +5 -0
  246. data/test/fixtures/mixed_case_monkeys.yml +6 -0
  247. data/test/fixtures/mixins.yml +29 -0
  248. data/test/fixtures/movies.yml +7 -0
  249. data/test/fixtures/naked/csv/accounts.csv +1 -0
  250. data/test/fixtures/naked/yml/accounts.yml +1 -0
  251. data/test/fixtures/naked/yml/companies.yml +1 -0
  252. data/test/fixtures/naked/yml/courses.yml +1 -0
  253. data/test/fixtures/organizations.yml +5 -0
  254. data/test/fixtures/other_topics.yml +42 -0
  255. data/test/fixtures/owners.yml +9 -0
  256. data/test/fixtures/parrots.yml +27 -0
  257. data/test/fixtures/parrots_pirates.yml +7 -0
  258. data/test/fixtures/people.yml +24 -0
  259. data/test/fixtures/peoples_treasures.yml +3 -0
  260. data/test/fixtures/pets.yml +19 -0
  261. data/test/fixtures/pirates.yml +12 -0
  262. data/test/fixtures/posts.yml +80 -0
  263. data/test/fixtures/price_estimates.yml +7 -0
  264. data/test/fixtures/products.yml +4 -0
  265. data/test/fixtures/projects.yml +7 -0
  266. data/test/fixtures/randomly_named_a9.yml +7 -0
  267. data/test/fixtures/ratings.yml +14 -0
  268. data/test/fixtures/readers.yml +11 -0
  269. data/test/fixtures/references.yml +17 -0
  270. data/test/fixtures/reserved_words/distinct.yml +5 -0
  271. data/test/fixtures/reserved_words/distinct_select.yml +11 -0
  272. data/test/fixtures/reserved_words/group.yml +14 -0
  273. data/test/fixtures/reserved_words/select.yml +8 -0
  274. data/test/fixtures/reserved_words/values.yml +7 -0
  275. data/test/fixtures/ships.yml +6 -0
  276. data/test/fixtures/speedometers.yml +8 -0
  277. data/test/fixtures/sponsors.yml +12 -0
  278. data/test/fixtures/string_key_objects.yml +7 -0
  279. data/test/fixtures/subscribers.yml +11 -0
  280. data/test/fixtures/subscriptions.yml +12 -0
  281. data/test/fixtures/taggings.yml +78 -0
  282. data/test/fixtures/tags.yml +11 -0
  283. data/test/fixtures/tasks.yml +7 -0
  284. data/test/fixtures/teapots.yml +3 -0
  285. data/test/fixtures/to_be_linked/accounts.yml +2 -0
  286. data/test/fixtures/to_be_linked/users.yml +10 -0
  287. data/test/fixtures/topics.yml +49 -0
  288. data/test/fixtures/toys.yml +14 -0
  289. data/test/fixtures/traffic_lights.yml +10 -0
  290. data/test/fixtures/treasures.yml +10 -0
  291. data/test/fixtures/uuid_children.yml +3 -0
  292. data/test/fixtures/uuid_parents.yml +2 -0
  293. data/test/fixtures/variants.yml +4 -0
  294. data/test/fixtures/vegetables.yml +20 -0
  295. data/test/fixtures/vertices.yml +4 -0
  296. data/test/fixtures/warehouse_things.yml +3 -0
  297. data/test/fixtures/zines.yml +5 -0
  298. data/test/ibm_db_test.rb +24 -24
  299. data/test/migrations/10_urban/9_add_expressions.rb +11 -0
  300. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -0
  301. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -0
  302. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -0
  303. data/test/migrations/missing/1_people_have_last_names.rb +9 -0
  304. data/test/migrations/missing/3_we_need_reminders.rb +12 -0
  305. data/test/migrations/missing/4_innocent_jointable.rb +12 -0
  306. data/test/migrations/rename/1_we_need_things.rb +11 -0
  307. data/test/migrations/rename/2_rename_things.rb +9 -0
  308. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -0
  309. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -0
  310. data/test/migrations/to_copy2/1_create_articles.rb +7 -0
  311. data/test/migrations/to_copy2/2_create_comments.rb +7 -0
  312. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -0
  313. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -0
  314. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -0
  315. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -0
  316. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -0
  317. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -0
  318. data/test/migrations/valid/2_we_need_reminders.rb +12 -0
  319. data/test/migrations/valid/3_innocent_jointable.rb +12 -0
  320. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -0
  321. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -0
  322. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -0
  323. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -0
  324. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -0
  325. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -0
  326. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -0
  327. data/test/models/admin.rb +5 -0
  328. data/test/models/admin/account.rb +3 -0
  329. data/test/models/admin/randomly_named_c1.rb +3 -0
  330. data/test/models/admin/user.rb +40 -0
  331. data/test/models/aircraft.rb +4 -0
  332. data/test/models/arunit2_model.rb +3 -0
  333. data/test/models/author.rb +212 -0
  334. data/test/models/auto_id.rb +4 -0
  335. data/test/models/autoloadable/extra_firm.rb +2 -0
  336. data/test/models/binary.rb +2 -0
  337. data/test/models/bird.rb +12 -0
  338. data/test/models/book.rb +18 -0
  339. data/test/models/boolean.rb +2 -0
  340. data/test/models/bulb.rb +51 -0
  341. data/test/models/cake_designer.rb +3 -0
  342. data/test/models/car.rb +26 -0
  343. data/test/models/carrier.rb +2 -0
  344. data/test/models/categorization.rb +19 -0
  345. data/test/models/category.rb +35 -0
  346. data/test/models/chef.rb +3 -0
  347. data/test/models/citation.rb +3 -0
  348. data/test/models/club.rb +23 -0
  349. data/test/models/college.rb +10 -0
  350. data/test/models/column.rb +3 -0
  351. data/test/models/column_name.rb +3 -0
  352. data/test/models/comment.rb +64 -0
  353. data/test/models/company.rb +225 -0
  354. data/test/models/company_in_module.rb +98 -0
  355. data/test/models/computer.rb +3 -0
  356. data/test/models/contact.rb +41 -0
  357. data/test/models/contract.rb +20 -0
  358. data/test/models/country.rb +7 -0
  359. data/test/models/course.rb +6 -0
  360. data/test/models/customer.rb +77 -0
  361. data/test/models/customer_carrier.rb +14 -0
  362. data/test/models/dashboard.rb +3 -0
  363. data/test/models/default.rb +2 -0
  364. data/test/models/department.rb +4 -0
  365. data/test/models/developer.rb +252 -0
  366. data/test/models/dog.rb +5 -0
  367. data/test/models/dog_lover.rb +5 -0
  368. data/test/models/doubloon.rb +12 -0
  369. data/test/models/drink_designer.rb +3 -0
  370. data/test/models/edge.rb +5 -0
  371. data/test/models/electron.rb +5 -0
  372. data/test/models/engine.rb +4 -0
  373. data/test/models/entrant.rb +3 -0
  374. data/test/models/essay.rb +5 -0
  375. data/test/models/event.rb +3 -0
  376. data/test/models/eye.rb +37 -0
  377. data/test/models/face.rb +9 -0
  378. data/test/models/friendship.rb +6 -0
  379. data/test/models/guid.rb +2 -0
  380. data/test/models/hotel.rb +6 -0
  381. data/test/models/image.rb +3 -0
  382. data/test/models/interest.rb +5 -0
  383. data/test/models/invoice.rb +4 -0
  384. data/test/models/item.rb +7 -0
  385. data/test/models/job.rb +7 -0
  386. data/test/models/joke.rb +7 -0
  387. data/test/models/keyboard.rb +3 -0
  388. data/test/models/legacy_thing.rb +3 -0
  389. data/test/models/lesson.rb +11 -0
  390. data/test/models/line_item.rb +3 -0
  391. data/test/models/liquid.rb +4 -0
  392. data/test/models/man.rb +11 -0
  393. data/test/models/matey.rb +4 -0
  394. data/test/models/member.rb +41 -0
  395. data/test/models/member_detail.rb +7 -0
  396. data/test/models/member_type.rb +3 -0
  397. data/test/models/membership.rb +35 -0
  398. data/test/models/minimalistic.rb +2 -0
  399. data/test/models/minivan.rb +9 -0
  400. data/test/models/mixed_case_monkey.rb +3 -0
  401. data/test/models/molecule.rb +6 -0
  402. data/test/models/movie.rb +5 -0
  403. data/test/models/order.rb +4 -0
  404. data/test/models/organization.rb +14 -0
  405. data/test/models/owner.rb +34 -0
  406. data/test/models/parrot.rb +29 -0
  407. data/test/models/person.rb +143 -0
  408. data/test/models/personal_legacy_thing.rb +4 -0
  409. data/test/models/pet.rb +15 -0
  410. data/test/models/pirate.rb +92 -0
  411. data/test/models/possession.rb +3 -0
  412. data/test/models/post.rb +264 -0
  413. data/test/models/price_estimate.rb +4 -0
  414. data/test/models/professor.rb +5 -0
  415. data/test/models/project.rb +29 -0
  416. data/test/models/publisher.rb +2 -0
  417. data/test/models/publisher/article.rb +4 -0
  418. data/test/models/publisher/magazine.rb +3 -0
  419. data/test/models/randomly_named_c1.rb +3 -0
  420. data/test/models/rating.rb +4 -0
  421. data/test/models/reader.rb +23 -0
  422. data/test/models/record.rb +2 -0
  423. data/test/models/reference.rb +22 -0
  424. data/test/models/reply.rb +61 -0
  425. data/test/models/ship.rb +33 -0
  426. data/test/models/ship_part.rb +8 -0
  427. data/test/models/shop.rb +17 -0
  428. data/test/models/shop_account.rb +6 -0
  429. data/test/models/speedometer.rb +6 -0
  430. data/test/models/sponsor.rb +7 -0
  431. data/test/models/string_key_object.rb +3 -0
  432. data/test/models/student.rb +4 -0
  433. data/test/models/subject.rb +16 -0
  434. data/test/models/subscriber.rb +8 -0
  435. data/test/models/subscription.rb +4 -0
  436. data/test/models/tag.rb +7 -0
  437. data/test/models/tagging.rb +13 -0
  438. data/test/models/task.rb +5 -0
  439. data/test/models/topic.rb +124 -0
  440. data/test/models/toy.rb +6 -0
  441. data/test/models/traffic_light.rb +4 -0
  442. data/test/models/treasure.rb +14 -0
  443. data/test/models/treaty.rb +7 -0
  444. data/test/models/tyre.rb +11 -0
  445. data/test/models/uuid_child.rb +3 -0
  446. data/test/models/uuid_parent.rb +3 -0
  447. data/test/models/vegetables.rb +24 -0
  448. data/test/models/vehicle.rb +7 -0
  449. data/test/models/vertex.rb +9 -0
  450. data/test/models/warehouse_thing.rb +5 -5
  451. data/test/models/wheel.rb +3 -0
  452. data/test/models/without_table.rb +3 -0
  453. data/test/models/zine.rb +3 -0
  454. data/test/schema/mysql2_specific_schema.rb +58 -0
  455. data/test/schema/mysql_specific_schema.rb +70 -0
  456. data/test/schema/oracle_specific_schema.rb +43 -0
  457. data/test/schema/postgresql_specific_schema.rb +202 -0
  458. data/test/schema/schema.rb +938 -751
  459. data/test/schema/sqlite_specific_schema.rb +22 -0
  460. data/test/support/config.rb +43 -0
  461. data/test/support/connection.rb +22 -0
  462. data/test/support/connection_helper.rb +14 -0
  463. data/test/support/ddl_helper.rb +8 -0
  464. data/test/support/schema_dumping_helper.rb +20 -0
  465. metadata +444 -18
@@ -0,0 +1,40 @@
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+
4
+ module ActiveRecord
5
+ class CloneTest < ActiveRecord::TestCase
6
+ fixtures :topics
7
+
8
+ def test_persisted
9
+ topic = Topic.first
10
+ cloned = topic.clone
11
+ assert topic.persisted?, 'topic persisted'
12
+ assert cloned.persisted?, 'topic persisted'
13
+ assert !cloned.new_record?, 'topic is not new'
14
+ end
15
+
16
+ def test_stays_frozen
17
+ topic = Topic.first
18
+ topic.freeze
19
+
20
+ cloned = topic.clone
21
+ assert cloned.persisted?, 'topic persisted'
22
+ assert !cloned.new_record?, 'topic is not new'
23
+ assert cloned.frozen?, 'topic should be frozen'
24
+ end
25
+
26
+ def test_shallow
27
+ topic = Topic.first
28
+ cloned = topic.clone
29
+ topic.author_name = 'Aaron'
30
+ assert_equal 'Aaron', cloned.author_name
31
+ end
32
+
33
+ def test_freezing_a_cloned_model_does_not_freeze_clone
34
+ cloned = Topic.new
35
+ clone = cloned.clone
36
+ cloned.freeze
37
+ assert_not clone.frozen?
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,63 @@
1
+
2
+ require "cases/helper"
3
+
4
+ module ActiveRecord
5
+ module Coders
6
+ class YAMLColumnTest < ActiveRecord::TestCase
7
+ def test_initialize_takes_class
8
+ coder = YAMLColumn.new(Object)
9
+ assert_equal Object, coder.object_class
10
+ end
11
+
12
+ def test_type_mismatch_on_different_classes_on_dump
13
+ coder = YAMLColumn.new(Array)
14
+ assert_raises(SerializationTypeMismatch) do
15
+ coder.dump("a")
16
+ end
17
+ end
18
+
19
+ def test_type_mismatch_on_different_classes
20
+ coder = YAMLColumn.new(Array)
21
+ assert_raises(SerializationTypeMismatch) do
22
+ coder.load "--- foo"
23
+ end
24
+ end
25
+
26
+ def test_nil_is_ok
27
+ coder = YAMLColumn.new
28
+ assert_nil coder.load "--- "
29
+ end
30
+
31
+ def test_returns_new_with_different_class
32
+ coder = YAMLColumn.new SerializationTypeMismatch
33
+ assert_equal SerializationTypeMismatch, coder.load("--- ").class
34
+ end
35
+
36
+ def test_returns_string_unless_starts_with_dash
37
+ coder = YAMLColumn.new
38
+ assert_equal 'foo', coder.load("foo")
39
+ end
40
+
41
+ def test_load_handles_other_classes
42
+ coder = YAMLColumn.new
43
+ assert_equal [], coder.load([])
44
+ end
45
+
46
+ def test_load_doesnt_swallow_yaml_exceptions
47
+ coder = YAMLColumn.new
48
+ bad_yaml = '--- {'
49
+ assert_raises(Psych::SyntaxError) do
50
+ coder.load(bad_yaml)
51
+ end
52
+ end
53
+
54
+ def test_load_doesnt_handle_undefined_class_or_module
55
+ coder = YAMLColumn.new
56
+ missing_class_yaml = '--- !ruby/object:DoesNotExistAndShouldntEver {}\n'
57
+ assert_raises(ArgumentError) do
58
+ coder.load(missing_class_yaml)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,17 @@
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+
4
+ class TestColumnAlias < ActiveRecord::TestCase
5
+ fixtures :topics
6
+
7
+ QUERY = if 'Oracle' == ActiveRecord::Base.connection.adapter_name
8
+ 'SELECT id AS pk FROM topics WHERE ROWNUM < 2'
9
+ else
10
+ 'SELECT id AS pk FROM topics'
11
+ end
12
+
13
+ def test_column_alias
14
+ records = Topic.connection.select_all(QUERY)
15
+ assert_equal 'pk', records[0].keys[0]
16
+ end
17
+ end
@@ -0,0 +1,123 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ class ColumnDefinitionTest < ActiveRecord::TestCase
6
+ def setup
7
+ @adapter = AbstractAdapter.new(nil)
8
+ def @adapter.native_database_types
9
+ {:string => "varchar"}
10
+ end
11
+ @viz = @adapter.schema_creation
12
+ end
13
+
14
+ # Avoid column definitions in create table statements like:
15
+ # `title` varchar(255) DEFAULT NULL
16
+ def test_should_not_include_default_clause_when_default_is_null
17
+ column = Column.new("title", nil, Type::String.new(limit: 20))
18
+ column_def = ColumnDefinition.new(
19
+ column.name, "string",
20
+ column.limit, column.precision, column.scale, column.default, column.null)
21
+ assert_equal "title varchar(20)", @viz.accept(column_def)
22
+ end
23
+
24
+ def test_should_include_default_clause_when_default_is_present
25
+ column = Column.new("title", "Hello", Type::String.new(limit: 20))
26
+ column_def = ColumnDefinition.new(
27
+ column.name, "string",
28
+ column.limit, column.precision, column.scale, column.default, column.null)
29
+ assert_equal %Q{title varchar(20) DEFAULT 'Hello'}, @viz.accept(column_def)
30
+ end
31
+
32
+ def test_should_specify_not_null_if_null_option_is_false
33
+ column = Column.new("title", "Hello", Type::String.new(limit: 20), "varchar(20)", false)
34
+ column_def = ColumnDefinition.new(
35
+ column.name, "string",
36
+ column.limit, column.precision, column.scale, column.default, column.null)
37
+ assert_equal %Q{title varchar(20) DEFAULT 'Hello' NOT NULL}, @viz.accept(column_def)
38
+ end
39
+
40
+ if current_adapter?(:MysqlAdapter)
41
+ def test_should_set_default_for_mysql_binary_data_types
42
+ binary_column = MysqlAdapter::Column.new("title", "a", Type::Binary.new, "binary(1)")
43
+ assert_equal "a", binary_column.default
44
+
45
+ varbinary_column = MysqlAdapter::Column.new("title", "a", Type::Binary.new, "varbinary(1)")
46
+ assert_equal "a", varbinary_column.default
47
+ end
48
+
49
+ def test_should_not_set_default_for_blob_and_text_data_types
50
+ assert_raise ArgumentError do
51
+ MysqlAdapter::Column.new("title", "a", Type::Binary.new, "blob")
52
+ end
53
+
54
+ assert_raise ArgumentError do
55
+ MysqlAdapter::Column.new("title", "Hello", Type::Text.new)
56
+ end
57
+
58
+ text_column = MysqlAdapter::Column.new("title", nil, Type::Text.new)
59
+ assert_equal nil, text_column.default
60
+
61
+ not_null_text_column = MysqlAdapter::Column.new("title", nil, Type::Text.new, "text", false)
62
+ assert_equal "", not_null_text_column.default
63
+ end
64
+
65
+ def test_has_default_should_return_false_for_blob_and_text_data_types
66
+ blob_column = MysqlAdapter::Column.new("title", nil, Type::Binary.new, "blob")
67
+ assert !blob_column.has_default?
68
+
69
+ text_column = MysqlAdapter::Column.new("title", nil, Type::Text.new)
70
+ assert !text_column.has_default?
71
+ end
72
+ end
73
+
74
+ if current_adapter?(:Mysql2Adapter)
75
+ def test_should_set_default_for_mysql_binary_data_types
76
+ binary_column = Mysql2Adapter::Column.new("title", "a", Type::Binary.new, "binary(1)")
77
+ assert_equal "a", binary_column.default
78
+
79
+ varbinary_column = Mysql2Adapter::Column.new("title", "a", Type::Binary.new, "varbinary(1)")
80
+ assert_equal "a", varbinary_column.default
81
+ end
82
+
83
+ def test_should_not_set_default_for_blob_and_text_data_types
84
+ assert_raise ArgumentError do
85
+ Mysql2Adapter::Column.new("title", "a", Type::Binary.new, "blob")
86
+ end
87
+
88
+ assert_raise ArgumentError do
89
+ Mysql2Adapter::Column.new("title", "Hello", Type::Text.new)
90
+ end
91
+
92
+ text_column = Mysql2Adapter::Column.new("title", nil, Type::Text.new)
93
+ assert_equal nil, text_column.default
94
+
95
+ not_null_text_column = Mysql2Adapter::Column.new("title", nil, Type::Text.new, "text", false)
96
+ assert_equal "", not_null_text_column.default
97
+ end
98
+
99
+ def test_has_default_should_return_false_for_blob_and_text_data_types
100
+ blob_column = Mysql2Adapter::Column.new("title", nil, Type::Binary.new, "blob")
101
+ assert !blob_column.has_default?
102
+
103
+ text_column = Mysql2Adapter::Column.new("title", nil, Type::Text.new)
104
+ assert !text_column.has_default?
105
+ end
106
+ end
107
+
108
+ if current_adapter?(:PostgreSQLAdapter)
109
+ def test_bigint_column_should_map_to_integer
110
+ oid = PostgreSQLAdapter::OID::Integer.new
111
+ bigint_column = PostgreSQLColumn.new('number', nil, oid, "bigint")
112
+ assert_equal :integer, bigint_column.type
113
+ end
114
+
115
+ def test_smallint_column_should_map_to_integer
116
+ oid = PostgreSQLAdapter::OID::Integer.new
117
+ smallint_column = PostgreSQLColumn.new('number', nil, oid, "smallint")
118
+ assert_equal :integer, smallint_column.type
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,54 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ class AdapterLeasingTest < ActiveRecord::TestCase
6
+ class Pool < ConnectionPool
7
+ def insert_connection_for_test!(c)
8
+ synchronize do
9
+ @connections << c
10
+ @available.add c
11
+ end
12
+ end
13
+ end
14
+
15
+ def setup
16
+ @adapter = AbstractAdapter.new nil, nil
17
+ end
18
+
19
+ def test_in_use?
20
+ assert_not @adapter.in_use?, 'adapter is not in use'
21
+ assert @adapter.lease, 'lease adapter'
22
+ assert @adapter.in_use?, 'adapter is in use'
23
+ end
24
+
25
+ def test_lease_twice
26
+ assert @adapter.lease, 'should lease adapter'
27
+ assert_not @adapter.lease, 'should not lease adapter'
28
+ end
29
+
30
+ def test_expire_mutates_in_use
31
+ assert @adapter.lease, 'lease adapter'
32
+ assert @adapter.in_use?, 'adapter is in use'
33
+ @adapter.expire
34
+ assert_not @adapter.in_use?, 'adapter is in use'
35
+ end
36
+
37
+ def test_close
38
+ pool = Pool.new(ConnectionSpecification.new({}, nil))
39
+ pool.insert_connection_for_test! @adapter
40
+ @adapter.pool = pool
41
+
42
+ # Make sure the pool marks the connection in use
43
+ assert_equal @adapter, pool.connection
44
+ assert @adapter.in_use?
45
+
46
+ # Close should put the adapter back in the pool
47
+ @adapter.close
48
+ assert_not @adapter.in_use?
49
+
50
+ assert_equal @adapter, pool.connection
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,53 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ class ConnectionHandlerTest < ActiveRecord::TestCase
6
+ def setup
7
+ @klass = Class.new(Base) { def self.name; 'klass'; end }
8
+ @subklass = Class.new(@klass) { def self.name; 'subklass'; end }
9
+
10
+ @handler = ConnectionHandler.new
11
+ @pool = @handler.establish_connection(@klass, Base.connection_pool.spec)
12
+ end
13
+
14
+ def test_retrieve_connection
15
+ assert @handler.retrieve_connection(@klass)
16
+ end
17
+
18
+ def test_active_connections?
19
+ assert !@handler.active_connections?
20
+ assert @handler.retrieve_connection(@klass)
21
+ assert @handler.active_connections?
22
+ @handler.clear_active_connections!
23
+ assert !@handler.active_connections?
24
+ end
25
+
26
+ def test_retrieve_connection_pool_with_ar_base
27
+ assert_nil @handler.retrieve_connection_pool(ActiveRecord::Base)
28
+ end
29
+
30
+ def test_retrieve_connection_pool
31
+ assert_not_nil @handler.retrieve_connection_pool(@klass)
32
+ end
33
+
34
+ def test_retrieve_connection_pool_uses_superclass_when_no_subclass_connection
35
+ assert_not_nil @handler.retrieve_connection_pool(@subklass)
36
+ end
37
+
38
+ def test_retrieve_connection_pool_uses_superclass_pool_after_subclass_establish_and_remove
39
+ sub_pool = @handler.establish_connection(@subklass, Base.connection_pool.spec)
40
+ assert_same sub_pool, @handler.retrieve_connection_pool(@subklass)
41
+
42
+ @handler.remove_connection @subklass
43
+ assert_same @pool, @handler.retrieve_connection_pool(@subklass)
44
+ end
45
+
46
+ def test_connection_pools
47
+ assert_deprecated do
48
+ assert_equal({ Base.connection_pool.spec => @pool }, @handler.connection_pools)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,12 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ class ConnectionSpecificationTest < ActiveRecord::TestCase
6
+ def test_dup_deep_copy_config
7
+ spec = ConnectionSpecification.new({ :a => :b }, "bar")
8
+ assert_not_equal(spec.config.object_id, spec.dup.config.object_id)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,293 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ class MergeAndResolveDefaultUrlConfigTest < ActiveRecord::TestCase
6
+ def setup
7
+ @previous_database_url = ENV.delete("DATABASE_URL")
8
+ @previous_rack_env = ENV.delete("RACK_ENV")
9
+ @previous_rails_env = ENV.delete("RAILS_ENV")
10
+ end
11
+
12
+ teardown do
13
+ ENV["DATABASE_URL"] = @previous_database_url
14
+ ENV["RACK_ENV"] = @previous_rack_env
15
+ ENV["RAILS_ENV"] = @previous_rails_env
16
+ end
17
+
18
+ def resolve_config(config)
19
+ ActiveRecord::ConnectionHandling::MergeAndResolveDefaultUrlConfig.new(config).resolve
20
+ end
21
+
22
+ def resolve_spec(spec, config)
23
+ ConnectionSpecification::Resolver.new(resolve_config(config)).resolve(spec)
24
+ end
25
+
26
+ def test_resolver_with_database_uri_and_current_env_symbol_key
27
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
28
+ config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
29
+ actual = resolve_spec(:default_env, config)
30
+ expected = { "adapter"=>"postgresql", "database"=>"foo", "host"=>"localhost" }
31
+ assert_equal expected, actual
32
+ end
33
+
34
+ def test_resolver_with_database_uri_and_current_env_symbol_key_and_rails_env
35
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
36
+ ENV['RAILS_ENV'] = "foo"
37
+
38
+ config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
39
+ actual = resolve_spec(:foo, config)
40
+ expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost" }
41
+ assert_equal expected, actual
42
+ end
43
+
44
+ def test_resolver_with_database_uri_and_current_env_symbol_key_and_rack_env
45
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
46
+ ENV['RACK_ENV'] = "foo"
47
+
48
+ config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
49
+ actual = resolve_spec(:foo, config)
50
+ expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost" }
51
+ assert_equal expected, actual
52
+ end
53
+
54
+ def test_resolver_with_database_uri_and_and_current_env_string_key
55
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
56
+ config = { "default_env" => { "adapter" => "not_postgres", "database" => "not_foo" } }
57
+ actual = assert_deprecated { resolve_spec("default_env", config) }
58
+ expected = { "adapter"=>"postgresql", "database"=>"foo", "host"=>"localhost" }
59
+ assert_equal expected, actual
60
+ end
61
+
62
+ def test_resolver_with_database_uri_and_and_current_env_string_key_and_rails_env
63
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
64
+ ENV['RAILS_ENV'] = "foo"
65
+
66
+ config = { "not_production" => {"adapter" => "not_postgres", "database" => "not_foo" } }
67
+ actual = assert_deprecated { resolve_spec("foo", config) }
68
+ expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost" }
69
+ assert_equal expected, actual
70
+ end
71
+
72
+ def test_resolver_with_database_uri_and_and_current_env_string_key_and_rack_env
73
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
74
+ ENV['RACK_ENV'] = "foo"
75
+
76
+ config = { "not_production" => {"adapter" => "not_postgres", "database" => "not_foo" } }
77
+ actual = assert_deprecated { resolve_spec("foo", config) }
78
+ expected = { "adapter" => "postgresql", "database" => "foo", "host" => "localhost" }
79
+ assert_equal expected, actual
80
+ end
81
+
82
+ def test_resolver_with_database_uri_and_known_key
83
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
84
+ config = { "production" => { "adapter" => "not_postgres", "database" => "not_foo", "host" => "localhost" } }
85
+ actual = resolve_spec(:production, config)
86
+ expected = { "adapter"=>"not_postgres", "database"=>"not_foo", "host"=>"localhost" }
87
+ assert_equal expected, actual
88
+ end
89
+
90
+ def test_resolver_with_database_uri_and_unknown_symbol_key
91
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
92
+ config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
93
+ assert_raises AdapterNotSpecified do
94
+ resolve_spec(:production, config)
95
+ end
96
+ end
97
+
98
+ def test_resolver_with_database_uri_and_unknown_string_key
99
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
100
+ config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } }
101
+ assert_deprecated do
102
+ assert_raises AdapterNotSpecified do
103
+ resolve_spec("production", config)
104
+ end
105
+ end
106
+ end
107
+
108
+ def test_resolver_with_database_uri_and_supplied_url
109
+ ENV['DATABASE_URL'] = "not-postgres://not-localhost/not_foo"
110
+ config = { "production" => { "adapter" => "also_not_postgres", "database" => "also_not_foo" } }
111
+ actual = resolve_spec("postgres://localhost/foo", config)
112
+ expected = { "adapter"=>"postgresql", "database"=>"foo", "host"=>"localhost" }
113
+ assert_equal expected, actual
114
+ end
115
+
116
+ def test_jdbc_url
117
+ config = { "production" => { "url" => "jdbc:postgres://localhost/foo" } }
118
+ actual = resolve_config(config)
119
+ assert_equal config, actual
120
+ end
121
+
122
+ def test_environment_does_not_exist_in_config_url_does_exist
123
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
124
+ config = { "not_default_env" => { "adapter" => "not_postgres", "database" => "not_foo" } }
125
+ actual = resolve_config(config)
126
+ expect_prod = { "adapter"=>"postgresql", "database"=>"foo", "host"=>"localhost" }
127
+ assert_equal expect_prod, actual["default_env"]
128
+ end
129
+
130
+ def test_url_with_hyphenated_scheme
131
+ ENV['DATABASE_URL'] = "ibm-db://localhost/foo"
132
+ config = { "default_env" => { "adapter" => "not_postgres", "database" => "not_foo", "host" => "localhost" } }
133
+ actual = resolve_spec(:default_env, config)
134
+ expected = { "adapter"=>"ibm_db", "database"=>"foo", "host"=>"localhost" }
135
+ assert_equal expected, actual
136
+ end
137
+
138
+ def test_string_connection
139
+ config = { "default_env" => "postgres://localhost/foo" }
140
+ actual = resolve_config(config)
141
+ expected = { "default_env" =>
142
+ { "adapter" => "postgresql",
143
+ "database" => "foo",
144
+ "host" => "localhost"
145
+ }
146
+ }
147
+ assert_equal expected, actual
148
+ end
149
+
150
+ def test_url_sub_key
151
+ config = { "default_env" => { "url" => "postgres://localhost/foo" } }
152
+ actual = resolve_config(config)
153
+ expected = { "default_env" =>
154
+ { "adapter" => "postgresql",
155
+ "database" => "foo",
156
+ "host" => "localhost"
157
+ }
158
+ }
159
+ assert_equal expected, actual
160
+ end
161
+
162
+ def test_hash
163
+ config = { "production" => { "adapter" => "postgres", "database" => "foo" } }
164
+ actual = resolve_config(config)
165
+ assert_equal config, actual
166
+ end
167
+
168
+ def test_blank
169
+ config = {}
170
+ actual = resolve_config(config)
171
+ assert_equal config, actual
172
+ end
173
+
174
+ def test_blank_with_database_url
175
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
176
+
177
+ config = {}
178
+ actual = resolve_config(config)
179
+ expected = { "adapter" => "postgresql",
180
+ "database" => "foo",
181
+ "host" => "localhost" }
182
+ assert_equal expected, actual["default_env"]
183
+ assert_equal nil, actual["production"]
184
+ assert_equal nil, actual["development"]
185
+ assert_equal nil, actual["test"]
186
+ assert_equal nil, actual[:default_env]
187
+ assert_equal nil, actual[:production]
188
+ assert_equal nil, actual[:development]
189
+ assert_equal nil, actual[:test]
190
+ end
191
+
192
+ def test_blank_with_database_url_with_rails_env
193
+ ENV['RAILS_ENV'] = "not_production"
194
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
195
+
196
+ config = {}
197
+ actual = resolve_config(config)
198
+ expected = { "adapter" => "postgresql",
199
+ "database" => "foo",
200
+ "host" => "localhost" }
201
+
202
+ assert_equal expected, actual["not_production"]
203
+ assert_equal nil, actual["production"]
204
+ assert_equal nil, actual["default_env"]
205
+ assert_equal nil, actual["development"]
206
+ assert_equal nil, actual["test"]
207
+ assert_equal nil, actual[:default_env]
208
+ assert_equal nil, actual[:not_production]
209
+ assert_equal nil, actual[:production]
210
+ assert_equal nil, actual[:development]
211
+ assert_equal nil, actual[:test]
212
+ end
213
+
214
+ def test_blank_with_database_url_with_rack_env
215
+ ENV['RACK_ENV'] = "not_production"
216
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
217
+
218
+ config = {}
219
+ actual = resolve_config(config)
220
+ expected = { "adapter" => "postgresql",
221
+ "database" => "foo",
222
+ "host" => "localhost" }
223
+
224
+ assert_equal expected, actual["not_production"]
225
+ assert_equal nil, actual["production"]
226
+ assert_equal nil, actual["default_env"]
227
+ assert_equal nil, actual["development"]
228
+ assert_equal nil, actual["test"]
229
+ assert_equal nil, actual[:default_env]
230
+ assert_equal nil, actual[:not_production]
231
+ assert_equal nil, actual[:production]
232
+ assert_equal nil, actual[:development]
233
+ assert_equal nil, actual[:test]
234
+ end
235
+
236
+ def test_database_url_with_ipv6_host_and_port
237
+ ENV['DATABASE_URL'] = "postgres://[::1]:5454/foo"
238
+
239
+ config = {}
240
+ actual = resolve_config(config)
241
+ expected = { "adapter" => "postgresql",
242
+ "database" => "foo",
243
+ "host" => "::1",
244
+ "port" => 5454 }
245
+ assert_equal expected, actual["default_env"]
246
+ end
247
+
248
+ def test_url_sub_key_with_database_url
249
+ ENV['DATABASE_URL'] = "NOT-POSTGRES://localhost/NOT_FOO"
250
+
251
+ config = { "default_env" => { "url" => "postgres://localhost/foo" } }
252
+ actual = resolve_config(config)
253
+ expected = { "default_env" =>
254
+ { "adapter" => "postgresql",
255
+ "database" => "foo",
256
+ "host" => "localhost"
257
+ }
258
+ }
259
+ assert_equal expected, actual
260
+ end
261
+
262
+ def test_merge_no_conflicts_with_database_url
263
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
264
+
265
+ config = {"default_env" => { "pool" => "5" } }
266
+ actual = resolve_config(config)
267
+ expected = { "default_env" =>
268
+ { "adapter" => "postgresql",
269
+ "database" => "foo",
270
+ "host" => "localhost",
271
+ "pool" => "5"
272
+ }
273
+ }
274
+ assert_equal expected, actual
275
+ end
276
+
277
+ def test_merge_conflicts_with_database_url
278
+ ENV['DATABASE_URL'] = "postgres://localhost/foo"
279
+
280
+ config = {"default_env" => { "adapter" => "NOT-POSTGRES", "database" => "NOT-FOO", "pool" => "5" } }
281
+ actual = resolve_config(config)
282
+ expected = { "default_env" =>
283
+ { "adapter" => "postgresql",
284
+ "database" => "foo",
285
+ "host" => "localhost",
286
+ "pool" => "5"
287
+ }
288
+ }
289
+ assert_equal expected, actual
290
+ end
291
+ end
292
+ end
293
+ end