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,138 @@
1
+ require 'cases/helper'
2
+ require 'tempfile'
3
+
4
+ module ActiveRecord
5
+ class FixtureSet
6
+ class FileTest < ActiveRecord::TestCase
7
+ def test_open
8
+ fh = File.open(::File.join(FIXTURES_ROOT, "accounts.yml"))
9
+ assert_equal 6, fh.to_a.length
10
+ end
11
+
12
+ def test_open_with_block
13
+ called = false
14
+ File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
15
+ called = true
16
+ assert_equal 6, fh.to_a.length
17
+ end
18
+ assert called, 'block called'
19
+ end
20
+
21
+ def test_names
22
+ File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
23
+ assert_equal ["signals37",
24
+ "unknown",
25
+ "rails_core_account",
26
+ "last_account",
27
+ "rails_core_account_2",
28
+ "odegy_account"].sort, fh.to_a.map(&:first).sort
29
+ end
30
+ end
31
+
32
+ def test_values
33
+ File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
34
+ assert_equal [1,2,3,4,5,6].sort, fh.to_a.map(&:last).map { |x|
35
+ x['id']
36
+ }.sort
37
+ end
38
+ end
39
+
40
+ def test_erb_processing
41
+ File.open(::File.join(FIXTURES_ROOT, "developers.yml")) do |fh|
42
+ devs = Array.new(8) { |i| "dev_#{i + 3}" }
43
+ assert_equal [], devs - fh.to_a.map(&:first)
44
+ end
45
+ end
46
+
47
+ def test_empty_file
48
+ tmp_yaml ['empty', 'yml'], '' do |t|
49
+ assert_equal [], File.open(t.path) { |fh| fh.to_a }
50
+ end
51
+ end
52
+
53
+ # A valid YAML file is not necessarily a value Fixture file. Make sure
54
+ # an exception is raised if the format is not valid Fixture format.
55
+ def test_wrong_fixture_format_string
56
+ tmp_yaml ['empty', 'yml'], 'qwerty' do |t|
57
+ assert_raises(ActiveRecord::Fixture::FormatError) do
58
+ File.open(t.path) { |fh| fh.to_a }
59
+ end
60
+ end
61
+ end
62
+
63
+ def test_wrong_fixture_format_nested
64
+ tmp_yaml ['empty', 'yml'], 'one: two' do |t|
65
+ assert_raises(ActiveRecord::Fixture::FormatError) do
66
+ File.open(t.path) { |fh| fh.to_a }
67
+ end
68
+ end
69
+ end
70
+
71
+ def test_render_context_helper
72
+ ActiveRecord::FixtureSet.context_class.class_eval do
73
+ def fixture_helper
74
+ "Fixture helper"
75
+ end
76
+ end
77
+ yaml = "one:\n name: <%= fixture_helper %>\n"
78
+ tmp_yaml ['curious', 'yml'], yaml do |t|
79
+ golden =
80
+ [["one", {"name" => "Fixture helper"}]]
81
+ assert_equal golden, File.open(t.path) { |fh| fh.to_a }
82
+ end
83
+ ActiveRecord::FixtureSet.context_class.class_eval do
84
+ remove_method :fixture_helper
85
+ end
86
+ end
87
+
88
+ def test_render_context_lookup_scope
89
+ yaml = <<END
90
+ one:
91
+ ActiveRecord: <%= defined? ActiveRecord %>
92
+ ActiveRecord_FixtureSet: <%= defined? ActiveRecord::FixtureSet %>
93
+ FixtureSet: <%= defined? FixtureSet %>
94
+ ActiveRecord_FixtureSet_File: <%= defined? ActiveRecord::FixtureSet::File %>
95
+ File: <%= File.name %>
96
+ END
97
+
98
+ golden = [['one', {
99
+ 'ActiveRecord' => 'constant',
100
+ 'ActiveRecord_FixtureSet' => 'constant',
101
+ 'FixtureSet' => nil,
102
+ 'ActiveRecord_FixtureSet_File' => 'constant',
103
+ 'File' => 'File'
104
+ }]]
105
+
106
+ tmp_yaml ['curious', 'yml'], yaml do |t|
107
+ assert_equal golden, File.open(t.path) { |fh| fh.to_a }
108
+ end
109
+ end
110
+
111
+ # Make sure that each fixture gets its own rendering context so that
112
+ # fixtures are independent.
113
+ def test_independent_render_contexts
114
+ yaml1 = "<% def leaked_method; 'leak'; end %>\n"
115
+ yaml2 = "one:\n name: <%= leaked_method %>\n"
116
+ tmp_yaml ['leaky', 'yml'], yaml1 do |t1|
117
+ tmp_yaml ['curious', 'yml'], yaml2 do |t2|
118
+ File.open(t1.path) { |fh| fh.to_a }
119
+ assert_raises(NameError) do
120
+ File.open(t2.path) { |fh| fh.to_a }
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+ private
127
+ def tmp_yaml(name, contents)
128
+ t = Tempfile.new name
129
+ t.binmode
130
+ t.write contents
131
+ t.close
132
+ yield t
133
+ ensure
134
+ t.close true
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,897 @@
1
+ require 'cases/helper'
2
+ require 'models/admin'
3
+ require 'models/admin/account'
4
+ require 'models/admin/randomly_named_c1'
5
+ require 'models/admin/user'
6
+ require 'models/binary'
7
+ require 'models/book'
8
+ require 'models/bulb'
9
+ require 'models/category'
10
+ require 'models/company'
11
+ require 'models/computer'
12
+ require 'models/course'
13
+ require 'models/developer'
14
+ require 'models/computer'
15
+ require 'models/joke'
16
+ require 'models/matey'
17
+ require 'models/parrot'
18
+ require 'models/pirate'
19
+ require 'models/doubloon'
20
+ require 'models/post'
21
+ require 'models/randomly_named_c1'
22
+ require 'models/reply'
23
+ require 'models/ship'
24
+ require 'models/task'
25
+ require 'models/topic'
26
+ require 'models/traffic_light'
27
+ require 'models/treasure'
28
+ require 'tempfile'
29
+
30
+ class FixturesTest < ActiveRecord::TestCase
31
+ self.use_instantiated_fixtures = true
32
+ self.use_transactional_fixtures = false
33
+
34
+ # other_topics fixture should not be included here
35
+ fixtures :topics, :developers, :accounts, :tasks, :categories, :funny_jokes, :binaries, :traffic_lights, :author_addresses
36
+
37
+ FIXTURES = %w( accounts binaries companies customers
38
+ developers developers_projects entrants
39
+ movies projects subscribers topics tasks )
40
+ MATCH_ATTRIBUTE_NAME = /[a-zA-Z][-\w]*/
41
+
42
+ def test_clean_fixtures
43
+ FIXTURES.each do |name|
44
+ fixtures = nil
45
+ assert_nothing_raised { fixtures = create_fixtures(name).first }
46
+ assert_kind_of(ActiveRecord::FixtureSet, fixtures)
47
+ fixtures.each { |_name, fixture|
48
+ fixture.each { |key, value|
49
+ assert_match(MATCH_ATTRIBUTE_NAME, key)
50
+ }
51
+ }
52
+ end
53
+ end
54
+
55
+ def test_broken_yaml_exception
56
+ badyaml = Tempfile.new ['foo', '.yml']
57
+ badyaml.write 'a: : '
58
+ badyaml.flush
59
+
60
+ dir = File.dirname badyaml.path
61
+ name = File.basename badyaml.path, '.yml'
62
+ assert_raises(ActiveRecord::Fixture::FormatError) do
63
+ ActiveRecord::FixtureSet.create_fixtures(dir, name)
64
+ end
65
+ ensure
66
+ badyaml.close
67
+ badyaml.unlink
68
+ end
69
+
70
+ def test_create_fixtures
71
+ fixtures = ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, "parrots")
72
+ assert Parrot.find_by_name('Curious George'), 'George is not in the database'
73
+ assert fixtures.detect { |f| f.name == 'parrots' }, "no fixtures named 'parrots' in #{fixtures.map(&:name).inspect}"
74
+ end
75
+
76
+ def test_multiple_clean_fixtures
77
+ fixtures_array = nil
78
+ assert_nothing_raised { fixtures_array = create_fixtures(*FIXTURES) }
79
+ assert_kind_of(Array, fixtures_array)
80
+ fixtures_array.each { |fixtures| assert_kind_of(ActiveRecord::FixtureSet, fixtures) }
81
+ end
82
+
83
+ def test_create_symbol_fixtures
84
+ fixtures = ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, :collections, :collections => Course) { Course.connection }
85
+
86
+ assert Course.find_by_name('Collection'), 'course is not in the database'
87
+ assert fixtures.detect { |f| f.name == 'collections' }, "no fixtures named 'collections' in #{fixtures.map(&:name).inspect}"
88
+ end
89
+
90
+ def test_attributes
91
+ topics = create_fixtures("topics").first
92
+ assert_equal("The First Topic", topics["first"]["title"])
93
+ assert_nil(topics["second"]["author_email_address"])
94
+ end
95
+
96
+ def test_inserts
97
+ create_fixtures("topics")
98
+ first_row = ActiveRecord::Base.connection.select_one("SELECT * FROM topics WHERE author_name = 'David'")
99
+ assert_equal("The First Topic", first_row["title"])
100
+
101
+ second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM topics WHERE author_name = 'Mary'")
102
+ assert_nil(second_row["author_email_address"])
103
+ end
104
+
105
+ if ActiveRecord::Base.connection.supports_migrations?
106
+ def test_inserts_with_pre_and_suffix
107
+ # Reset cache to make finds on the new table work
108
+ ActiveRecord::FixtureSet.reset_cache
109
+
110
+ ActiveRecord::Base.connection.create_table :prefix_other_topics_suffix do |t|
111
+ t.column :title, :string
112
+ t.column :author_name, :string
113
+ t.column :author_email_address, :string
114
+ t.column :written_on, :datetime
115
+ t.column :bonus_time, :time
116
+ t.column :last_read, :date
117
+ t.column :content, :string
118
+ t.column :approved, :boolean, :default => true
119
+ t.column :replies_count, :integer, :default => 0
120
+ t.column :parent_id, :integer
121
+ t.column :type, :string, :limit => 50
122
+ end
123
+
124
+ # Store existing prefix/suffix
125
+ old_prefix = ActiveRecord::Base.table_name_prefix
126
+ old_suffix = ActiveRecord::Base.table_name_suffix
127
+
128
+ # Set a prefix/suffix we can test against
129
+ ActiveRecord::Base.table_name_prefix = 'prefix_'
130
+ ActiveRecord::Base.table_name_suffix = '_suffix'
131
+
132
+ other_topic_klass = Class.new(ActiveRecord::Base) do
133
+ def self.name
134
+ "OtherTopic"
135
+ end
136
+ end
137
+
138
+ topics = [create_fixtures("other_topics")].flatten.first
139
+
140
+ # This checks for a caching problem which causes a bug in the fixtures
141
+ # class-level configuration helper.
142
+ assert_not_nil topics, "Fixture data inserted, but fixture objects not returned from create"
143
+
144
+ first_row = ActiveRecord::Base.connection.select_one("SELECT * FROM prefix_other_topics_suffix WHERE author_name = 'David'")
145
+ assert_not_nil first_row, "The prefix_other_topics_suffix table appears to be empty despite create_fixtures: the row with author_name = 'David' was not found"
146
+ assert_equal("The First Topic", first_row["title"])
147
+
148
+ second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM prefix_other_topics_suffix WHERE author_name = 'Mary'")
149
+ assert_nil(second_row["author_email_address"])
150
+
151
+ assert_equal :prefix_other_topics_suffix, topics.table_name.to_sym
152
+ # This assertion should preferably be the last in the list, because calling
153
+ # other_topic_klass.table_name sets a class-level instance variable
154
+ assert_equal :prefix_other_topics_suffix, other_topic_klass.table_name.to_sym
155
+
156
+ ensure
157
+ # Restore prefix/suffix to its previous values
158
+ ActiveRecord::Base.table_name_prefix = old_prefix
159
+ ActiveRecord::Base.table_name_suffix = old_suffix
160
+
161
+ ActiveRecord::Base.connection.drop_table :prefix_other_topics_suffix rescue nil
162
+ end
163
+ end
164
+
165
+ def test_insert_with_datetime
166
+ create_fixtures("tasks")
167
+ first = Task.find(1)
168
+ assert first
169
+ end
170
+
171
+ def test_logger_level_invariant
172
+ level = ActiveRecord::Base.logger.level
173
+ create_fixtures('topics')
174
+ assert_equal level, ActiveRecord::Base.logger.level
175
+ end
176
+
177
+ def test_instantiation
178
+ topics = create_fixtures("topics").first
179
+ assert_kind_of Topic, topics["first"].find
180
+ end
181
+
182
+ def test_complete_instantiation
183
+ assert_equal "The First Topic", @first.title
184
+ end
185
+
186
+ def test_fixtures_from_root_yml_with_instantiation
187
+ # assert_equal 2, @accounts.size
188
+ assert_equal 50, @unknown.credit_limit
189
+ end
190
+
191
+ def test_erb_in_fixtures
192
+ assert_equal "fixture_5", @dev_5.name
193
+ end
194
+
195
+ def test_empty_yaml_fixture
196
+ assert_not_nil ActiveRecord::FixtureSet.new( Account.connection, "accounts", Account, FIXTURES_ROOT + "/naked/yml/accounts")
197
+ end
198
+
199
+ def test_empty_yaml_fixture_with_a_comment_in_it
200
+ assert_not_nil ActiveRecord::FixtureSet.new( Account.connection, "companies", Company, FIXTURES_ROOT + "/naked/yml/companies")
201
+ end
202
+
203
+ def test_nonexistent_fixture_file
204
+ nonexistent_fixture_path = FIXTURES_ROOT + "/imnothere"
205
+
206
+ #sanity check to make sure that this file never exists
207
+ assert Dir[nonexistent_fixture_path+"*"].empty?
208
+
209
+ assert_raise(Errno::ENOENT) do
210
+ ActiveRecord::FixtureSet.new( Account.connection, "companies", Company, nonexistent_fixture_path)
211
+ end
212
+ end
213
+
214
+ def test_dirty_dirty_yaml_file
215
+ assert_raise(ActiveRecord::Fixture::FormatError) do
216
+ ActiveRecord::FixtureSet.new( Account.connection, "courses", Course, FIXTURES_ROOT + "/naked/yml/courses")
217
+ end
218
+ end
219
+
220
+ def test_omap_fixtures
221
+ assert_nothing_raised do
222
+ fixtures = ActiveRecord::FixtureSet.new(Account.connection, 'categories', Category, FIXTURES_ROOT + "/categories_ordered")
223
+
224
+ fixtures.each.with_index do |(name, fixture), i|
225
+ assert_equal "fixture_no_#{i}", name
226
+ assert_equal "Category #{i}", fixture['name']
227
+ end
228
+ end
229
+ end
230
+
231
+ def test_yml_file_in_subdirectory
232
+ assert_equal(categories(:sub_special_1).name, "A special category in a subdir file")
233
+ assert_equal(categories(:sub_special_1).class, SpecialCategory)
234
+ end
235
+
236
+ def test_subsubdir_file_with_arbitrary_name
237
+ assert_equal(categories(:sub_special_3).name, "A special category in an arbitrarily named subsubdir file")
238
+ assert_equal(categories(:sub_special_3).class, SpecialCategory)
239
+ end
240
+
241
+ def test_binary_in_fixtures
242
+ data = File.open(ASSETS_ROOT + "/flowers.jpg", 'rb') { |f| f.read }
243
+ data.force_encoding('ASCII-8BIT')
244
+ data.freeze
245
+ assert_equal data, @flowers.data
246
+ end
247
+
248
+ def test_serialized_fixtures
249
+ assert_equal ["Green", "Red", "Orange"], traffic_lights(:uk).state
250
+ end
251
+
252
+ def test_fixtures_are_set_up_with_database_env_variable
253
+ db_url_tmp = ENV['DATABASE_URL']
254
+ ENV['DATABASE_URL'] = "sqlite3::memory:"
255
+ ActiveRecord::Base.stubs(:configurations).returns({})
256
+ test_case = Class.new(ActiveRecord::TestCase) do
257
+ fixtures :accounts
258
+
259
+ def test_fixtures
260
+ assert accounts(:signals37)
261
+ end
262
+ end
263
+
264
+ result = test_case.new(:test_fixtures).run
265
+
266
+ assert result.passed?, "Expected #{result.name} to pass:\n#{result}"
267
+ ensure
268
+ ENV['DATABASE_URL'] = db_url_tmp
269
+ end
270
+ end
271
+
272
+ class HasManyThroughFixture < ActiveSupport::TestCase
273
+ def make_model(name)
274
+ Class.new(ActiveRecord::Base) { define_singleton_method(:name) { name } }
275
+ end
276
+
277
+ def test_has_many_through_with_default_table_name
278
+ pt = make_model "ParrotTreasure"
279
+ parrot = make_model "Parrot"
280
+ treasure = make_model "Treasure"
281
+
282
+ pt.table_name = "parrots_treasures"
283
+ pt.belongs_to :parrot, :anonymous_class => parrot
284
+ pt.belongs_to :treasure, :anonymous_class => treasure
285
+
286
+ parrot.has_many :parrot_treasures, :anonymous_class => pt
287
+ parrot.has_many :treasures, :through => :parrot_treasures
288
+
289
+ parrots = File.join FIXTURES_ROOT, 'parrots'
290
+
291
+ fs = ActiveRecord::FixtureSet.new parrot.connection, "parrots", parrot, parrots
292
+ rows = fs.table_rows
293
+ assert_equal load_has_and_belongs_to_many['parrots_treasures'], rows['parrots_treasures']
294
+ end
295
+
296
+ def test_has_many_through_with_renamed_table
297
+ pt = make_model "ParrotTreasure"
298
+ parrot = make_model "Parrot"
299
+ treasure = make_model "Treasure"
300
+
301
+ pt.belongs_to :parrot, :anonymous_class => parrot
302
+ pt.belongs_to :treasure, :anonymous_class => treasure
303
+
304
+ parrot.has_many :parrot_treasures, :anonymous_class => pt
305
+ parrot.has_many :treasures, :through => :parrot_treasures
306
+
307
+ parrots = File.join FIXTURES_ROOT, 'parrots'
308
+
309
+ fs = ActiveRecord::FixtureSet.new parrot.connection, "parrots", parrot, parrots
310
+ rows = fs.table_rows
311
+ assert_equal load_has_and_belongs_to_many['parrots_treasures'], rows['parrot_treasures']
312
+ end
313
+
314
+ def load_has_and_belongs_to_many
315
+ parrot = make_model "Parrot"
316
+ parrot.has_and_belongs_to_many :treasures
317
+
318
+ parrots = File.join FIXTURES_ROOT, 'parrots'
319
+
320
+ fs = ActiveRecord::FixtureSet.new parrot.connection, "parrots", parrot, parrots
321
+ fs.table_rows
322
+ end
323
+ end
324
+
325
+ if Account.connection.respond_to?(:reset_pk_sequence!)
326
+ class FixturesResetPkSequenceTest < ActiveRecord::TestCase
327
+ fixtures :accounts
328
+ fixtures :companies
329
+
330
+ def setup
331
+ @instances = [Account.new(:credit_limit => 50), Company.new(:name => 'RoR Consulting'), Course.new(name: 'Test')]
332
+ ActiveRecord::FixtureSet.reset_cache # make sure tables get reinitialized
333
+ end
334
+
335
+ def test_resets_to_min_pk_with_specified_pk_and_sequence
336
+ @instances.each do |instance|
337
+ model = instance.class
338
+ model.delete_all
339
+ model.connection.reset_pk_sequence!(model.table_name, model.primary_key, model.sequence_name)
340
+
341
+ instance.save!
342
+ assert_equal 1, instance.id, "Sequence reset for #{model.table_name} failed."
343
+ end
344
+ end
345
+
346
+ def test_resets_to_min_pk_with_default_pk_and_sequence
347
+ @instances.each do |instance|
348
+ model = instance.class
349
+ model.delete_all
350
+ model.connection.reset_pk_sequence!(model.table_name)
351
+
352
+ instance.save!
353
+ assert_equal 1, instance.id, "Sequence reset for #{model.table_name} failed."
354
+ end
355
+ end
356
+
357
+ def test_create_fixtures_resets_sequences_when_not_cached
358
+ @instances.each do |instance|
359
+ max_id = create_fixtures(instance.class.table_name).first.fixtures.inject(0) do |_max_id, (_, fixture)|
360
+ fixture_id = fixture['id'].to_i
361
+ fixture_id > _max_id ? fixture_id : _max_id
362
+ end
363
+
364
+ # Clone the last fixture to check that it gets the next greatest id.
365
+ instance.save!
366
+ assert_equal max_id + 1, instance.id, "Sequence reset for #{instance.class.table_name} failed."
367
+ end
368
+ end
369
+ end
370
+ end
371
+
372
+ class FixturesWithoutInstantiationTest < ActiveRecord::TestCase
373
+ self.use_instantiated_fixtures = false
374
+ fixtures :topics, :developers, :accounts
375
+
376
+ def test_without_complete_instantiation
377
+ assert !defined?(@first)
378
+ assert !defined?(@topics)
379
+ assert !defined?(@developers)
380
+ assert !defined?(@accounts)
381
+ end
382
+
383
+ def test_fixtures_from_root_yml_without_instantiation
384
+ assert !defined?(@unknown), "@unknown is not defined"
385
+ end
386
+
387
+ def test_visibility_of_accessor_method
388
+ assert_equal false, respond_to?(:topics, false), "should be private method"
389
+ assert_equal true, respond_to?(:topics, true), "confirm to respond surely"
390
+ end
391
+
392
+ def test_accessor_methods
393
+ assert_equal "The First Topic", topics(:first).title
394
+ assert_equal "Jamis", developers(:jamis).name
395
+ assert_equal 50, accounts(:signals37).credit_limit
396
+ end
397
+
398
+ def test_accessor_methods_with_multiple_args
399
+ assert_equal 2, topics(:first, :second).size
400
+ assert_raise(StandardError) { topics([:first, :second]) }
401
+ end
402
+
403
+ def test_reloading_fixtures_through_accessor_methods
404
+ assert_equal "The First Topic", topics(:first).title
405
+ @loaded_fixtures['topics']['first'].expects(:find).returns(stub(:title => "Fresh Topic!"))
406
+ assert_equal "Fresh Topic!", topics(:first, true).title
407
+ end
408
+ end
409
+
410
+ class FixturesWithoutInstanceInstantiationTest < ActiveRecord::TestCase
411
+ self.use_instantiated_fixtures = true
412
+ self.use_instantiated_fixtures = :no_instances
413
+
414
+ fixtures :topics, :developers, :accounts
415
+
416
+ def test_without_instance_instantiation
417
+ assert !defined?(@first), "@first is not defined"
418
+ end
419
+ end
420
+
421
+ class TransactionalFixturesTest < ActiveRecord::TestCase
422
+ self.use_instantiated_fixtures = true
423
+ self.use_transactional_fixtures = true
424
+
425
+ fixtures :topics
426
+
427
+ def test_destroy
428
+ assert_not_nil @first
429
+ @first.destroy
430
+ end
431
+
432
+ def test_destroy_just_kidding
433
+ assert_not_nil @first
434
+ end
435
+ end
436
+
437
+ class MultipleFixturesTest < ActiveRecord::TestCase
438
+ fixtures :topics
439
+ fixtures :developers, :accounts
440
+
441
+ def test_fixture_table_names
442
+ assert_equal %w(topics developers accounts), fixture_table_names
443
+ end
444
+ end
445
+
446
+ class SetupTest < ActiveRecord::TestCase
447
+ # fixtures :topics
448
+
449
+ def setup
450
+ @first = true
451
+ end
452
+
453
+ def test_nothing
454
+ end
455
+ end
456
+
457
+ class SetupSubclassTest < SetupTest
458
+ def setup
459
+ super
460
+ @second = true
461
+ end
462
+
463
+ def test_subclassing_should_preserve_setups
464
+ assert @first
465
+ assert @second
466
+ end
467
+ end
468
+
469
+
470
+ class OverlappingFixturesTest < ActiveRecord::TestCase
471
+ fixtures :topics, :developers
472
+ fixtures :developers, :accounts
473
+
474
+ def test_fixture_table_names
475
+ assert_equal %w(topics developers accounts), fixture_table_names
476
+ end
477
+ end
478
+
479
+ class ForeignKeyFixturesTest < ActiveRecord::TestCase
480
+ fixtures :fk_test_has_pk, :fk_test_has_fk
481
+
482
+ # if foreign keys are implemented and fixtures
483
+ # are not deleted in reverse order then this test
484
+ # case will raise StatementInvalid
485
+
486
+ def test_number1
487
+ assert true
488
+ end
489
+
490
+ def test_number2
491
+ assert true
492
+ end
493
+ end
494
+
495
+ class OverRideFixtureMethodTest < ActiveRecord::TestCase
496
+ fixtures :topics
497
+
498
+ def topics(name)
499
+ topic = super
500
+ topic.title = 'omg'
501
+ topic
502
+ end
503
+
504
+ def test_fixture_methods_can_be_overridden
505
+ x = topics :first
506
+ assert_equal 'omg', x.title
507
+ end
508
+ end
509
+
510
+ class CheckSetTableNameFixturesTest < ActiveRecord::TestCase
511
+ set_fixture_class :funny_jokes => Joke
512
+ fixtures :funny_jokes
513
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
514
+ # and thus takes into account our set_fixture_class
515
+ self.use_transactional_fixtures = false
516
+
517
+ def test_table_method
518
+ assert_kind_of Joke, funny_jokes(:a_joke)
519
+ end
520
+ end
521
+
522
+ class FixtureNameIsNotTableNameFixturesTest < ActiveRecord::TestCase
523
+ set_fixture_class :items => Book
524
+ fixtures :items
525
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
526
+ # and thus takes into account our set_fixture_class
527
+ self.use_transactional_fixtures = false
528
+
529
+ def test_named_accessor
530
+ assert_kind_of Book, items(:dvd)
531
+ end
532
+ end
533
+
534
+ class FixtureNameIsNotTableNameMultipleFixturesTest < ActiveRecord::TestCase
535
+ set_fixture_class :items => Book, :funny_jokes => Joke
536
+ fixtures :items, :funny_jokes
537
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
538
+ # and thus takes into account our set_fixture_class
539
+ self.use_transactional_fixtures = false
540
+
541
+ def test_named_accessor_of_differently_named_fixture
542
+ assert_kind_of Book, items(:dvd)
543
+ end
544
+
545
+ def test_named_accessor_of_same_named_fixture
546
+ assert_kind_of Joke, funny_jokes(:a_joke)
547
+ end
548
+ end
549
+
550
+ class CustomConnectionFixturesTest < ActiveRecord::TestCase
551
+ set_fixture_class :courses => Course
552
+ fixtures :courses
553
+ self.use_transactional_fixtures = false
554
+
555
+ def test_leaky_destroy
556
+ assert_nothing_raised { courses(:ruby) }
557
+ courses(:ruby).destroy
558
+ end
559
+
560
+ def test_it_twice_in_whatever_order_to_check_for_fixture_leakage
561
+ test_leaky_destroy
562
+ end
563
+ end
564
+
565
+ class TransactionalFixturesOnCustomConnectionTest < ActiveRecord::TestCase
566
+ set_fixture_class :courses => Course
567
+ fixtures :courses
568
+ self.use_transactional_fixtures = true
569
+
570
+ def test_leaky_destroy
571
+ assert_nothing_raised { courses(:ruby) }
572
+ courses(:ruby).destroy
573
+ end
574
+
575
+ def test_it_twice_in_whatever_order_to_check_for_fixture_leakage
576
+ test_leaky_destroy
577
+ end
578
+ end
579
+
580
+ class InvalidTableNameFixturesTest < ActiveRecord::TestCase
581
+ fixtures :funny_jokes
582
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
583
+ # and thus takes into account our lack of set_fixture_class
584
+ self.use_transactional_fixtures = false
585
+
586
+ def test_raises_error
587
+ assert_raise ActiveRecord::FixtureClassNotFound do
588
+ funny_jokes(:a_joke)
589
+ end
590
+ end
591
+ end
592
+
593
+ class CheckEscapedYamlFixturesTest < ActiveRecord::TestCase
594
+ set_fixture_class :funny_jokes => Joke
595
+ fixtures :funny_jokes
596
+ # Set to false to blow away fixtures cache and ensure our fixtures are loaded
597
+ # and thus takes into account our set_fixture_class
598
+ self.use_transactional_fixtures = false
599
+
600
+ def test_proper_escaped_fixture
601
+ assert_equal "The \\n Aristocrats\nAte the candy\n", funny_jokes(:another_joke).name
602
+ end
603
+ end
604
+
605
+ class DevelopersProject; end
606
+ class ManyToManyFixturesWithClassDefined < ActiveRecord::TestCase
607
+ fixtures :developers_projects
608
+
609
+ def test_this_should_run_cleanly
610
+ assert true
611
+ end
612
+ end
613
+
614
+ class FixturesBrokenRollbackTest < ActiveRecord::TestCase
615
+ def blank_setup
616
+ @fixture_connections = [ActiveRecord::Base.connection]
617
+ end
618
+ alias_method :ar_setup_fixtures, :setup_fixtures
619
+ alias_method :setup_fixtures, :blank_setup
620
+ alias_method :setup, :blank_setup
621
+
622
+ def blank_teardown; end
623
+ alias_method :ar_teardown_fixtures, :teardown_fixtures
624
+ alias_method :teardown_fixtures, :blank_teardown
625
+ alias_method :teardown, :blank_teardown
626
+
627
+ def test_no_rollback_in_teardown_unless_transaction_active
628
+ assert_equal 0, ActiveRecord::Base.connection.open_transactions
629
+ assert_raise(RuntimeError) { ar_setup_fixtures }
630
+ assert_equal 0, ActiveRecord::Base.connection.open_transactions
631
+ assert_nothing_raised { ar_teardown_fixtures }
632
+ assert_equal 0, ActiveRecord::Base.connection.open_transactions
633
+ end
634
+
635
+ private
636
+ def load_fixtures(config)
637
+ raise 'argh'
638
+ end
639
+ end
640
+
641
+ class LoadAllFixturesTest < ActiveRecord::TestCase
642
+ def test_all_there
643
+ self.class.fixture_path = FIXTURES_ROOT + "/all"
644
+ self.class.fixtures :all
645
+
646
+ if File.symlink? FIXTURES_ROOT + "/all/admin"
647
+ assert_equal %w(admin/accounts admin/users developers people tasks), fixture_table_names.sort
648
+ end
649
+ ensure
650
+ ActiveRecord::FixtureSet.reset_cache
651
+ end
652
+ end
653
+
654
+ class LoadAllFixturesWithPathnameTest < ActiveRecord::TestCase
655
+ def test_all_there
656
+ self.class.fixture_path = Pathname.new(FIXTURES_ROOT).join('all')
657
+ self.class.fixtures :all
658
+
659
+ if File.symlink? FIXTURES_ROOT + "/all/admin"
660
+ assert_equal %w(admin/accounts admin/users developers people tasks), fixture_table_names.sort
661
+ end
662
+ ensure
663
+ ActiveRecord::FixtureSet.reset_cache
664
+ end
665
+ end
666
+
667
+ class FasterFixturesTest < ActiveRecord::TestCase
668
+ self.use_transactional_fixtures = false
669
+ fixtures :categories, :authors
670
+
671
+ def load_extra_fixture(name)
672
+ fixture = create_fixtures(name).first
673
+ assert fixture.is_a?(ActiveRecord::FixtureSet)
674
+ @loaded_fixtures[fixture.table_name] = fixture
675
+ end
676
+
677
+ def test_cache
678
+ assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, 'categories')
679
+ assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, 'authors')
680
+
681
+ assert_no_queries do
682
+ create_fixtures('categories')
683
+ create_fixtures('authors')
684
+ end
685
+
686
+ load_extra_fixture('posts')
687
+ assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, 'posts')
688
+ self.class.setup_fixture_accessors :posts
689
+ assert_equal 'Welcome to the weblog', posts(:welcome).title
690
+ end
691
+ end
692
+
693
+ class FoxyFixturesTest < ActiveRecord::TestCase
694
+ fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers, :developers, :"admin/accounts", :"admin/users"
695
+
696
+ if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
697
+ require 'models/uuid_parent'
698
+ require 'models/uuid_child'
699
+ fixtures :uuid_parents, :uuid_children
700
+ end
701
+
702
+ def test_identifies_strings
703
+ assert_equal(ActiveRecord::FixtureSet.identify("foo"), ActiveRecord::FixtureSet.identify("foo"))
704
+ assert_not_equal(ActiveRecord::FixtureSet.identify("foo"), ActiveRecord::FixtureSet.identify("FOO"))
705
+ end
706
+
707
+ def test_identifies_symbols
708
+ assert_equal(ActiveRecord::FixtureSet.identify(:foo), ActiveRecord::FixtureSet.identify(:foo))
709
+ end
710
+
711
+ def test_identifies_consistently
712
+ assert_equal 207281424, ActiveRecord::FixtureSet.identify(:ruby)
713
+ assert_equal 1066363776, ActiveRecord::FixtureSet.identify(:sapphire_2)
714
+
715
+ assert_equal 'f92b6bda-0d0d-5fe1-9124-502b18badded', ActiveRecord::FixtureSet.identify(:daddy, :uuid)
716
+ assert_equal 'b4b10018-ad47-595d-b42f-d8bdaa6d01bf', ActiveRecord::FixtureSet.identify(:sonny, :uuid)
717
+ end
718
+
719
+ TIMESTAMP_COLUMNS = %w(created_at created_on updated_at updated_on)
720
+
721
+ def test_populates_timestamp_columns
722
+ TIMESTAMP_COLUMNS.each do |property|
723
+ assert_not_nil(parrots(:george).send(property), "should set #{property}")
724
+ end
725
+ end
726
+
727
+ def test_does_not_populate_timestamp_columns_if_model_has_set_record_timestamps_to_false
728
+ TIMESTAMP_COLUMNS.each do |property|
729
+ assert_nil(ships(:black_pearl).send(property), "should not set #{property}")
730
+ end
731
+ end
732
+
733
+ def test_populates_all_columns_with_the_same_time
734
+ last = nil
735
+
736
+ TIMESTAMP_COLUMNS.each do |property|
737
+ current = parrots(:george).send(property)
738
+ last ||= current
739
+
740
+ assert_equal(last, current)
741
+ last = current
742
+ end
743
+ end
744
+
745
+ def test_only_populates_columns_that_exist
746
+ assert_not_nil(pirates(:blackbeard).created_on)
747
+ assert_not_nil(pirates(:blackbeard).updated_on)
748
+ end
749
+
750
+ def test_preserves_existing_fixture_data
751
+ assert_equal(2.weeks.ago.to_date, pirates(:redbeard).created_on.to_date)
752
+ assert_equal(2.weeks.ago.to_date, pirates(:redbeard).updated_on.to_date)
753
+ end
754
+
755
+ def test_generates_unique_ids
756
+ assert_not_nil(parrots(:george).id)
757
+ assert_not_equal(parrots(:george).id, parrots(:louis).id)
758
+ end
759
+
760
+ def test_automatically_sets_primary_key
761
+ assert_not_nil(ships(:black_pearl))
762
+ end
763
+
764
+ def test_preserves_existing_primary_key
765
+ assert_equal(2, ships(:interceptor).id)
766
+ end
767
+
768
+ def test_resolves_belongs_to_symbols
769
+ assert_equal(parrots(:george), pirates(:blackbeard).parrot)
770
+ end
771
+
772
+ def test_ignores_belongs_to_symbols_if_association_and_foreign_key_are_named_the_same
773
+ assert_equal(developers(:david), computers(:workstation).developer)
774
+ end
775
+
776
+ def test_supports_join_tables
777
+ assert(pirates(:blackbeard).parrots.include?(parrots(:george)))
778
+ assert(pirates(:blackbeard).parrots.include?(parrots(:louis)))
779
+ assert(parrots(:george).pirates.include?(pirates(:blackbeard)))
780
+ end
781
+
782
+ def test_supports_inline_habtm
783
+ assert(parrots(:george).treasures.include?(treasures(:diamond)))
784
+ assert(parrots(:george).treasures.include?(treasures(:sapphire)))
785
+ assert(!parrots(:george).treasures.include?(treasures(:ruby)))
786
+ end
787
+
788
+ def test_supports_inline_habtm_with_specified_id
789
+ assert(parrots(:polly).treasures.include?(treasures(:ruby)))
790
+ assert(parrots(:polly).treasures.include?(treasures(:sapphire)))
791
+ assert(!parrots(:polly).treasures.include?(treasures(:diamond)))
792
+ end
793
+
794
+ def test_supports_yaml_arrays
795
+ assert(parrots(:louis).treasures.include?(treasures(:diamond)))
796
+ assert(parrots(:louis).treasures.include?(treasures(:sapphire)))
797
+ end
798
+
799
+ def test_strips_DEFAULTS_key
800
+ assert_raise(StandardError) { parrots(:DEFAULTS) }
801
+
802
+ # this lets us do YAML defaults and not have an extra fixture entry
803
+ %w(sapphire ruby).each { |t| assert(parrots(:davey).treasures.include?(treasures(t))) }
804
+ end
805
+
806
+ def test_supports_label_interpolation
807
+ assert_equal("frederick", parrots(:frederick).name)
808
+ end
809
+
810
+ def test_supports_label_string_interpolation
811
+ assert_equal("X marks the spot!", pirates(:mark).catchphrase)
812
+ end
813
+
814
+ def test_supports_polymorphic_belongs_to
815
+ assert_equal(pirates(:redbeard), treasures(:sapphire).looter)
816
+ assert_equal(parrots(:louis), treasures(:ruby).looter)
817
+ end
818
+
819
+ def test_only_generates_a_pk_if_necessary
820
+ m = Matey.first
821
+ m.pirate = pirates(:blackbeard)
822
+ m.target = pirates(:redbeard)
823
+ end
824
+
825
+ def test_supports_sti
826
+ assert_kind_of DeadParrot, parrots(:polly)
827
+ assert_equal pirates(:blackbeard), parrots(:polly).killer
828
+ end
829
+
830
+ def test_namespaced_models
831
+ assert admin_accounts(:signals37).users.include?(admin_users(:david))
832
+ assert_equal 2, admin_accounts(:signals37).users.size
833
+ end
834
+ end
835
+
836
+ class ActiveSupportSubclassWithFixturesTest < ActiveRecord::TestCase
837
+ fixtures :parrots
838
+
839
+ # This seemingly useless assertion catches a bug that caused the fixtures
840
+ # setup code call nil[]
841
+ def test_foo
842
+ assert_equal parrots(:louis), Parrot.find_by_name("King Louis")
843
+ end
844
+ end
845
+
846
+ class CustomNameForFixtureOrModelTest < ActiveRecord::TestCase
847
+ ActiveRecord::FixtureSet.reset_cache
848
+
849
+ set_fixture_class :randomly_named_a9 =>
850
+ ClassNameThatDoesNotFollowCONVENTIONS,
851
+ :'admin/randomly_named_a9' =>
852
+ Admin::ClassNameThatDoesNotFollowCONVENTIONS,
853
+ 'admin/randomly_named_b0' =>
854
+ Admin::ClassNameThatDoesNotFollowCONVENTIONS
855
+
856
+ fixtures :randomly_named_a9, 'admin/randomly_named_a9',
857
+ :'admin/randomly_named_b0'
858
+
859
+ def test_named_accessor_for_randomly_named_fixture_and_class
860
+ assert_kind_of ClassNameThatDoesNotFollowCONVENTIONS,
861
+ randomly_named_a9(:first_instance)
862
+ end
863
+
864
+ def test_named_accessor_for_randomly_named_namespaced_fixture_and_class
865
+ assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS,
866
+ admin_randomly_named_a9(:first_instance)
867
+ assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS,
868
+ admin_randomly_named_b0(:second_instance)
869
+ end
870
+
871
+ def test_table_name_is_defined_in_the_model
872
+ assert_equal 'randomly_named_table', ActiveRecord::FixtureSet::all_loaded_fixtures["admin/randomly_named_a9"].table_name
873
+ assert_equal 'randomly_named_table', Admin::ClassNameThatDoesNotFollowCONVENTIONS.table_name
874
+ end
875
+ end
876
+
877
+ class FixturesWithDefaultScopeTest < ActiveRecord::TestCase
878
+ fixtures :bulbs
879
+
880
+ test "inserts fixtures excluded by a default scope" do
881
+ assert_equal 1, Bulb.count
882
+ assert_equal 2, Bulb.unscoped.count
883
+ end
884
+
885
+ test "allows access to fixtures excluded by a default scope" do
886
+ assert_equal "special", bulbs(:special).name
887
+ end
888
+ end
889
+
890
+ class FixturesWithAbstractBelongsTo < ActiveRecord::TestCase
891
+ fixtures :pirates, :doubloons
892
+
893
+ test "creates fixtures with belongs_to associations defined in abstract base classes" do
894
+ assert_not_nil doubloons(:blackbeards_doubloon)
895
+ assert_equal pirates(:blackbeard), doubloons(:blackbeards_doubloon).pirate
896
+ end
897
+ end