ibm_db 3.0.4 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -1
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/README +225 -225
  6. data/ext/Makefile.nt32 +181 -181
  7. data/ext/Makefile.nt32.191 +212 -212
  8. data/ext/extconf.rb +291 -291
  9. data/ext/ibm_db.c +11887 -11884
  10. data/ext/ruby_ibm_db.h +241 -241
  11. data/ext/ruby_ibm_db_cli.c +866 -866
  12. data/ext/ruby_ibm_db_cli.h +500 -500
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -27
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
  19. data/test/assets/example.log +1 -1
  20. data/test/assets/test.txt +1 -1
  21. data/test/cases/adapter_test.rb +276 -261
  22. data/test/cases/aggregations_test.rb +158 -158
  23. data/test/cases/ar_schema_test.rb +161 -161
  24. data/test/cases/associations/association_scope_test.rb +21 -21
  25. data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
  26. data/test/cases/associations/callbacks_test.rb +192 -192
  27. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  28. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
  29. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  30. data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
  31. data/test/cases/associations/eager_singularization_test.rb +148 -148
  32. data/test/cases/associations/eager_test.rb +1429 -1411
  33. data/test/cases/associations/extension_test.rb +82 -82
  34. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
  35. data/test/cases/associations/has_many_associations_test.rb +2182 -2162
  36. data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
  37. data/test/cases/associations/has_one_associations_test.rb +610 -610
  38. data/test/cases/associations/has_one_through_associations_test.rb +380 -380
  39. data/test/cases/associations/inner_join_association_test.rb +139 -139
  40. data/test/cases/associations/inverse_associations_test.rb +706 -693
  41. data/test/cases/associations/join_model_test.rb +754 -754
  42. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  43. data/test/cases/associations/required_test.rb +82 -82
  44. data/test/cases/associations_test.rb +380 -380
  45. data/test/cases/attribute_decorators_test.rb +125 -125
  46. data/test/cases/attribute_methods/read_test.rb +60 -60
  47. data/test/cases/attribute_methods/serialization_test.rb +29 -29
  48. data/test/cases/attribute_methods_test.rb +952 -952
  49. data/test/cases/attribute_set_test.rb +210 -200
  50. data/test/cases/attribute_test.rb +180 -180
  51. data/test/cases/attributes_test.rb +136 -136
  52. data/test/cases/autosave_association_test.rb +1595 -1595
  53. data/test/cases/base_test.rb +1664 -1638
  54. data/test/cases/batches_test.rb +212 -212
  55. data/test/cases/binary_test.rb +52 -52
  56. data/test/cases/bind_parameter_test.rb +100 -100
  57. data/test/cases/calculations_test.rb +646 -646
  58. data/test/cases/callbacks_test.rb +543 -543
  59. data/test/cases/clone_test.rb +40 -40
  60. data/test/cases/coders/yaml_column_test.rb +63 -63
  61. data/test/cases/column_alias_test.rb +17 -17
  62. data/test/cases/column_definition_test.rb +123 -123
  63. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
  64. data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
  65. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  66. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
  67. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
  68. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  69. data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
  70. data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
  71. data/test/cases/connection_management_test.rb +122 -122
  72. data/test/cases/connection_pool_test.rb +346 -346
  73. data/test/cases/connection_specification/resolver_test.rb +116 -116
  74. data/test/cases/core_test.rb +112 -112
  75. data/test/cases/counter_cache_test.rb +209 -209
  76. data/test/cases/custom_locking_test.rb +17 -17
  77. data/test/cases/database_statements_test.rb +19 -19
  78. data/test/cases/date_time_test.rb +61 -61
  79. data/test/cases/defaults_test.rb +223 -223
  80. data/test/cases/dirty_test.rb +785 -775
  81. data/test/cases/disconnected_test.rb +28 -28
  82. data/test/cases/dup_test.rb +157 -157
  83. data/test/cases/enum_test.rb +290 -290
  84. data/test/cases/explain_subscriber_test.rb +64 -64
  85. data/test/cases/explain_test.rb +76 -76
  86. data/test/cases/finder_respond_to_test.rb +60 -60
  87. data/test/cases/finder_test.rb +1169 -1166
  88. data/test/cases/fixture_set/file_test.rb +138 -138
  89. data/test/cases/fixtures_test.rb +908 -897
  90. data/test/cases/forbidden_attributes_protection_test.rb +99 -99
  91. data/test/cases/habtm_destroy_order_test.rb +61 -61
  92. data/test/cases/helper.rb +210 -210
  93. data/test/cases/hot_compatibility_test.rb +54 -54
  94. data/test/cases/i18n_test.rb +45 -45
  95. data/test/cases/inheritance_test.rb +375 -375
  96. data/test/cases/integration_test.rb +139 -139
  97. data/test/cases/invalid_connection_test.rb +22 -22
  98. data/test/cases/invalid_date_test.rb +32 -32
  99. data/test/cases/invertible_migration_test.rb +295 -295
  100. data/test/cases/json_serialization_test.rb +302 -302
  101. data/test/cases/locking_test.rb +477 -477
  102. data/test/cases/log_subscriber_test.rb +136 -136
  103. data/test/cases/migration/change_schema_test - Copy.rb +448 -448
  104. data/test/cases/migration/change_schema_test.rb +512 -472
  105. data/test/cases/migration/change_table_test.rb +224 -224
  106. data/test/cases/migration/column_attributes_test.rb +192 -192
  107. data/test/cases/migration/column_positioning_test.rb +56 -56
  108. data/test/cases/migration/columns_test.rb +304 -304
  109. data/test/cases/migration/command_recorder_test.rb +305 -305
  110. data/test/cases/migration/create_join_table_test.rb +148 -148
  111. data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
  112. data/test/cases/migration/foreign_key_test.rb +328 -360
  113. data/test/cases/migration/helper.rb +39 -39
  114. data/test/cases/migration/index_test.rb +216 -216
  115. data/test/cases/migration/logger_test.rb +36 -36
  116. data/test/cases/migration/pending_migrations_test.rb +53 -53
  117. data/test/cases/migration/references_foreign_key_test.rb +169 -214
  118. data/test/cases/migration/references_index_test.rb +101 -101
  119. data/test/cases/migration/references_statements_test.rb +116 -116
  120. data/test/cases/migration/rename_table_test.rb +93 -93
  121. data/test/cases/migration/table_and_index_test.rb +24 -24
  122. data/test/cases/migration_test.rb +959 -959
  123. data/test/cases/migrator_test.rb +388 -388
  124. data/test/cases/mixin_test.rb +70 -70
  125. data/test/cases/modules_test.rb +173 -173
  126. data/test/cases/multiparameter_attributes_test.rb +350 -350
  127. data/test/cases/multiple_db_test.rb +115 -115
  128. data/test/cases/nested_attributes_test.rb +1070 -1057
  129. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  130. data/test/cases/persistence_test.rb +909 -909
  131. data/test/cases/pooled_connections_test.rb +81 -81
  132. data/test/cases/primary_keys_test.rb +237 -237
  133. data/test/cases/query_cache_test.rb +326 -326
  134. data/test/cases/quoting_test.rb +156 -156
  135. data/test/cases/readonly_test.rb +118 -118
  136. data/test/cases/reaper_test.rb +85 -85
  137. data/test/cases/reflection_test.rb +463 -454
  138. data/test/cases/relation/delegation_test.rb +68 -68
  139. data/test/cases/relation/merging_test.rb +161 -161
  140. data/test/cases/relation/mutation_test.rb +165 -165
  141. data/test/cases/relation/predicate_builder_test.rb +14 -14
  142. data/test/cases/relation/where_chain_test.rb +181 -181
  143. data/test/cases/relation/where_test.rb +300 -300
  144. data/test/cases/relation/where_test2.rb +36 -36
  145. data/test/cases/relation_test.rb +319 -297
  146. data/test/cases/relations_test.rb +1815 -1815
  147. data/test/cases/reload_models_test.rb +22 -22
  148. data/test/cases/result_test.rb +80 -80
  149. data/test/cases/sanitize_test.rb +83 -83
  150. data/test/cases/schema_dumper_test.rb +463 -463
  151. data/test/cases/scoping/default_scoping_test.rb +454 -454
  152. data/test/cases/scoping/named_scoping_test.rb +524 -524
  153. data/test/cases/scoping/relation_scoping_test.rb +357 -357
  154. data/test/cases/serialization_test.rb +104 -104
  155. data/test/cases/serialized_attribute_test.rb +277 -277
  156. data/test/cases/statement_cache_test.rb +98 -98
  157. data/test/cases/store_test.rb +194 -194
  158. data/test/cases/tasks/database_tasks_test.rb +398 -396
  159. data/test/cases/tasks/mysql_rake_test.rb +324 -311
  160. data/test/cases/tasks/postgresql_rake_test.rb +250 -245
  161. data/test/cases/tasks/sqlite_rake_test.rb +193 -193
  162. data/test/cases/test_case.rb +123 -123
  163. data/test/cases/timestamp_test.rb +467 -468
  164. data/test/cases/transaction_callbacks_test.rb +452 -452
  165. data/test/cases/transaction_isolation_test.rb +106 -106
  166. data/test/cases/transactions_test.rb +817 -817
  167. data/test/cases/type/decimal_test.rb +56 -51
  168. data/test/cases/type/integer_test.rb +121 -121
  169. data/test/cases/type/string_test.rb +36 -36
  170. data/test/cases/type/type_map_test.rb +177 -177
  171. data/test/cases/type/unsigned_integer_test.rb +18 -18
  172. data/test/cases/types_test.rb +141 -141
  173. data/test/cases/unconnected_test.rb +33 -33
  174. data/test/cases/validations/association_validation_test.rb +86 -86
  175. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  176. data/test/cases/validations/i18n_validation_test.rb +90 -90
  177. data/test/cases/validations/length_validation_test.rb +47 -47
  178. data/test/cases/validations/presence_validation_test.rb +68 -68
  179. data/test/cases/validations/uniqueness_validation_test.rb +457 -434
  180. data/test/cases/validations_repair_helper.rb +23 -23
  181. data/test/cases/validations_test.rb +165 -165
  182. data/test/cases/view_test.rb +119 -113
  183. data/test/cases/xml_serialization_test.rb +457 -457
  184. data/test/cases/yaml_serialization_test.rb +126 -86
  185. data/test/config.rb +5 -5
  186. data/test/config.yml +154 -154
  187. data/test/connections/native_ibm_db/connection.rb +43 -43
  188. data/test/fixtures/accounts.yml +29 -29
  189. data/test/fixtures/admin/accounts.yml +2 -2
  190. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  191. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  192. data/test/fixtures/admin/users.yml +10 -10
  193. data/test/fixtures/author_addresses.yml +17 -17
  194. data/test/fixtures/author_favorites.yml +3 -3
  195. data/test/fixtures/authors.yml +23 -23
  196. data/test/fixtures/binaries.yml +133 -133
  197. data/test/fixtures/books.yml +11 -11
  198. data/test/fixtures/bulbs.yml +5 -5
  199. data/test/fixtures/cars.yml +9 -9
  200. data/test/fixtures/categories.yml +19 -19
  201. data/test/fixtures/categories/special_categories.yml +9 -9
  202. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  203. data/test/fixtures/categories_ordered.yml +7 -7
  204. data/test/fixtures/categories_posts.yml +31 -31
  205. data/test/fixtures/categorizations.yml +23 -23
  206. data/test/fixtures/clubs.yml +8 -8
  207. data/test/fixtures/collections.yml +3 -3
  208. data/test/fixtures/colleges.yml +3 -3
  209. data/test/fixtures/comments.yml +65 -65
  210. data/test/fixtures/companies.yml +67 -67
  211. data/test/fixtures/computers.yml +10 -10
  212. data/test/fixtures/courses.yml +8 -8
  213. data/test/fixtures/customers.yml +25 -25
  214. data/test/fixtures/dashboards.yml +6 -6
  215. data/test/fixtures/developers.yml +21 -21
  216. data/test/fixtures/developers_projects.yml +16 -16
  217. data/test/fixtures/dog_lovers.yml +7 -7
  218. data/test/fixtures/dogs.yml +4 -4
  219. data/test/fixtures/doubloons.yml +3 -3
  220. data/test/fixtures/edges.yml +5 -5
  221. data/test/fixtures/entrants.yml +14 -14
  222. data/test/fixtures/essays.yml +6 -6
  223. data/test/fixtures/faces.yml +11 -11
  224. data/test/fixtures/fk_test_has_fk.yml +3 -3
  225. data/test/fixtures/fk_test_has_pk.yml +1 -1
  226. data/test/fixtures/friendships.yml +4 -4
  227. data/test/fixtures/funny_jokes.yml +10 -10
  228. data/test/fixtures/interests.yml +33 -33
  229. data/test/fixtures/items.yml +3 -3
  230. data/test/fixtures/jobs.yml +7 -7
  231. data/test/fixtures/legacy_things.yml +3 -3
  232. data/test/fixtures/mateys.yml +4 -4
  233. data/test/fixtures/member_details.yml +8 -8
  234. data/test/fixtures/member_types.yml +6 -6
  235. data/test/fixtures/members.yml +11 -11
  236. data/test/fixtures/memberships.yml +34 -34
  237. data/test/fixtures/men.yml +5 -5
  238. data/test/fixtures/minimalistics.yml +2 -2
  239. data/test/fixtures/minivans.yml +5 -5
  240. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  241. data/test/fixtures/mixins.yml +29 -29
  242. data/test/fixtures/movies.yml +7 -7
  243. data/test/fixtures/naked/csv/accounts.csv +1 -1
  244. data/test/fixtures/naked/yml/accounts.yml +1 -1
  245. data/test/fixtures/naked/yml/companies.yml +1 -1
  246. data/test/fixtures/naked/yml/courses.yml +1 -1
  247. data/test/fixtures/organizations.yml +5 -5
  248. data/test/fixtures/other_topics.yml +42 -42
  249. data/test/fixtures/owners.yml +9 -9
  250. data/test/fixtures/parrots.yml +27 -27
  251. data/test/fixtures/parrots_pirates.yml +7 -7
  252. data/test/fixtures/people.yml +24 -24
  253. data/test/fixtures/peoples_treasures.yml +3 -3
  254. data/test/fixtures/pets.yml +19 -19
  255. data/test/fixtures/pirates.yml +12 -12
  256. data/test/fixtures/posts.yml +80 -80
  257. data/test/fixtures/price_estimates.yml +7 -7
  258. data/test/fixtures/products.yml +4 -4
  259. data/test/fixtures/projects.yml +7 -7
  260. data/test/fixtures/randomly_named_a9.yml +7 -7
  261. data/test/fixtures/ratings.yml +14 -14
  262. data/test/fixtures/readers.yml +11 -11
  263. data/test/fixtures/references.yml +17 -17
  264. data/test/fixtures/reserved_words/distinct.yml +5 -5
  265. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  266. data/test/fixtures/reserved_words/group.yml +14 -14
  267. data/test/fixtures/reserved_words/select.yml +8 -8
  268. data/test/fixtures/reserved_words/values.yml +7 -7
  269. data/test/fixtures/ships.yml +6 -6
  270. data/test/fixtures/speedometers.yml +8 -8
  271. data/test/fixtures/sponsors.yml +12 -12
  272. data/test/fixtures/string_key_objects.yml +7 -7
  273. data/test/fixtures/subscribers.yml +10 -10
  274. data/test/fixtures/subscriptions.yml +12 -12
  275. data/test/fixtures/taggings.yml +78 -78
  276. data/test/fixtures/tags.yml +11 -11
  277. data/test/fixtures/tasks.yml +7 -7
  278. data/test/fixtures/teapots.yml +3 -3
  279. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  280. data/test/fixtures/to_be_linked/users.yml +10 -10
  281. data/test/fixtures/topics.yml +49 -49
  282. data/test/fixtures/toys.yml +14 -14
  283. data/test/fixtures/traffic_lights.yml +9 -9
  284. data/test/fixtures/treasures.yml +10 -10
  285. data/test/fixtures/uuid_children.yml +3 -3
  286. data/test/fixtures/uuid_parents.yml +2 -2
  287. data/test/fixtures/variants.yml +4 -4
  288. data/test/fixtures/vegetables.yml +19 -19
  289. data/test/fixtures/vertices.yml +3 -3
  290. data/test/fixtures/warehouse_things.yml +2 -2
  291. data/test/fixtures/zines.yml +5 -5
  292. data/test/ibm_db_test.rb +24 -24
  293. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  294. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  295. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  296. data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
  297. data/test/migrations/missing/1_people_have_last_names.rb +8 -8
  298. data/test/migrations/missing/3_we_need_reminders.rb +11 -11
  299. data/test/migrations/missing/4_innocent_jointable.rb +11 -11
  300. data/test/migrations/rename/1_we_need_things.rb +10 -10
  301. data/test/migrations/rename/2_rename_things.rb +8 -8
  302. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  303. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  304. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  305. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  306. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  307. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  308. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  309. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  310. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  311. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  312. data/test/migrations/valid/2_we_need_reminders.rb +11 -11
  313. data/test/migrations/valid/3_innocent_jointable.rb +11 -11
  314. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  315. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
  316. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
  317. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  318. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  319. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  320. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  321. data/test/models/admin.rb +4 -4
  322. data/test/models/admin/account.rb +2 -2
  323. data/test/models/admin/randomly_named_c1.rb +3 -3
  324. data/test/models/admin/user.rb +40 -40
  325. data/test/models/aircraft.rb +4 -4
  326. data/test/models/arunit2_model.rb +3 -3
  327. data/test/models/author.rb +212 -212
  328. data/test/models/auto_id.rb +4 -4
  329. data/test/models/autoloadable/extra_firm.rb +2 -2
  330. data/test/models/binary.rb +1 -1
  331. data/test/models/bird.rb +12 -12
  332. data/test/models/book.rb +18 -18
  333. data/test/models/boolean.rb +2 -2
  334. data/test/models/bulb.rb +51 -51
  335. data/test/models/cake_designer.rb +3 -3
  336. data/test/models/car.rb +26 -26
  337. data/test/models/carrier.rb +2 -2
  338. data/test/models/categorization.rb +19 -19
  339. data/test/models/category.rb +35 -35
  340. data/test/models/chef.rb +7 -3
  341. data/test/models/citation.rb +3 -3
  342. data/test/models/club.rb +23 -23
  343. data/test/models/college.rb +10 -10
  344. data/test/models/column.rb +3 -3
  345. data/test/models/column_name.rb +3 -3
  346. data/test/models/comment.rb +64 -64
  347. data/test/models/company.rb +228 -225
  348. data/test/models/company_in_module.rb +98 -98
  349. data/test/models/computer.rb +3 -3
  350. data/test/models/contact.rb +41 -41
  351. data/test/models/contract.rb +20 -20
  352. data/test/models/country.rb +7 -7
  353. data/test/models/course.rb +6 -6
  354. data/test/models/customer.rb +77 -77
  355. data/test/models/customer_carrier.rb +14 -14
  356. data/test/models/dashboard.rb +3 -3
  357. data/test/models/default.rb +2 -2
  358. data/test/models/department.rb +4 -4
  359. data/test/models/developer.rb +255 -252
  360. data/test/models/dog.rb +5 -5
  361. data/test/models/dog_lover.rb +5 -5
  362. data/test/models/doubloon.rb +12 -12
  363. data/test/models/drink_designer.rb +3 -3
  364. data/test/models/edge.rb +5 -5
  365. data/test/models/electron.rb +5 -5
  366. data/test/models/engine.rb +4 -4
  367. data/test/models/entrant.rb +3 -3
  368. data/test/models/essay.rb +5 -5
  369. data/test/models/event.rb +2 -2
  370. data/test/models/eye.rb +37 -37
  371. data/test/models/face.rb +9 -9
  372. data/test/models/friendship.rb +6 -6
  373. data/test/models/guid.rb +1 -1
  374. data/test/models/hotel.rb +9 -6
  375. data/test/models/image.rb +3 -3
  376. data/test/models/interest.rb +5 -5
  377. data/test/models/invoice.rb +4 -4
  378. data/test/models/item.rb +7 -7
  379. data/test/models/job.rb +7 -7
  380. data/test/models/joke.rb +7 -7
  381. data/test/models/keyboard.rb +3 -3
  382. data/test/models/legacy_thing.rb +3 -3
  383. data/test/models/lesson.rb +11 -11
  384. data/test/models/line_item.rb +3 -3
  385. data/test/models/liquid.rb +4 -4
  386. data/test/models/man.rb +11 -11
  387. data/test/models/matey.rb +4 -4
  388. data/test/models/member.rb +41 -41
  389. data/test/models/member_detail.rb +7 -7
  390. data/test/models/member_type.rb +3 -3
  391. data/test/models/membership.rb +35 -35
  392. data/test/models/minimalistic.rb +2 -2
  393. data/test/models/minivan.rb +9 -9
  394. data/test/models/mixed_case_monkey.rb +3 -3
  395. data/test/models/molecule.rb +6 -6
  396. data/test/models/movie.rb +5 -5
  397. data/test/models/order.rb +4 -4
  398. data/test/models/organization.rb +14 -14
  399. data/test/models/owner.rb +34 -34
  400. data/test/models/parrot.rb +29 -29
  401. data/test/models/person.rb +143 -143
  402. data/test/models/personal_legacy_thing.rb +4 -4
  403. data/test/models/pet.rb +15 -15
  404. data/test/models/pirate.rb +92 -92
  405. data/test/models/possession.rb +3 -3
  406. data/test/models/post.rb +264 -264
  407. data/test/models/price_estimate.rb +4 -4
  408. data/test/models/professor.rb +5 -5
  409. data/test/models/project.rb +31 -29
  410. data/test/models/publisher.rb +2 -2
  411. data/test/models/publisher/article.rb +4 -4
  412. data/test/models/publisher/magazine.rb +3 -3
  413. data/test/models/randomly_named_c1.rb +3 -3
  414. data/test/models/rating.rb +4 -4
  415. data/test/models/reader.rb +23 -23
  416. data/test/models/record.rb +2 -2
  417. data/test/models/reference.rb +22 -22
  418. data/test/models/reply.rb +61 -61
  419. data/test/models/ship.rb +33 -33
  420. data/test/models/ship_part.rb +7 -7
  421. data/test/models/shop.rb +17 -17
  422. data/test/models/shop_account.rb +6 -6
  423. data/test/models/speedometer.rb +6 -6
  424. data/test/models/sponsor.rb +7 -7
  425. data/test/models/string_key_object.rb +3 -3
  426. data/test/models/student.rb +4 -4
  427. data/test/models/subject.rb +16 -16
  428. data/test/models/subscriber.rb +8 -8
  429. data/test/models/subscription.rb +4 -4
  430. data/test/models/tag.rb +7 -7
  431. data/test/models/tagging.rb +13 -13
  432. data/test/models/task.rb +5 -5
  433. data/test/models/topic.rb +124 -124
  434. data/test/models/toy.rb +6 -6
  435. data/test/models/traffic_light.rb +4 -4
  436. data/test/models/treasure.rb +14 -14
  437. data/test/models/treaty.rb +7 -7
  438. data/test/models/tyre.rb +11 -11
  439. data/test/models/uuid_child.rb +3 -3
  440. data/test/models/uuid_parent.rb +3 -3
  441. data/test/models/vegetables.rb +24 -24
  442. data/test/models/vehicle.rb +6 -6
  443. data/test/models/vertex.rb +9 -9
  444. data/test/models/warehouse_thing.rb +5 -5
  445. data/test/models/wheel.rb +3 -3
  446. data/test/models/without_table.rb +3 -3
  447. data/test/models/zine.rb +3 -3
  448. data/test/schema/mysql2_specific_schema.rb +58 -58
  449. data/test/schema/mysql_specific_schema.rb +70 -70
  450. data/test/schema/oracle_specific_schema.rb +43 -43
  451. data/test/schema/postgresql_specific_schema.rb +202 -202
  452. data/test/schema/schema.rb +952 -938
  453. data/test/schema/sqlite_specific_schema.rb +21 -21
  454. data/test/support/config.rb +43 -43
  455. data/test/support/connection.rb +22 -22
  456. data/test/support/connection_helper.rb +14 -14
  457. data/test/support/ddl_helper.rb +8 -8
  458. data/test/support/schema_dumping_helper.rb +20 -20
  459. metadata +3 -3
@@ -1,84 +1,84 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
-
4
- class I18nGenerateMessageValidationTest < ActiveRecord::TestCase
5
- def setup
6
- Topic.clear_validators!
7
- @topic = Topic.new
8
- I18n.backend = I18n::Backend::Simple.new
9
- end
10
-
11
- def reset_i18n_load_path
12
- @old_load_path, @old_backend = I18n.load_path.dup, I18n.backend
13
- I18n.load_path.clear
14
- I18n.backend = I18n::Backend::Simple.new
15
- yield
16
- ensure
17
- I18n.load_path.replace @old_load_path
18
- I18n.backend = @old_backend
19
- end
20
-
21
- # validates_associated: generate_message(attr_name, :invalid, :message => custom_message, :value => value)
22
- def test_generate_message_invalid_with_default_message
23
- assert_equal 'is invalid', @topic.errors.generate_message(:title, :invalid, :value => 'title')
24
- end
25
-
26
- def test_generate_message_invalid_with_custom_message
27
- assert_equal 'custom message title', @topic.errors.generate_message(:title, :invalid, :message => 'custom message %{value}', :value => 'title')
28
- end
29
-
30
- # validates_uniqueness_of: generate_message(attr_name, :taken, :message => custom_message)
31
- def test_generate_message_taken_with_default_message
32
- assert_equal "has already been taken", @topic.errors.generate_message(:title, :taken, :value => 'title')
33
- end
34
-
35
- def test_generate_message_taken_with_custom_message
36
- assert_equal 'custom message title', @topic.errors.generate_message(:title, :taken, :message => 'custom message %{value}', :value => 'title')
37
- end
38
-
39
- # ActiveRecord#RecordInvalid exception
40
-
41
- test "RecordInvalid exception can be localized" do
42
- topic = Topic.new
43
- topic.errors.add(:title, :invalid)
44
- topic.errors.add(:title, :blank)
45
- assert_equal "Validation failed: Title is invalid, Title can't be blank", ActiveRecord::RecordInvalid.new(topic).message
46
- end
47
-
48
- test "RecordInvalid exception translation falls back to the :errors namespace" do
49
- reset_i18n_load_path do
50
- I18n.backend.store_translations 'en', :errors => {:messages => {:record_invalid => 'fallback message'}}
51
- topic = Topic.new
52
- topic.errors.add(:title, :blank)
53
- assert_equal "fallback message", ActiveRecord::RecordInvalid.new(topic).message
54
- end
55
- end
56
-
57
- test "translation for 'taken' can be overridden" do
58
- reset_i18n_load_path do
59
- I18n.backend.store_translations "en", {errors: {attributes: {title: {taken: "Custom taken message" }}}}
60
- assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
61
- end
62
- end
63
-
64
- test "translation for 'taken' can be overridden in activerecord scope" do
65
- reset_i18n_load_path do
66
- I18n.backend.store_translations "en", {activerecord: {errors: {messages: {taken: "Custom taken message" }}}}
67
- assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
68
- end
69
- end
70
-
71
- test "translation for 'taken' can be overridden in activerecord model scope" do
72
- reset_i18n_load_path do
73
- I18n.backend.store_translations "en", {activerecord: {errors: {models: {topic: {taken: "Custom taken message" }}}}}
74
- assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
75
- end
76
- end
77
-
78
- test "translation for 'taken' can be overridden in activerecord attributes scope" do
79
- reset_i18n_load_path do
80
- I18n.backend.store_translations "en", {activerecord: {errors: {models: {topic: {attributes: {title: {taken: "Custom taken message" }}}}}}}
81
- assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
82
- end
83
- end
84
- end
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+
4
+ class I18nGenerateMessageValidationTest < ActiveRecord::TestCase
5
+ def setup
6
+ Topic.clear_validators!
7
+ @topic = Topic.new
8
+ I18n.backend = I18n::Backend::Simple.new
9
+ end
10
+
11
+ def reset_i18n_load_path
12
+ @old_load_path, @old_backend = I18n.load_path.dup, I18n.backend
13
+ I18n.load_path.clear
14
+ I18n.backend = I18n::Backend::Simple.new
15
+ yield
16
+ ensure
17
+ I18n.load_path.replace @old_load_path
18
+ I18n.backend = @old_backend
19
+ end
20
+
21
+ # validates_associated: generate_message(attr_name, :invalid, :message => custom_message, :value => value)
22
+ def test_generate_message_invalid_with_default_message
23
+ assert_equal 'is invalid', @topic.errors.generate_message(:title, :invalid, :value => 'title')
24
+ end
25
+
26
+ def test_generate_message_invalid_with_custom_message
27
+ assert_equal 'custom message title', @topic.errors.generate_message(:title, :invalid, :message => 'custom message %{value}', :value => 'title')
28
+ end
29
+
30
+ # validates_uniqueness_of: generate_message(attr_name, :taken, :message => custom_message)
31
+ def test_generate_message_taken_with_default_message
32
+ assert_equal "has already been taken", @topic.errors.generate_message(:title, :taken, :value => 'title')
33
+ end
34
+
35
+ def test_generate_message_taken_with_custom_message
36
+ assert_equal 'custom message title', @topic.errors.generate_message(:title, :taken, :message => 'custom message %{value}', :value => 'title')
37
+ end
38
+
39
+ # ActiveRecord#RecordInvalid exception
40
+
41
+ test "RecordInvalid exception can be localized" do
42
+ topic = Topic.new
43
+ topic.errors.add(:title, :invalid)
44
+ topic.errors.add(:title, :blank)
45
+ assert_equal "Validation failed: Title is invalid, Title can't be blank", ActiveRecord::RecordInvalid.new(topic).message
46
+ end
47
+
48
+ test "RecordInvalid exception translation falls back to the :errors namespace" do
49
+ reset_i18n_load_path do
50
+ I18n.backend.store_translations 'en', :errors => {:messages => {:record_invalid => 'fallback message'}}
51
+ topic = Topic.new
52
+ topic.errors.add(:title, :blank)
53
+ assert_equal "fallback message", ActiveRecord::RecordInvalid.new(topic).message
54
+ end
55
+ end
56
+
57
+ test "translation for 'taken' can be overridden" do
58
+ reset_i18n_load_path do
59
+ I18n.backend.store_translations "en", {errors: {attributes: {title: {taken: "Custom taken message" }}}}
60
+ assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
61
+ end
62
+ end
63
+
64
+ test "translation for 'taken' can be overridden in activerecord scope" do
65
+ reset_i18n_load_path do
66
+ I18n.backend.store_translations "en", {activerecord: {errors: {messages: {taken: "Custom taken message" }}}}
67
+ assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
68
+ end
69
+ end
70
+
71
+ test "translation for 'taken' can be overridden in activerecord model scope" do
72
+ reset_i18n_load_path do
73
+ I18n.backend.store_translations "en", {activerecord: {errors: {models: {topic: {taken: "Custom taken message" }}}}}
74
+ assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
75
+ end
76
+ end
77
+
78
+ test "translation for 'taken' can be overridden in activerecord attributes scope" do
79
+ reset_i18n_load_path do
80
+ I18n.backend.store_translations "en", {activerecord: {errors: {models: {topic: {attributes: {title: {taken: "Custom taken message" }}}}}}}
81
+ assert_equal "Custom taken message", @topic.errors.generate_message(:title, :taken, :value => 'title')
82
+ end
83
+ end
84
+ end
@@ -1,90 +1,90 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
- require 'models/reply'
4
-
5
- class I18nValidationTest < ActiveRecord::TestCase
6
- repair_validations(Topic, Reply)
7
-
8
- def setup
9
- repair_validations(Topic, Reply)
10
- Reply.validates_presence_of(:title)
11
- @topic = Topic.new
12
- @old_load_path, @old_backend = I18n.load_path.dup, I18n.backend
13
- I18n.load_path.clear
14
- I18n.backend = I18n::Backend::Simple.new
15
- I18n.backend.store_translations('en', :errors => {:messages => {:custom => nil}})
16
- end
17
-
18
- teardown do
19
- I18n.load_path.replace @old_load_path
20
- I18n.backend = @old_backend
21
- end
22
-
23
- def unique_topic
24
- @unique ||= Topic.create :title => 'unique!'
25
- end
26
-
27
- def replied_topic
28
- @replied_topic ||= begin
29
- topic = Topic.create(:title => "topic")
30
- topic.replies << Reply.new
31
- topic
32
- end
33
- end
34
-
35
- # A set of common cases for ActiveModel::Validations message generation that
36
- # are used to generate tests to keep things DRY
37
- #
38
- COMMON_CASES = [
39
- # [ case, validation_options, generate_message_options]
40
- [ "given no options", {}, {}],
41
- [ "given custom message", {:message => "custom"}, {:message => "custom"}],
42
- [ "given if condition", {:if => lambda { true }}, {}],
43
- [ "given unless condition", {:unless => lambda { false }}, {}],
44
- [ "given option that is not reserved", {:format => "jpg"}, {:format => "jpg" }]
45
- # TODO Add :on case, but below doesn't work, because then the validation isn't run for some reason
46
- # even when using .save instead .valid?
47
- # [ "given on condition", {on: :save}, {}]
48
- ]
49
-
50
- # validates_uniqueness_of w/ mocha
51
-
52
- COMMON_CASES.each do |name, validation_options, generate_message_options|
53
- test "validates_uniqueness_of on generated message #{name}" do
54
- Topic.validates_uniqueness_of :title, validation_options
55
- @topic.title = unique_topic.title
56
- @topic.errors.expects(:generate_message).with(:title, :taken, generate_message_options.merge(:value => 'unique!'))
57
- @topic.valid?
58
- end
59
- end
60
-
61
- # validates_associated w/ mocha
62
-
63
- COMMON_CASES.each do |name, validation_options, generate_message_options|
64
- test "validates_associated on generated message #{name}" do
65
- Topic.validates_associated :replies, validation_options
66
- replied_topic.errors.expects(:generate_message).with(:replies, :invalid, generate_message_options.merge(:value => replied_topic.replies))
67
- replied_topic.save
68
- end
69
- end
70
-
71
- # validates_associated w/o mocha
72
-
73
- def test_validates_associated_finds_custom_model_key_translation
74
- I18n.backend.store_translations 'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:replies => {:invalid => 'custom message'}}}}}}
75
- I18n.backend.store_translations 'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
76
-
77
- Topic.validates_associated :replies
78
- replied_topic.valid?
79
- assert_equal ['custom message'], replied_topic.errors[:replies].uniq
80
- end
81
-
82
- def test_validates_associated_finds_global_default_translation
83
- I18n.backend.store_translations 'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
84
-
85
- Topic.validates_associated :replies
86
- replied_topic.valid?
87
- assert_equal ['global message'], replied_topic.errors[:replies]
88
- end
89
-
90
- end
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+ require 'models/reply'
4
+
5
+ class I18nValidationTest < ActiveRecord::TestCase
6
+ repair_validations(Topic, Reply)
7
+
8
+ def setup
9
+ repair_validations(Topic, Reply)
10
+ Reply.validates_presence_of(:title)
11
+ @topic = Topic.new
12
+ @old_load_path, @old_backend = I18n.load_path.dup, I18n.backend
13
+ I18n.load_path.clear
14
+ I18n.backend = I18n::Backend::Simple.new
15
+ I18n.backend.store_translations('en', :errors => {:messages => {:custom => nil}})
16
+ end
17
+
18
+ teardown do
19
+ I18n.load_path.replace @old_load_path
20
+ I18n.backend = @old_backend
21
+ end
22
+
23
+ def unique_topic
24
+ @unique ||= Topic.create :title => 'unique!'
25
+ end
26
+
27
+ def replied_topic
28
+ @replied_topic ||= begin
29
+ topic = Topic.create(:title => "topic")
30
+ topic.replies << Reply.new
31
+ topic
32
+ end
33
+ end
34
+
35
+ # A set of common cases for ActiveModel::Validations message generation that
36
+ # are used to generate tests to keep things DRY
37
+ #
38
+ COMMON_CASES = [
39
+ # [ case, validation_options, generate_message_options]
40
+ [ "given no options", {}, {}],
41
+ [ "given custom message", {:message => "custom"}, {:message => "custom"}],
42
+ [ "given if condition", {:if => lambda { true }}, {}],
43
+ [ "given unless condition", {:unless => lambda { false }}, {}],
44
+ [ "given option that is not reserved", {:format => "jpg"}, {:format => "jpg" }]
45
+ # TODO Add :on case, but below doesn't work, because then the validation isn't run for some reason
46
+ # even when using .save instead .valid?
47
+ # [ "given on condition", {on: :save}, {}]
48
+ ]
49
+
50
+ # validates_uniqueness_of w/ mocha
51
+
52
+ COMMON_CASES.each do |name, validation_options, generate_message_options|
53
+ test "validates_uniqueness_of on generated message #{name}" do
54
+ Topic.validates_uniqueness_of :title, validation_options
55
+ @topic.title = unique_topic.title
56
+ @topic.errors.expects(:generate_message).with(:title, :taken, generate_message_options.merge(:value => 'unique!'))
57
+ @topic.valid?
58
+ end
59
+ end
60
+
61
+ # validates_associated w/ mocha
62
+
63
+ COMMON_CASES.each do |name, validation_options, generate_message_options|
64
+ test "validates_associated on generated message #{name}" do
65
+ Topic.validates_associated :replies, validation_options
66
+ replied_topic.errors.expects(:generate_message).with(:replies, :invalid, generate_message_options.merge(:value => replied_topic.replies))
67
+ replied_topic.save
68
+ end
69
+ end
70
+
71
+ # validates_associated w/o mocha
72
+
73
+ def test_validates_associated_finds_custom_model_key_translation
74
+ I18n.backend.store_translations 'en', :activerecord => {:errors => {:models => {:topic => {:attributes => {:replies => {:invalid => 'custom message'}}}}}}
75
+ I18n.backend.store_translations 'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
76
+
77
+ Topic.validates_associated :replies
78
+ replied_topic.valid?
79
+ assert_equal ['custom message'], replied_topic.errors[:replies].uniq
80
+ end
81
+
82
+ def test_validates_associated_finds_global_default_translation
83
+ I18n.backend.store_translations 'en', :activerecord => {:errors => {:messages => {:invalid => 'global message'}}}
84
+
85
+ Topic.validates_associated :replies
86
+ replied_topic.valid?
87
+ assert_equal ['global message'], replied_topic.errors[:replies]
88
+ end
89
+
90
+ end
@@ -1,47 +1,47 @@
1
- # -*- coding: utf-8 -*-
2
- require "cases/helper"
3
- require 'models/owner'
4
- require 'models/pet'
5
-
6
- class LengthValidationTest < ActiveRecord::TestCase
7
- fixtures :owners
8
- repair_validations(Owner)
9
-
10
- def test_validates_size_of_association
11
- repair_validations Owner do
12
- assert_nothing_raised { Owner.validates_size_of :pets, :minimum => 1 }
13
- o = Owner.new('name' => 'nopets')
14
- assert !o.save
15
- assert o.errors[:pets].any?
16
- o.pets.build('name' => 'apet')
17
- assert o.valid?
18
- end
19
- end
20
-
21
- def test_validates_size_of_association_using_within
22
- repair_validations Owner do
23
- assert_nothing_raised { Owner.validates_size_of :pets, :within => 1..2 }
24
- o = Owner.new('name' => 'nopets')
25
- assert !o.save
26
- assert o.errors[:pets].any?
27
-
28
- o.pets.build('name' => 'apet')
29
- assert o.valid?
30
-
31
- 2.times { o.pets.build('name' => 'apet') }
32
- assert !o.save
33
- assert o.errors[:pets].any?
34
- end
35
- end
36
-
37
- def test_validates_size_of_association_utf8
38
- repair_validations Owner do
39
- assert_nothing_raised { Owner.validates_size_of :pets, :minimum => 1 }
40
- o = Owner.new('name' => 'あいうえおかきくけこ')
41
- assert !o.save
42
- assert o.errors[:pets].any?
43
- o.pets.build('name' => 'あいうえおかきくけこ')
44
- assert o.valid?
45
- end
46
- end
47
- end
1
+ # -*- coding: utf-8 -*-
2
+ require "cases/helper"
3
+ require 'models/owner'
4
+ require 'models/pet'
5
+
6
+ class LengthValidationTest < ActiveRecord::TestCase
7
+ fixtures :owners
8
+ repair_validations(Owner)
9
+
10
+ def test_validates_size_of_association
11
+ repair_validations Owner do
12
+ assert_nothing_raised { Owner.validates_size_of :pets, :minimum => 1 }
13
+ o = Owner.new('name' => 'nopets')
14
+ assert !o.save
15
+ assert o.errors[:pets].any?
16
+ o.pets.build('name' => 'apet')
17
+ assert o.valid?
18
+ end
19
+ end
20
+
21
+ def test_validates_size_of_association_using_within
22
+ repair_validations Owner do
23
+ assert_nothing_raised { Owner.validates_size_of :pets, :within => 1..2 }
24
+ o = Owner.new('name' => 'nopets')
25
+ assert !o.save
26
+ assert o.errors[:pets].any?
27
+
28
+ o.pets.build('name' => 'apet')
29
+ assert o.valid?
30
+
31
+ 2.times { o.pets.build('name' => 'apet') }
32
+ assert !o.save
33
+ assert o.errors[:pets].any?
34
+ end
35
+ end
36
+
37
+ def test_validates_size_of_association_utf8
38
+ repair_validations Owner do
39
+ assert_nothing_raised { Owner.validates_size_of :pets, :minimum => 1 }
40
+ o = Owner.new('name' => 'あいうえおかきくけこ')
41
+ assert !o.save
42
+ assert o.errors[:pets].any?
43
+ o.pets.build('name' => 'あいうえおかきくけこ')
44
+ assert o.valid?
45
+ end
46
+ end
47
+ end
@@ -1,68 +1,68 @@
1
- # encoding: utf-8
2
- require "cases/helper"
3
- require 'models/man'
4
- require 'models/face'
5
- require 'models/interest'
6
- require 'models/speedometer'
7
- require 'models/dashboard'
8
-
9
- class PresenceValidationTest < ActiveRecord::TestCase
10
- class Boy < Man; end
11
-
12
- repair_validations(Boy)
13
-
14
- def test_validates_presence_of_non_association
15
- Boy.validates_presence_of(:name)
16
- b = Boy.new
17
- assert b.invalid?
18
-
19
- b.name = "Alex"
20
- assert b.valid?
21
- end
22
-
23
- def test_validates_presence_of_has_one
24
- Boy.validates_presence_of(:face)
25
- b = Boy.new
26
- assert b.invalid?, "should not be valid if has_one association missing"
27
- assert_equal 1, b.errors[:face].size, "validates_presence_of should only add one error"
28
- end
29
-
30
- def test_validates_presence_of_has_one_marked_for_destruction
31
- Boy.validates_presence_of(:face)
32
- b = Boy.new
33
- f = Face.new
34
- b.face = f
35
- assert b.valid?
36
-
37
- f.mark_for_destruction
38
- assert b.invalid?
39
- end
40
-
41
- def test_validates_presence_of_has_many_marked_for_destruction
42
- Boy.validates_presence_of(:interests)
43
- b = Boy.new
44
- b.interests << [i1 = Interest.new, i2 = Interest.new]
45
- assert b.valid?
46
-
47
- i1.mark_for_destruction
48
- assert b.valid?
49
-
50
- i2.mark_for_destruction
51
- assert b.invalid?
52
- end
53
-
54
- def test_validates_presence_doesnt_convert_to_array
55
- speedometer = Class.new(Speedometer)
56
- speedometer.validates_presence_of :dashboard
57
-
58
- dash = Dashboard.new
59
-
60
- # dashboard has to_a method
61
- def dash.to_a; ['(/)', '(\)']; end
62
-
63
- s = speedometer.new
64
- s.dashboard = dash
65
-
66
- assert_nothing_raised { s.valid? }
67
- end
68
- end
1
+ # encoding: utf-8
2
+ require "cases/helper"
3
+ require 'models/man'
4
+ require 'models/face'
5
+ require 'models/interest'
6
+ require 'models/speedometer'
7
+ require 'models/dashboard'
8
+
9
+ class PresenceValidationTest < ActiveRecord::TestCase
10
+ class Boy < Man; end
11
+
12
+ repair_validations(Boy)
13
+
14
+ def test_validates_presence_of_non_association
15
+ Boy.validates_presence_of(:name)
16
+ b = Boy.new
17
+ assert b.invalid?
18
+
19
+ b.name = "Alex"
20
+ assert b.valid?
21
+ end
22
+
23
+ def test_validates_presence_of_has_one
24
+ Boy.validates_presence_of(:face)
25
+ b = Boy.new
26
+ assert b.invalid?, "should not be valid if has_one association missing"
27
+ assert_equal 1, b.errors[:face].size, "validates_presence_of should only add one error"
28
+ end
29
+
30
+ def test_validates_presence_of_has_one_marked_for_destruction
31
+ Boy.validates_presence_of(:face)
32
+ b = Boy.new
33
+ f = Face.new
34
+ b.face = f
35
+ assert b.valid?
36
+
37
+ f.mark_for_destruction
38
+ assert b.invalid?
39
+ end
40
+
41
+ def test_validates_presence_of_has_many_marked_for_destruction
42
+ Boy.validates_presence_of(:interests)
43
+ b = Boy.new
44
+ b.interests << [i1 = Interest.new, i2 = Interest.new]
45
+ assert b.valid?
46
+
47
+ i1.mark_for_destruction
48
+ assert b.valid?
49
+
50
+ i2.mark_for_destruction
51
+ assert b.invalid?
52
+ end
53
+
54
+ def test_validates_presence_doesnt_convert_to_array
55
+ speedometer = Class.new(Speedometer)
56
+ speedometer.validates_presence_of :dashboard
57
+
58
+ dash = Dashboard.new
59
+
60
+ # dashboard has to_a method
61
+ def dash.to_a; ['(/)', '(\)']; end
62
+
63
+ s = speedometer.new
64
+ s.dashboard = dash
65
+
66
+ assert_nothing_raised { s.valid? }
67
+ end
68
+ end