ibm_db 4.0.0-x86-mingw32 → 5.0.2-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 (570) hide show
  1. checksums.yaml +5 -5
  2. data/MANIFEST +14 -14
  3. data/README +208 -208
  4. data/ext/Makefile +269 -0
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/extconf.rb +322 -291
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db.c +11879 -11887
  10. data/ext/mkmf.log +110 -0
  11. data/ext/ruby_ibm_db.h +241 -241
  12. data/ext/ruby_ibm_db_cli.c +866 -866
  13. data/ext/ruby_ibm_db_cli.h +500 -500
  14. data/ext/unicode_support_version +3 -0
  15. data/init.rb +41 -41
  16. data/lib/IBM_DB.rb +27 -27
  17. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3533 -3452
  18. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -5
  19. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  20. data/lib/mswin32/ibm_db.rb +90 -90
  21. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  22. data/test/active_record/connection_adapters/fake_adapter.rb +49 -49
  23. data/test/assets/example.log +1 -1
  24. data/test/assets/test.txt +1 -1
  25. data/test/cases/adapter_test.rb +351 -351
  26. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -193
  27. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -50
  28. data/test/cases/adapters/mysql2/boolean_test.rb +100 -100
  29. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -63
  30. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -54
  31. data/test/cases/adapters/mysql2/connection_test.rb +210 -210
  32. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -45
  33. data/test/cases/adapters/mysql2/enum_test.rb +26 -26
  34. data/test/cases/adapters/mysql2/explain_test.rb +21 -21
  35. data/test/cases/adapters/mysql2/json_test.rb +195 -195
  36. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -83
  37. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -152
  38. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -59
  39. data/test/cases/adapters/mysql2/schema_test.rb +126 -126
  40. data/test/cases/adapters/mysql2/sp_test.rb +36 -36
  41. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -14
  42. data/test/cases/adapters/mysql2/table_options_test.rb +42 -42
  43. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -66
  44. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -98
  45. data/test/cases/adapters/postgresql/array_test.rb +339 -339
  46. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -82
  47. data/test/cases/adapters/postgresql/bytea_test.rb +134 -134
  48. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -26
  49. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -38
  50. data/test/cases/adapters/postgresql/cidr_test.rb +25 -25
  51. data/test/cases/adapters/postgresql/citext_test.rb +78 -78
  52. data/test/cases/adapters/postgresql/collation_test.rb +53 -53
  53. data/test/cases/adapters/postgresql/composite_test.rb +132 -132
  54. data/test/cases/adapters/postgresql/connection_test.rb +257 -257
  55. data/test/cases/adapters/postgresql/datatype_test.rb +92 -92
  56. data/test/cases/adapters/postgresql/domain_test.rb +47 -47
  57. data/test/cases/adapters/postgresql/enum_test.rb +91 -91
  58. data/test/cases/adapters/postgresql/explain_test.rb +20 -20
  59. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -63
  60. data/test/cases/adapters/postgresql/full_text_test.rb +44 -44
  61. data/test/cases/adapters/postgresql/geometric_test.rb +378 -378
  62. data/test/cases/adapters/postgresql/hstore_test.rb +382 -382
  63. data/test/cases/adapters/postgresql/infinity_test.rb +69 -69
  64. data/test/cases/adapters/postgresql/integer_test.rb +25 -25
  65. data/test/cases/adapters/postgresql/json_test.rb +237 -237
  66. data/test/cases/adapters/postgresql/ltree_test.rb +53 -53
  67. data/test/cases/adapters/postgresql/money_test.rb +96 -96
  68. data/test/cases/adapters/postgresql/network_test.rb +94 -94
  69. data/test/cases/adapters/postgresql/numbers_test.rb +49 -49
  70. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -405
  71. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -22
  72. data/test/cases/adapters/postgresql/quoting_test.rb +44 -44
  73. data/test/cases/adapters/postgresql/range_test.rb +343 -343
  74. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -111
  75. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -34
  76. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -119
  77. data/test/cases/adapters/postgresql/schema_test.rb +597 -597
  78. data/test/cases/adapters/postgresql/serial_test.rb +154 -154
  79. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -41
  80. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -90
  81. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -33
  82. data/test/cases/adapters/postgresql/utils_test.rb +62 -62
  83. data/test/cases/adapters/postgresql/uuid_test.rb +294 -294
  84. data/test/cases/adapters/postgresql/xml_test.rb +54 -54
  85. data/test/cases/adapters/sqlite3/collation_test.rb +53 -53
  86. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -98
  87. data/test/cases/adapters/sqlite3/explain_test.rb +21 -21
  88. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -101
  89. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -441
  90. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -24
  91. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -20
  92. data/test/cases/aggregations_test.rb +168 -168
  93. data/test/cases/ar_schema_test.rb +146 -146
  94. data/test/cases/associations/association_scope_test.rb +16 -16
  95. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1141
  96. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -41
  97. data/test/cases/associations/callbacks_test.rb +190 -190
  98. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  99. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  100. data/test/cases/associations/eager_load_nested_include_test.rb +126 -126
  101. data/test/cases/associations/eager_singularization_test.rb +148 -148
  102. data/test/cases/associations/eager_test.rb +1514 -1514
  103. data/test/cases/associations/extension_test.rb +87 -87
  104. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -1004
  105. data/test/cases/associations/has_many_associations_test.rb +2501 -2501
  106. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1271
  107. data/test/cases/associations/has_one_associations_test.rb +707 -707
  108. data/test/cases/associations/has_one_through_associations_test.rb +383 -383
  109. data/test/cases/associations/inner_join_association_test.rb +139 -139
  110. data/test/cases/associations/inverse_associations_test.rb +733 -733
  111. data/test/cases/associations/join_model_test.rb +777 -777
  112. data/test/cases/associations/left_outer_join_association_test.rb +88 -88
  113. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  114. data/test/cases/associations/required_test.rb +102 -102
  115. data/test/cases/associations_test.rb +385 -385
  116. data/test/cases/attribute_decorators_test.rb +126 -125
  117. data/test/cases/attribute_methods/read_test.rb +60 -60
  118. data/test/cases/attribute_methods_test.rb +1009 -1009
  119. data/test/cases/attribute_set_test.rb +270 -270
  120. data/test/cases/attribute_test.rb +246 -246
  121. data/test/cases/attributes_test.rb +253 -253
  122. data/test/cases/autosave_association_test.rb +1708 -1708
  123. data/test/cases/base_test.rb +1713 -1713
  124. data/test/cases/batches_test.rb +489 -489
  125. data/test/cases/binary_test.rb +44 -44
  126. data/test/cases/bind_parameter_test.rb +110 -110
  127. data/test/cases/cache_key_test.rb +26 -25
  128. data/test/cases/calculations_test.rb +798 -798
  129. data/test/cases/callbacks_test.rb +636 -636
  130. data/test/cases/clone_test.rb +40 -40
  131. data/test/cases/coders/json_test.rb +15 -15
  132. data/test/cases/coders/yaml_column_test.rb +63 -63
  133. data/test/cases/collection_cache_key_test.rb +115 -115
  134. data/test/cases/column_alias_test.rb +17 -17
  135. data/test/cases/column_definition_test.rb +92 -92
  136. data/test/cases/comment_test.rb +145 -143
  137. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -56
  138. data/test/cases/connection_adapters/connection_handler_test.rb +160 -160
  139. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  140. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -255
  141. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -69
  142. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  143. data/test/cases/connection_adapters/schema_cache_test.rb +61 -61
  144. data/test/cases/connection_adapters/type_lookup_test.rb +118 -118
  145. data/test/cases/connection_management_test.rb +112 -112
  146. data/test/cases/connection_pool_test.rb +521 -521
  147. data/test/cases/connection_specification/resolver_test.rb +131 -131
  148. data/test/cases/core_test.rb +112 -112
  149. data/test/cases/counter_cache_test.rb +214 -214
  150. data/test/cases/custom_locking_test.rb +17 -17
  151. data/test/cases/database_statements_test.rb +34 -34
  152. data/test/cases/date_test.rb +44 -44
  153. data/test/cases/date_time_precision_test.rb +107 -106
  154. data/test/cases/date_time_test.rb +61 -61
  155. data/test/cases/defaults_test.rb +219 -218
  156. data/test/cases/dirty_test.rb +763 -763
  157. data/test/cases/disconnected_test.rb +30 -30
  158. data/test/cases/dup_test.rb +157 -157
  159. data/test/cases/enum_test.rb +444 -444
  160. data/test/cases/errors_test.rb +16 -16
  161. data/test/cases/explain_subscriber_test.rb +64 -64
  162. data/test/cases/explain_test.rb +87 -87
  163. data/test/cases/finder_respond_to_test.rb +60 -60
  164. data/test/cases/finder_test.rb +1294 -1294
  165. data/test/cases/fixture_set/file_test.rb +156 -156
  166. data/test/cases/fixtures_test.rb +988 -988
  167. data/test/cases/forbidden_attributes_protection_test.rb +165 -165
  168. data/test/cases/habtm_destroy_order_test.rb +61 -61
  169. data/test/cases/helper.rb +204 -204
  170. data/test/cases/hot_compatibility_test.rb +142 -142
  171. data/test/cases/i18n_test.rb +45 -45
  172. data/test/cases/inheritance_test.rb +606 -606
  173. data/test/cases/integration_test.rb +155 -155
  174. data/test/cases/invalid_connection_test.rb +24 -24
  175. data/test/cases/invertible_migration_test.rb +387 -387
  176. data/test/cases/json_serialization_test.rb +311 -311
  177. data/test/cases/locking_test.rb +493 -493
  178. data/test/cases/log_subscriber_test.rb +225 -225
  179. data/test/cases/migration/change_schema_test.rb +458 -458
  180. data/test/cases/migration/change_table_test.rb +256 -256
  181. data/test/cases/migration/column_attributes_test.rb +176 -176
  182. data/test/cases/migration/column_positioning_test.rb +56 -56
  183. data/test/cases/migration/columns_test.rb +310 -310
  184. data/test/cases/migration/command_recorder_test.rb +350 -350
  185. data/test/cases/migration/compatibility_test.rb +118 -118
  186. data/test/cases/migration/create_join_table_test.rb +157 -157
  187. data/test/cases/migration/foreign_key_test.rb +362 -360
  188. data/test/cases/migration/helper.rb +39 -39
  189. data/test/cases/migration/index_test.rb +218 -218
  190. data/test/cases/migration/logger_test.rb +36 -36
  191. data/test/cases/migration/pending_migrations_test.rb +52 -52
  192. data/test/cases/migration/references_foreign_key_test.rb +221 -216
  193. data/test/cases/migration/references_index_test.rb +101 -101
  194. data/test/cases/migration/references_statements_test.rb +136 -136
  195. data/test/cases/migration/rename_table_test.rb +93 -93
  196. data/test/cases/migration_test.rb +1157 -1157
  197. data/test/cases/migrator_test.rb +471 -470
  198. data/test/cases/mixin_test.rb +68 -68
  199. data/test/cases/modules_test.rb +172 -172
  200. data/test/cases/multiparameter_attributes_test.rb +372 -372
  201. data/test/cases/multiple_db_test.rb +122 -122
  202. data/test/cases/nested_attributes_test.rb +1098 -1098
  203. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  204. data/test/cases/persistence_test.rb +1001 -1001
  205. data/test/cases/pooled_connections_test.rb +81 -81
  206. data/test/cases/primary_keys_test.rb +376 -376
  207. data/test/cases/query_cache_test.rb +446 -446
  208. data/test/cases/quoting_test.rb +202 -202
  209. data/test/cases/readonly_test.rb +119 -119
  210. data/test/cases/reaper_test.rb +85 -85
  211. data/test/cases/reflection_test.rb +509 -509
  212. data/test/cases/relation/delegation_test.rb +63 -63
  213. data/test/cases/relation/merging_test.rb +157 -157
  214. data/test/cases/relation/mutation_test.rb +183 -183
  215. data/test/cases/relation/or_test.rb +92 -92
  216. data/test/cases/relation/predicate_builder_test.rb +16 -16
  217. data/test/cases/relation/record_fetch_warning_test.rb +40 -40
  218. data/test/cases/relation/where_chain_test.rb +105 -105
  219. data/test/cases/relation/where_clause_test.rb +182 -182
  220. data/test/cases/relation/where_test.rb +322 -322
  221. data/test/cases/relation_test.rb +328 -328
  222. data/test/cases/relations_test.rb +2026 -2026
  223. data/test/cases/reload_models_test.rb +22 -22
  224. data/test/cases/result_test.rb +90 -90
  225. data/test/cases/sanitize_test.rb +176 -176
  226. data/test/cases/schema_dumper_test.rb +457 -457
  227. data/test/cases/schema_loading_test.rb +52 -52
  228. data/test/cases/scoping/default_scoping_test.rb +528 -528
  229. data/test/cases/scoping/named_scoping_test.rb +561 -561
  230. data/test/cases/scoping/relation_scoping_test.rb +400 -400
  231. data/test/cases/secure_token_test.rb +32 -32
  232. data/test/cases/serialization_test.rb +104 -104
  233. data/test/cases/serialized_attribute_test.rb +364 -364
  234. data/test/cases/statement_cache_test.rb +136 -136
  235. data/test/cases/store_test.rb +195 -195
  236. data/test/cases/suppressor_test.rb +63 -63
  237. data/test/cases/tasks/database_tasks_test.rb +462 -462
  238. data/test/cases/tasks/mysql_rake_test.rb +345 -345
  239. data/test/cases/tasks/postgresql_rake_test.rb +304 -304
  240. data/test/cases/tasks/sqlite_rake_test.rb +220 -220
  241. data/test/cases/test_case.rb +131 -131
  242. data/test/cases/test_fixtures_test.rb +36 -36
  243. data/test/cases/time_precision_test.rb +103 -102
  244. data/test/cases/timestamp_test.rb +501 -501
  245. data/test/cases/touch_later_test.rb +121 -121
  246. data/test/cases/transaction_callbacks_test.rb +518 -518
  247. data/test/cases/transaction_isolation_test.rb +106 -106
  248. data/test/cases/transactions_test.rb +835 -834
  249. data/test/cases/type/adapter_specific_registry_test.rb +133 -133
  250. data/test/cases/type/date_time_test.rb +14 -14
  251. data/test/cases/type/integer_test.rb +27 -27
  252. data/test/cases/type/string_test.rb +22 -22
  253. data/test/cases/type/type_map_test.rb +177 -177
  254. data/test/cases/type_test.rb +39 -39
  255. data/test/cases/types_test.rb +24 -24
  256. data/test/cases/unconnected_test.rb +33 -33
  257. data/test/cases/validations/absence_validation_test.rb +73 -73
  258. data/test/cases/validations/association_validation_test.rb +97 -97
  259. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  260. data/test/cases/validations/i18n_validation_test.rb +86 -86
  261. data/test/cases/validations/length_validation_test.rb +79 -79
  262. data/test/cases/validations/presence_validation_test.rb +103 -103
  263. data/test/cases/validations/uniqueness_validation_test.rb +548 -548
  264. data/test/cases/validations_repair_helper.rb +19 -19
  265. data/test/cases/validations_test.rb +194 -194
  266. data/test/cases/view_test.rb +216 -216
  267. data/test/cases/yaml_serialization_test.rb +121 -121
  268. data/test/config.example.yml +97 -97
  269. data/test/config.rb +5 -5
  270. data/test/connections/native_ibm_db/connection.rb +44 -0
  271. data/test/fixtures/accounts.yml +29 -29
  272. data/test/fixtures/admin/accounts.yml +2 -2
  273. data/test/fixtures/admin/users.yml +10 -10
  274. data/test/fixtures/author_addresses.yml +17 -17
  275. data/test/fixtures/author_favorites.yml +3 -3
  276. data/test/fixtures/authors.yml +23 -23
  277. data/test/fixtures/bad_posts.yml +9 -9
  278. data/test/fixtures/binaries.yml +133 -133
  279. data/test/fixtures/books.yml +31 -31
  280. data/test/fixtures/bulbs.yml +5 -5
  281. data/test/fixtures/cars.yml +9 -9
  282. data/test/fixtures/categories.yml +19 -19
  283. data/test/fixtures/categories/special_categories.yml +9 -9
  284. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  285. data/test/fixtures/categories_ordered.yml +7 -7
  286. data/test/fixtures/categories_posts.yml +31 -31
  287. data/test/fixtures/categorizations.yml +23 -23
  288. data/test/fixtures/clubs.yml +8 -8
  289. data/test/fixtures/collections.yml +3 -3
  290. data/test/fixtures/colleges.yml +3 -3
  291. data/test/fixtures/comments.yml +65 -65
  292. data/test/fixtures/companies.yml +67 -67
  293. data/test/fixtures/computers.yml +10 -10
  294. data/test/fixtures/content.yml +3 -3
  295. data/test/fixtures/content_positions.yml +3 -3
  296. data/test/fixtures/courses.yml +8 -8
  297. data/test/fixtures/customers.yml +25 -25
  298. data/test/fixtures/dashboards.yml +6 -6
  299. data/test/fixtures/dead_parrots.yml +5 -5
  300. data/test/fixtures/developers.yml +22 -22
  301. data/test/fixtures/developers_projects.yml +16 -16
  302. data/test/fixtures/dog_lovers.yml +7 -7
  303. data/test/fixtures/dogs.yml +4 -4
  304. data/test/fixtures/doubloons.yml +3 -3
  305. data/test/fixtures/edges.yml +5 -5
  306. data/test/fixtures/entrants.yml +14 -14
  307. data/test/fixtures/essays.yml +6 -6
  308. data/test/fixtures/faces.yml +11 -11
  309. data/test/fixtures/fk_test_has_fk.yml +3 -3
  310. data/test/fixtures/fk_test_has_pk.yml +1 -1
  311. data/test/fixtures/friendships.yml +4 -4
  312. data/test/fixtures/funny_jokes.yml +10 -10
  313. data/test/fixtures/interests.yml +33 -33
  314. data/test/fixtures/items.yml +3 -3
  315. data/test/fixtures/jobs.yml +7 -7
  316. data/test/fixtures/legacy_things.yml +3 -3
  317. data/test/fixtures/live_parrots.yml +4 -4
  318. data/test/fixtures/mateys.yml +4 -4
  319. data/test/fixtures/member_details.yml +8 -8
  320. data/test/fixtures/member_types.yml +6 -6
  321. data/test/fixtures/members.yml +11 -11
  322. data/test/fixtures/memberships.yml +34 -34
  323. data/test/fixtures/men.yml +5 -5
  324. data/test/fixtures/minimalistics.yml +2 -2
  325. data/test/fixtures/minivans.yml +5 -5
  326. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  327. data/test/fixtures/mixins.yml +29 -29
  328. data/test/fixtures/movies.yml +7 -7
  329. data/test/fixtures/naked/yml/accounts.yml +1 -1
  330. data/test/fixtures/naked/yml/companies.yml +1 -1
  331. data/test/fixtures/naked/yml/courses.yml +1 -1
  332. data/test/fixtures/naked/yml/parrots.yml +2 -2
  333. data/test/fixtures/naked/yml/trees.yml +3 -3
  334. data/test/fixtures/nodes.yml +29 -29
  335. data/test/fixtures/organizations.yml +5 -5
  336. data/test/fixtures/other_comments.yml +6 -6
  337. data/test/fixtures/other_dogs.yml +2 -2
  338. data/test/fixtures/other_posts.yml +7 -7
  339. data/test/fixtures/other_topics.yml +42 -42
  340. data/test/fixtures/owners.yml +9 -9
  341. data/test/fixtures/parrots.yml +27 -27
  342. data/test/fixtures/parrots_pirates.yml +7 -7
  343. data/test/fixtures/people.yml +24 -24
  344. data/test/fixtures/peoples_treasures.yml +3 -3
  345. data/test/fixtures/pets.yml +19 -19
  346. data/test/fixtures/pirates.yml +12 -15
  347. data/test/fixtures/posts.yml +80 -80
  348. data/test/fixtures/price_estimates.yml +16 -16
  349. data/test/fixtures/products.yml +4 -4
  350. data/test/fixtures/projects.yml +7 -7
  351. data/test/fixtures/ratings.yml +14 -14
  352. data/test/fixtures/readers.yml +11 -11
  353. data/test/fixtures/references.yml +17 -17
  354. data/test/fixtures/reserved_words/distinct.yml +5 -5
  355. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  356. data/test/fixtures/reserved_words/group.yml +14 -14
  357. data/test/fixtures/reserved_words/select.yml +8 -8
  358. data/test/fixtures/reserved_words/values.yml +7 -7
  359. data/test/fixtures/ships.yml +6 -6
  360. data/test/fixtures/speedometers.yml +8 -8
  361. data/test/fixtures/sponsors.yml +12 -12
  362. data/test/fixtures/string_key_objects.yml +7 -7
  363. data/test/fixtures/subscribers.yml +10 -10
  364. data/test/fixtures/subscriptions.yml +12 -12
  365. data/test/fixtures/taggings.yml +78 -78
  366. data/test/fixtures/tags.yml +11 -11
  367. data/test/fixtures/tasks.yml +7 -7
  368. data/test/fixtures/teapots.yml +3 -3
  369. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  370. data/test/fixtures/to_be_linked/users.yml +10 -10
  371. data/test/fixtures/topics.yml +49 -49
  372. data/test/fixtures/toys.yml +14 -14
  373. data/test/fixtures/traffic_lights.yml +9 -9
  374. data/test/fixtures/treasures.yml +10 -10
  375. data/test/fixtures/trees.yml +3 -3
  376. data/test/fixtures/uuid_children.yml +3 -3
  377. data/test/fixtures/uuid_parents.yml +2 -2
  378. data/test/fixtures/variants.yml +4 -4
  379. data/test/fixtures/vegetables.yml +19 -19
  380. data/test/fixtures/vertices.yml +3 -3
  381. data/test/fixtures/warehouse_things.yml +2 -2
  382. data/test/fixtures/zines.yml +5 -5
  383. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  384. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  385. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  386. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  387. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  388. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  389. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  390. data/test/migrations/rename/1_we_need_things.rb +11 -11
  391. data/test/migrations/rename/2_rename_things.rb +9 -9
  392. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  393. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  394. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  395. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  396. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  397. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  400. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  401. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  402. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  403. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  404. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  405. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  406. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  407. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  408. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  409. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  410. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  411. data/test/models/admin.rb +5 -5
  412. data/test/models/admin/account.rb +3 -3
  413. data/test/models/admin/user.rb +40 -40
  414. data/test/models/aircraft.rb +5 -5
  415. data/test/models/arunit2_model.rb +3 -3
  416. data/test/models/author.rb +209 -209
  417. data/test/models/auto_id.rb +4 -4
  418. data/test/models/autoloadable/extra_firm.rb +2 -2
  419. data/test/models/binary.rb +2 -2
  420. data/test/models/bird.rb +12 -12
  421. data/test/models/book.rb +23 -23
  422. data/test/models/boolean.rb +2 -2
  423. data/test/models/bulb.rb +52 -52
  424. data/test/models/cake_designer.rb +3 -3
  425. data/test/models/car.rb +29 -29
  426. data/test/models/carrier.rb +2 -2
  427. data/test/models/cat.rb +10 -10
  428. data/test/models/categorization.rb +19 -19
  429. data/test/models/category.rb +35 -35
  430. data/test/models/chef.rb +8 -8
  431. data/test/models/citation.rb +3 -3
  432. data/test/models/club.rb +25 -25
  433. data/test/models/college.rb +10 -10
  434. data/test/models/column.rb +3 -3
  435. data/test/models/column_name.rb +3 -3
  436. data/test/models/comment.rb +76 -76
  437. data/test/models/company.rb +230 -230
  438. data/test/models/company_in_module.rb +98 -98
  439. data/test/models/computer.rb +3 -3
  440. data/test/models/contact.rb +41 -41
  441. data/test/models/content.rb +40 -40
  442. data/test/models/contract.rb +20 -20
  443. data/test/models/country.rb +7 -7
  444. data/test/models/course.rb +6 -6
  445. data/test/models/customer.rb +83 -83
  446. data/test/models/customer_carrier.rb +14 -14
  447. data/test/models/dashboard.rb +3 -3
  448. data/test/models/default.rb +2 -2
  449. data/test/models/department.rb +4 -4
  450. data/test/models/developer.rb +274 -274
  451. data/test/models/dog.rb +5 -5
  452. data/test/models/dog_lover.rb +5 -5
  453. data/test/models/doubloon.rb +12 -12
  454. data/test/models/drink_designer.rb +3 -3
  455. data/test/models/edge.rb +5 -5
  456. data/test/models/electron.rb +5 -5
  457. data/test/models/engine.rb +4 -4
  458. data/test/models/entrant.rb +3 -3
  459. data/test/models/essay.rb +5 -5
  460. data/test/models/event.rb +3 -3
  461. data/test/models/eye.rb +37 -37
  462. data/test/models/face.rb +9 -9
  463. data/test/models/friendship.rb +6 -6
  464. data/test/models/guid.rb +2 -2
  465. data/test/models/guitar.rb +4 -4
  466. data/test/models/hotel.rb +11 -11
  467. data/test/models/image.rb +3 -3
  468. data/test/models/interest.rb +5 -5
  469. data/test/models/invoice.rb +4 -4
  470. data/test/models/item.rb +7 -7
  471. data/test/models/job.rb +7 -7
  472. data/test/models/joke.rb +7 -7
  473. data/test/models/keyboard.rb +3 -3
  474. data/test/models/legacy_thing.rb +3 -3
  475. data/test/models/lesson.rb +11 -11
  476. data/test/models/line_item.rb +3 -3
  477. data/test/models/liquid.rb +4 -4
  478. data/test/models/man.rb +11 -11
  479. data/test/models/matey.rb +4 -4
  480. data/test/models/member.rb +42 -42
  481. data/test/models/member_detail.rb +8 -8
  482. data/test/models/member_type.rb +3 -3
  483. data/test/models/membership.rb +35 -35
  484. data/test/models/mentor.rb +2 -2
  485. data/test/models/minimalistic.rb +2 -2
  486. data/test/models/minivan.rb +9 -9
  487. data/test/models/mixed_case_monkey.rb +3 -3
  488. data/test/models/mocktail_designer.rb +2 -2
  489. data/test/models/molecule.rb +6 -6
  490. data/test/models/movie.rb +5 -5
  491. data/test/models/node.rb +5 -5
  492. data/test/models/non_primary_key.rb +2 -2
  493. data/test/models/notification.rb +3 -3
  494. data/test/models/order.rb +4 -4
  495. data/test/models/organization.rb +14 -14
  496. data/test/models/other_dog.rb +5 -5
  497. data/test/models/owner.rb +37 -37
  498. data/test/models/parrot.rb +28 -28
  499. data/test/models/person.rb +142 -142
  500. data/test/models/personal_legacy_thing.rb +4 -4
  501. data/test/models/pet.rb +18 -18
  502. data/test/models/pet_treasure.rb +6 -6
  503. data/test/models/pirate.rb +92 -92
  504. data/test/models/possession.rb +3 -3
  505. data/test/models/post.rb +273 -273
  506. data/test/models/price_estimate.rb +4 -4
  507. data/test/models/professor.rb +5 -5
  508. data/test/models/project.rb +40 -40
  509. data/test/models/publisher.rb +2 -2
  510. data/test/models/publisher/article.rb +4 -4
  511. data/test/models/publisher/magazine.rb +3 -3
  512. data/test/models/rating.rb +4 -4
  513. data/test/models/reader.rb +23 -23
  514. data/test/models/recipe.rb +3 -3
  515. data/test/models/record.rb +2 -2
  516. data/test/models/reference.rb +22 -22
  517. data/test/models/reply.rb +61 -61
  518. data/test/models/ship.rb +39 -39
  519. data/test/models/ship_part.rb +8 -8
  520. data/test/models/shop.rb +17 -17
  521. data/test/models/shop_account.rb +6 -6
  522. data/test/models/speedometer.rb +6 -6
  523. data/test/models/sponsor.rb +7 -7
  524. data/test/models/string_key_object.rb +3 -3
  525. data/test/models/student.rb +4 -4
  526. data/test/models/subject.rb +16 -16
  527. data/test/models/subscriber.rb +8 -8
  528. data/test/models/subscription.rb +4 -4
  529. data/test/models/tag.rb +13 -13
  530. data/test/models/tagging.rb +13 -13
  531. data/test/models/task.rb +5 -5
  532. data/test/models/topic.rb +118 -118
  533. data/test/models/toy.rb +6 -6
  534. data/test/models/traffic_light.rb +4 -4
  535. data/test/models/treasure.rb +14 -14
  536. data/test/models/treaty.rb +7 -7
  537. data/test/models/tree.rb +3 -3
  538. data/test/models/tuning_peg.rb +4 -4
  539. data/test/models/tyre.rb +11 -11
  540. data/test/models/user.rb +14 -14
  541. data/test/models/uuid_child.rb +3 -3
  542. data/test/models/uuid_item.rb +6 -6
  543. data/test/models/uuid_parent.rb +3 -3
  544. data/test/models/vegetables.rb +24 -24
  545. data/test/models/vehicle.rb +6 -6
  546. data/test/models/vertex.rb +9 -9
  547. data/test/models/warehouse_thing.rb +5 -5
  548. data/test/models/wheel.rb +3 -3
  549. data/test/models/without_table.rb +3 -3
  550. data/test/models/zine.rb +3 -3
  551. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  552. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  553. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  554. data/test/schema/mysql2_specific_schema.rb +68 -68
  555. data/test/schema/oracle_specific_schema.rb +40 -40
  556. data/test/schema/postgresql_specific_schema.rb +114 -114
  557. data/test/schema/schema.rb +1057 -1057
  558. data/test/schema/schema.rb.original +1057 -1057
  559. data/test/schema/sqlite_specific_schema.rb +18 -18
  560. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  561. data/test/support/config.rb +43 -43
  562. data/test/support/connection.rb +23 -23
  563. data/test/support/connection_helper.rb +14 -14
  564. data/test/support/ddl_helper.rb +8 -8
  565. data/test/support/schema_dumping_helper.rb +20 -20
  566. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -22
  567. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -182
  568. metadata +24 -13
  569. data/test/fixtures/author_addresses.original +0 -11
  570. data/test/fixtures/authors.original +0 -17
@@ -1,30 +1,30 @@
1
- require "cases/helper"
2
-
3
- class TestRecord < ActiveRecord::Base
4
- end
5
-
6
- class TestDisconnectedAdapter < ActiveRecord::TestCase
7
- self.use_transactional_tests = false
8
-
9
- def setup
10
- @connection = ActiveRecord::Base.connection
11
- end
12
-
13
- teardown do
14
- return if in_memory_db?
15
- spec = ActiveRecord::Base.connection_config
16
- ActiveRecord::Base.establish_connection(spec)
17
- end
18
-
19
- unless in_memory_db?
20
- test "can't execute statements while disconnected" do
21
- @connection.execute "SELECT count(*) from products"
22
- @connection.disconnect!
23
- assert_raises(ActiveRecord::StatementInvalid) do
24
- silence_warnings do
25
- @connection.execute "SELECT count(*) from products"
26
- end
27
- end
28
- end
29
- end
30
- end
1
+ require "cases/helper"
2
+
3
+ class TestRecord < ActiveRecord::Base
4
+ end
5
+
6
+ class TestDisconnectedAdapter < ActiveRecord::TestCase
7
+ self.use_transactional_tests = false
8
+
9
+ def setup
10
+ @connection = ActiveRecord::Base.connection
11
+ end
12
+
13
+ teardown do
14
+ return if in_memory_db?
15
+ spec = ActiveRecord::Base.connection_config
16
+ ActiveRecord::Base.establish_connection(spec)
17
+ end
18
+
19
+ unless in_memory_db?
20
+ test "can't execute statements while disconnected" do
21
+ @connection.execute "SELECT count(*) from products"
22
+ @connection.disconnect!
23
+ assert_raises(ActiveRecord::StatementInvalid) do
24
+ silence_warnings do
25
+ @connection.execute "SELECT count(*) from products"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,157 +1,157 @@
1
- require "cases/helper"
2
- require 'models/reply'
3
- require 'models/topic'
4
-
5
- module ActiveRecord
6
- class DupTest < ActiveRecord::TestCase
7
- fixtures :topics
8
-
9
- def test_dup
10
- assert !Topic.new.freeze.dup.frozen?
11
- end
12
-
13
- def test_not_readonly
14
- topic = Topic.first
15
-
16
- duped = topic.dup
17
- assert !duped.readonly?, 'should not be readonly'
18
- end
19
-
20
- def test_is_readonly
21
- topic = Topic.first
22
- topic.readonly!
23
-
24
- duped = topic.dup
25
- assert duped.readonly?, 'should be readonly'
26
- end
27
-
28
- def test_dup_not_persisted
29
- topic = Topic.first
30
- duped = topic.dup
31
-
32
- assert !duped.persisted?, 'topic not persisted'
33
- assert duped.new_record?, 'topic is new'
34
- end
35
-
36
- def test_dup_not_destroyed
37
- topic = Topic.first
38
- topic.destroy
39
-
40
- duped = topic.dup
41
- assert_not duped.destroyed?
42
- end
43
-
44
- def test_dup_has_no_id
45
- topic = Topic.first
46
- duped = topic.dup
47
- assert_nil duped.id
48
- end
49
-
50
- def test_dup_with_modified_attributes
51
- topic = Topic.first
52
- topic.author_name = 'Aaron'
53
- duped = topic.dup
54
- assert_equal 'Aaron', duped.author_name
55
- end
56
-
57
- def test_dup_with_changes
58
- dbtopic = Topic.first
59
- topic = Topic.new
60
-
61
- topic.attributes = dbtopic.attributes.except("id")
62
-
63
- #duped has no timestamp values
64
- duped = dbtopic.dup
65
-
66
- #clear topic timestamp values
67
- topic.send(:clear_timestamp_attributes)
68
-
69
- assert_equal topic.changes, duped.changes
70
- end
71
-
72
- def test_dup_topics_are_independent
73
- topic = Topic.first
74
- topic.author_name = 'Aaron'
75
- duped = topic.dup
76
-
77
- duped.author_name = 'meow'
78
-
79
- assert_not_equal topic.changes, duped.changes
80
- end
81
-
82
- def test_dup_attributes_are_independent
83
- topic = Topic.first
84
- duped = topic.dup
85
-
86
- duped.author_name = 'meow'
87
- topic.author_name = 'Aaron'
88
-
89
- assert_equal 'Aaron', topic.author_name
90
- assert_equal 'meow', duped.author_name
91
- end
92
-
93
- def test_dup_timestamps_are_cleared
94
- topic = Topic.first
95
- assert_not_nil topic.updated_at
96
- assert_not_nil topic.created_at
97
-
98
- # temporary change to the topic object
99
- topic.updated_at -= 3.days
100
-
101
- #dup should not preserve the timestamps if present
102
- new_topic = topic.dup
103
- assert_nil new_topic.updated_at
104
- assert_nil new_topic.created_at
105
-
106
- new_topic.save
107
- assert_not_nil new_topic.updated_at
108
- assert_not_nil new_topic.created_at
109
- end
110
-
111
- def test_dup_after_initialize_callbacks
112
- topic = Topic.new
113
- assert Topic.after_initialize_called
114
- Topic.after_initialize_called = false
115
- topic.dup
116
- assert Topic.after_initialize_called
117
- end
118
-
119
- def test_dup_validity_is_independent
120
- repair_validations(Topic) do
121
- Topic.validates_presence_of :title
122
- topic = Topic.new("title" => "Literature")
123
- topic.valid?
124
-
125
- duped = topic.dup
126
- duped.title = nil
127
- assert duped.invalid?
128
-
129
- topic.title = nil
130
- duped.title = 'Mathematics'
131
- assert topic.invalid?
132
- assert duped.valid?
133
- end
134
- end
135
-
136
- def test_dup_with_default_scope
137
- prev_default_scopes = Topic.default_scopes
138
- Topic.default_scopes = [proc { Topic.where(:approved => true) }]
139
- topic = Topic.new(:approved => false)
140
- assert !topic.dup.approved?, "should not be overridden by default scopes"
141
- ensure
142
- Topic.default_scopes = prev_default_scopes
143
- end
144
-
145
- def test_dup_without_primary_key
146
- klass = Class.new(ActiveRecord::Base) do
147
- self.table_name = 'parrots_pirates'
148
- end
149
-
150
- record = klass.create!
151
-
152
- assert_nothing_raised do
153
- record.dup
154
- end
155
- end
156
- end
157
- end
1
+ require "cases/helper"
2
+ require 'models/reply'
3
+ require 'models/topic'
4
+
5
+ module ActiveRecord
6
+ class DupTest < ActiveRecord::TestCase
7
+ fixtures :topics
8
+
9
+ def test_dup
10
+ assert !Topic.new.freeze.dup.frozen?
11
+ end
12
+
13
+ def test_not_readonly
14
+ topic = Topic.first
15
+
16
+ duped = topic.dup
17
+ assert !duped.readonly?, 'should not be readonly'
18
+ end
19
+
20
+ def test_is_readonly
21
+ topic = Topic.first
22
+ topic.readonly!
23
+
24
+ duped = topic.dup
25
+ assert duped.readonly?, 'should be readonly'
26
+ end
27
+
28
+ def test_dup_not_persisted
29
+ topic = Topic.first
30
+ duped = topic.dup
31
+
32
+ assert !duped.persisted?, 'topic not persisted'
33
+ assert duped.new_record?, 'topic is new'
34
+ end
35
+
36
+ def test_dup_not_destroyed
37
+ topic = Topic.first
38
+ topic.destroy
39
+
40
+ duped = topic.dup
41
+ assert_not duped.destroyed?
42
+ end
43
+
44
+ def test_dup_has_no_id
45
+ topic = Topic.first
46
+ duped = topic.dup
47
+ assert_nil duped.id
48
+ end
49
+
50
+ def test_dup_with_modified_attributes
51
+ topic = Topic.first
52
+ topic.author_name = 'Aaron'
53
+ duped = topic.dup
54
+ assert_equal 'Aaron', duped.author_name
55
+ end
56
+
57
+ def test_dup_with_changes
58
+ dbtopic = Topic.first
59
+ topic = Topic.new
60
+
61
+ topic.attributes = dbtopic.attributes.except("id")
62
+
63
+ #duped has no timestamp values
64
+ duped = dbtopic.dup
65
+
66
+ #clear topic timestamp values
67
+ topic.send(:clear_timestamp_attributes)
68
+
69
+ assert_equal topic.changes, duped.changes
70
+ end
71
+
72
+ def test_dup_topics_are_independent
73
+ topic = Topic.first
74
+ topic.author_name = 'Aaron'
75
+ duped = topic.dup
76
+
77
+ duped.author_name = 'meow'
78
+
79
+ assert_not_equal topic.changes, duped.changes
80
+ end
81
+
82
+ def test_dup_attributes_are_independent
83
+ topic = Topic.first
84
+ duped = topic.dup
85
+
86
+ duped.author_name = 'meow'
87
+ topic.author_name = 'Aaron'
88
+
89
+ assert_equal 'Aaron', topic.author_name
90
+ assert_equal 'meow', duped.author_name
91
+ end
92
+
93
+ def test_dup_timestamps_are_cleared
94
+ topic = Topic.first
95
+ assert_not_nil topic.updated_at
96
+ assert_not_nil topic.created_at
97
+
98
+ # temporary change to the topic object
99
+ topic.updated_at -= 3.days
100
+
101
+ #dup should not preserve the timestamps if present
102
+ new_topic = topic.dup
103
+ assert_nil new_topic.updated_at
104
+ assert_nil new_topic.created_at
105
+
106
+ new_topic.save
107
+ assert_not_nil new_topic.updated_at
108
+ assert_not_nil new_topic.created_at
109
+ end
110
+
111
+ def test_dup_after_initialize_callbacks
112
+ topic = Topic.new
113
+ assert Topic.after_initialize_called
114
+ Topic.after_initialize_called = false
115
+ topic.dup
116
+ assert Topic.after_initialize_called
117
+ end
118
+
119
+ def test_dup_validity_is_independent
120
+ repair_validations(Topic) do
121
+ Topic.validates_presence_of :title
122
+ topic = Topic.new("title" => "Literature")
123
+ topic.valid?
124
+
125
+ duped = topic.dup
126
+ duped.title = nil
127
+ assert duped.invalid?
128
+
129
+ topic.title = nil
130
+ duped.title = 'Mathematics'
131
+ assert topic.invalid?
132
+ assert duped.valid?
133
+ end
134
+ end
135
+
136
+ def test_dup_with_default_scope
137
+ prev_default_scopes = Topic.default_scopes
138
+ Topic.default_scopes = [proc { Topic.where(:approved => true) }]
139
+ topic = Topic.new(:approved => false)
140
+ assert !topic.dup.approved?, "should not be overridden by default scopes"
141
+ ensure
142
+ Topic.default_scopes = prev_default_scopes
143
+ end
144
+
145
+ def test_dup_without_primary_key
146
+ klass = Class.new(ActiveRecord::Base) do
147
+ self.table_name = 'parrots_pirates'
148
+ end
149
+
150
+ record = klass.create!
151
+
152
+ assert_nothing_raised do
153
+ record.dup
154
+ end
155
+ end
156
+ end
157
+ end
@@ -1,444 +1,444 @@
1
- require 'cases/helper'
2
- require 'models/book'
3
-
4
- class EnumTest < ActiveRecord::TestCase
5
- fixtures :books
6
-
7
- setup do
8
- @book = books(:awdr)
9
- end
10
-
11
- test "query state by predicate" do
12
- assert @book.published?
13
- assert_not @book.written?
14
- assert_not @book.proposed?
15
-
16
- assert @book.read?
17
- assert @book.in_english?
18
- assert @book.author_visibility_visible?
19
- assert @book.illustrator_visibility_visible?
20
- assert @book.with_medium_font_size?
21
- end
22
-
23
- test "query state with strings" do
24
- assert_equal "published", @book.status
25
- assert_equal "read", @book.read_status
26
- assert_equal "english", @book.language
27
- assert_equal "visible", @book.author_visibility
28
- assert_equal "visible", @book.illustrator_visibility
29
- end
30
-
31
- test "find via scope" do
32
- assert_equal @book, Book.published.first
33
- assert_equal @book, Book.read.first
34
- assert_equal @book, Book.in_english.first
35
- assert_equal @book, Book.author_visibility_visible.first
36
- assert_equal @book, Book.illustrator_visibility_visible.first
37
- end
38
-
39
- test "find via where with values" do
40
- published, written = Book.statuses[:published], Book.statuses[:written]
41
-
42
- assert_equal @book, Book.where(status: published).first
43
- assert_not_equal @book, Book.where(status: written).first
44
- assert_equal @book, Book.where(status: [published]).first
45
- assert_not_equal @book, Book.where(status: [written]).first
46
- assert_not_equal @book, Book.where("status <> ?", published).first
47
- assert_equal @book, Book.where("status <> ?", written).first
48
- end
49
-
50
- test "find via where with symbols" do
51
- assert_equal @book, Book.where(status: :published).first
52
- assert_not_equal @book, Book.where(status: :written).first
53
- assert_equal @book, Book.where(status: [:published]).first
54
- assert_not_equal @book, Book.where(status: [:written]).first
55
- assert_not_equal @book, Book.where.not(status: :published).first
56
- assert_equal @book, Book.where.not(status: :written).first
57
- end
58
-
59
- test "find via where with strings" do
60
- assert_equal @book, Book.where(status: "published").first
61
- assert_not_equal @book, Book.where(status: "written").first
62
- assert_equal @book, Book.where(status: ["published"]).first
63
- assert_not_equal @book, Book.where(status: ["written"]).first
64
- assert_not_equal @book, Book.where.not(status: "published").first
65
- assert_equal @book, Book.where.not(status: "written").first
66
- end
67
-
68
- test "build from scope" do
69
- assert Book.written.build.written?
70
- assert_not Book.written.build.proposed?
71
- end
72
-
73
- test "build from where" do
74
- assert Book.where(status: Book.statuses[:written]).build.written?
75
- assert_not Book.where(status: Book.statuses[:written]).build.proposed?
76
- assert Book.where(status: :written).build.written?
77
- assert_not Book.where(status: :written).build.proposed?
78
- assert Book.where(status: "written").build.written?
79
- assert_not Book.where(status: "written").build.proposed?
80
- end
81
-
82
- test "update by declaration" do
83
- @book.written!
84
- assert @book.written?
85
- @book.in_english!
86
- assert @book.in_english?
87
- @book.author_visibility_visible!
88
- assert @book.author_visibility_visible?
89
- end
90
-
91
- test "update by setter" do
92
- @book.update! status: :written
93
- assert @book.written?
94
- end
95
-
96
- test "enum methods are overwritable" do
97
- assert_equal "do publish work...", @book.published!
98
- assert @book.published?
99
- end
100
-
101
- test "direct assignment" do
102
- @book.status = :written
103
- assert @book.written?
104
- end
105
-
106
- test "assign string value" do
107
- @book.status = "written"
108
- assert @book.written?
109
- end
110
-
111
- test "enum changed attributes" do
112
- old_status = @book.status
113
- old_language = @book.language
114
- @book.status = :proposed
115
- @book.language = :spanish
116
- assert_equal old_status, @book.changed_attributes[:status]
117
- assert_equal old_language, @book.changed_attributes[:language]
118
- end
119
-
120
- test "enum changes" do
121
- old_status = @book.status
122
- old_language = @book.language
123
- @book.status = :proposed
124
- @book.language = :spanish
125
- assert_equal [old_status, 'proposed'], @book.changes[:status]
126
- assert_equal [old_language, 'spanish'], @book.changes[:language]
127
- end
128
-
129
- test "enum attribute was" do
130
- old_status = @book.status
131
- old_language = @book.language
132
- @book.status = :published
133
- @book.language = :spanish
134
- assert_equal old_status, @book.attribute_was(:status)
135
- assert_equal old_language, @book.attribute_was(:language)
136
- end
137
-
138
- test "enum attribute changed" do
139
- @book.status = :proposed
140
- @book.language = :french
141
- assert @book.attribute_changed?(:status)
142
- assert @book.attribute_changed?(:language)
143
- end
144
-
145
- test "enum attribute changed to" do
146
- @book.status = :proposed
147
- @book.language = :french
148
- assert @book.attribute_changed?(:status, to: 'proposed')
149
- assert @book.attribute_changed?(:language, to: 'french')
150
- end
151
-
152
- test "enum attribute changed from" do
153
- old_status = @book.status
154
- old_language = @book.language
155
- @book.status = :proposed
156
- @book.language = :french
157
- assert @book.attribute_changed?(:status, from: old_status)
158
- assert @book.attribute_changed?(:language, from: old_language)
159
- end
160
-
161
- test "enum attribute changed from old status to new status" do
162
- old_status = @book.status
163
- old_language = @book.language
164
- @book.status = :proposed
165
- @book.language = :french
166
- assert @book.attribute_changed?(:status, from: old_status, to: 'proposed')
167
- assert @book.attribute_changed?(:language, from: old_language, to: 'french')
168
- end
169
-
170
- test "enum didn't change" do
171
- old_status = @book.status
172
- @book.status = old_status
173
- assert_not @book.attribute_changed?(:status)
174
- end
175
-
176
- test "persist changes that are dirty" do
177
- @book.status = :proposed
178
- assert @book.attribute_changed?(:status)
179
- @book.status = :written
180
- assert @book.attribute_changed?(:status)
181
- end
182
-
183
- test "reverted changes that are not dirty" do
184
- old_status = @book.status
185
- @book.status = :proposed
186
- assert @book.attribute_changed?(:status)
187
- @book.status = old_status
188
- assert_not @book.attribute_changed?(:status)
189
- end
190
-
191
- test "reverted changes are not dirty going from nil to value and back" do
192
- book = Book.create!(nullable_status: nil)
193
-
194
- book.nullable_status = :married
195
- assert book.attribute_changed?(:nullable_status)
196
-
197
- book.nullable_status = nil
198
- assert_not book.attribute_changed?(:nullable_status)
199
- end
200
-
201
- test "assign non existing value raises an error" do
202
- e = assert_raises(ArgumentError) do
203
- @book.status = :unknown
204
- end
205
- assert_equal "'unknown' is not a valid status", e.message
206
- end
207
-
208
- test "NULL values from database should be casted to nil" do
209
- Book.where(id: @book.id).update_all("status = NULL")
210
- assert_nil @book.reload.status
211
- end
212
-
213
- test "assign nil value" do
214
- @book.status = nil
215
- assert_nil @book.status
216
- end
217
-
218
- test "assign empty string value" do
219
- @book.status = ''
220
- assert_nil @book.status
221
- end
222
-
223
- test "assign long empty string value" do
224
- @book.status = ' '
225
- assert_nil @book.status
226
- end
227
-
228
- test "constant to access the mapping" do
229
- assert_equal 0, Book.statuses[:proposed]
230
- assert_equal 1, Book.statuses["written"]
231
- assert_equal 2, Book.statuses[:published]
232
- end
233
-
234
- test "building new objects with enum scopes" do
235
- assert Book.written.build.written?
236
- assert Book.read.build.read?
237
- assert Book.in_spanish.build.in_spanish?
238
- assert Book.illustrator_visibility_invisible.build.illustrator_visibility_invisible?
239
- end
240
-
241
- test "creating new objects with enum scopes" do
242
- assert Book.written.create.written?
243
- assert Book.read.create.read?
244
- assert Book.in_spanish.create.in_spanish?
245
- assert Book.illustrator_visibility_invisible.create.illustrator_visibility_invisible?
246
- end
247
-
248
- test "_before_type_cast returns the enum label (required for form fields)" do
249
- if @book.status_came_from_user?
250
- assert_equal "published", @book.status_before_type_cast
251
- else
252
- assert_equal "published", @book.status
253
- end
254
- end
255
-
256
- test "reserved enum names" do
257
- klass = Class.new(ActiveRecord::Base) do
258
- self.table_name = "books"
259
- enum status: [:proposed, :written, :published]
260
- end
261
-
262
- conflicts = [
263
- :column, # generates class method .columns, which conflicts with an AR method
264
- :logger, # generates #logger, which conflicts with an AR method
265
- :attributes, # generates #attributes=, which conflicts with an AR method
266
- ]
267
-
268
- conflicts.each_with_index do |name, i|
269
- e = assert_raises(ArgumentError) do
270
- klass.class_eval { enum name => ["value_#{i}"] }
271
- end
272
- assert_match(/You tried to define an enum named \"#{name}\" on the model/, e.message)
273
- end
274
- end
275
-
276
- test "reserved enum values" do
277
- klass = Class.new(ActiveRecord::Base) do
278
- self.table_name = "books"
279
- enum status: [:proposed, :written, :published]
280
- end
281
-
282
- conflicts = [
283
- :new, # generates a scope that conflicts with an AR class method
284
- :valid, # generates #valid?, which conflicts with an AR method
285
- :save, # generates #save!, which conflicts with an AR method
286
- :proposed, # same value as an existing enum
287
- :public, :private, :protected, # some important methods on Module and Class
288
- :name, :parent, :superclass
289
- ]
290
-
291
- conflicts.each_with_index do |value, i|
292
- e = assert_raises(ArgumentError, "enum value `#{value}` should not be allowed") do
293
- klass.class_eval { enum "status_#{i}" => [value] }
294
- end
295
- assert_match(/You tried to define an enum named .* on the model/, e.message)
296
- end
297
- end
298
-
299
- test "overriding enum method should not raise" do
300
- assert_nothing_raised do
301
- Class.new(ActiveRecord::Base) do
302
- self.table_name = "books"
303
-
304
- def published!
305
- super
306
- "do publish work..."
307
- end
308
-
309
- enum status: [:proposed, :written, :published]
310
-
311
- def written!
312
- super
313
- "do written work..."
314
- end
315
- end
316
- end
317
- end
318
-
319
- test "validate uniqueness" do
320
- klass = Class.new(ActiveRecord::Base) do
321
- def self.name; 'Book'; end
322
- enum status: [:proposed, :written]
323
- validates_uniqueness_of :status
324
- end
325
- klass.delete_all
326
- klass.create!(status: "proposed")
327
- book = klass.new(status: "written")
328
- assert book.valid?
329
- book.status = "proposed"
330
- assert_not book.valid?
331
- end
332
-
333
- test "validate inclusion of value in array" do
334
- klass = Class.new(ActiveRecord::Base) do
335
- def self.name; 'Book'; end
336
- enum status: [:proposed, :written]
337
- validates_inclusion_of :status, in: ["written"]
338
- end
339
- klass.delete_all
340
- invalid_book = klass.new(status: "proposed")
341
- assert_not invalid_book.valid?
342
- valid_book = klass.new(status: "written")
343
- assert valid_book.valid?
344
- end
345
-
346
- test "enums are distinct per class" do
347
- klass1 = Class.new(ActiveRecord::Base) do
348
- self.table_name = "books"
349
- enum status: [:proposed, :written]
350
- end
351
-
352
- klass2 = Class.new(ActiveRecord::Base) do
353
- self.table_name = "books"
354
- enum status: [:drafted, :uploaded]
355
- end
356
-
357
- book1 = klass1.proposed.create!
358
- book1.status = :written
359
- assert_equal ['proposed', 'written'], book1.status_change
360
-
361
- book2 = klass2.drafted.create!
362
- book2.status = :uploaded
363
- assert_equal ['drafted', 'uploaded'], book2.status_change
364
- end
365
-
366
- test "enums are inheritable" do
367
- subklass1 = Class.new(Book)
368
-
369
- subklass2 = Class.new(Book) do
370
- enum status: [:drafted, :uploaded]
371
- end
372
-
373
- book1 = subklass1.proposed.create!
374
- book1.status = :written
375
- assert_equal ['proposed', 'written'], book1.status_change
376
-
377
- book2 = subklass2.drafted.create!
378
- book2.status = :uploaded
379
- assert_equal ['drafted', 'uploaded'], book2.status_change
380
- end
381
-
382
- test "declare multiple enums at a time" do
383
- klass = Class.new(ActiveRecord::Base) do
384
- self.table_name = "books"
385
- enum status: [:proposed, :written, :published],
386
- nullable_status: [:single, :married]
387
- end
388
-
389
- book1 = klass.proposed.create!
390
- assert book1.proposed?
391
-
392
- book2 = klass.single.create!
393
- assert book2.single?
394
- end
395
-
396
- test "enum with alias_attribute" do
397
- klass = Class.new(ActiveRecord::Base) do
398
- self.table_name = "books"
399
- alias_attribute :aliased_status, :status
400
- enum aliased_status: [:proposed, :written, :published]
401
- end
402
-
403
- book = klass.proposed.create!
404
- assert book.proposed?
405
- assert_equal 'proposed', book.aliased_status
406
-
407
- book = klass.find(book.id)
408
- assert book.proposed?
409
- assert_equal 'proposed', book.aliased_status
410
- end
411
-
412
- test "query state by predicate with prefix" do
413
- assert @book.author_visibility_visible?
414
- assert_not @book.author_visibility_invisible?
415
- assert @book.illustrator_visibility_visible?
416
- assert_not @book.illustrator_visibility_invisible?
417
- end
418
-
419
- test "query state by predicate with custom prefix" do
420
- assert @book.in_english?
421
- assert_not @book.in_spanish?
422
- assert_not @book.in_french?
423
- end
424
-
425
- test "uses default status when no status is provided in fixtures" do
426
- book = books(:tlg)
427
- assert book.proposed?, "expected fixture to default to proposed status"
428
- assert book.in_english?, "expected fixture to default to english language"
429
- end
430
-
431
- test "uses default value from database on initialization" do
432
- book = Book.new
433
- assert book.proposed?
434
- end
435
-
436
- test "uses default value from database on initialization when using custom mapping" do
437
- book = Book.new
438
- assert book.hard?
439
- end
440
-
441
- test "data type of Enum type" do
442
- assert_equal :integer, Book.type_for_attribute('status').type
443
- end
444
- end
1
+ require 'cases/helper'
2
+ require 'models/book'
3
+
4
+ class EnumTest < ActiveRecord::TestCase
5
+ fixtures :books
6
+
7
+ setup do
8
+ @book = books(:awdr)
9
+ end
10
+
11
+ test "query state by predicate" do
12
+ assert @book.published?
13
+ assert_not @book.written?
14
+ assert_not @book.proposed?
15
+
16
+ assert @book.read?
17
+ assert @book.in_english?
18
+ assert @book.author_visibility_visible?
19
+ assert @book.illustrator_visibility_visible?
20
+ assert @book.with_medium_font_size?
21
+ end
22
+
23
+ test "query state with strings" do
24
+ assert_equal "published", @book.status
25
+ assert_equal "read", @book.read_status
26
+ assert_equal "english", @book.language
27
+ assert_equal "visible", @book.author_visibility
28
+ assert_equal "visible", @book.illustrator_visibility
29
+ end
30
+
31
+ test "find via scope" do
32
+ assert_equal @book, Book.published.first
33
+ assert_equal @book, Book.read.first
34
+ assert_equal @book, Book.in_english.first
35
+ assert_equal @book, Book.author_visibility_visible.first
36
+ assert_equal @book, Book.illustrator_visibility_visible.first
37
+ end
38
+
39
+ test "find via where with values" do
40
+ published, written = Book.statuses[:published], Book.statuses[:written]
41
+
42
+ assert_equal @book, Book.where(status: published).first
43
+ assert_not_equal @book, Book.where(status: written).first
44
+ assert_equal @book, Book.where(status: [published]).first
45
+ assert_not_equal @book, Book.where(status: [written]).first
46
+ assert_not_equal @book, Book.where("status <> ?", published).first
47
+ assert_equal @book, Book.where("status <> ?", written).first
48
+ end
49
+
50
+ test "find via where with symbols" do
51
+ assert_equal @book, Book.where(status: :published).first
52
+ assert_not_equal @book, Book.where(status: :written).first
53
+ assert_equal @book, Book.where(status: [:published]).first
54
+ assert_not_equal @book, Book.where(status: [:written]).first
55
+ assert_not_equal @book, Book.where.not(status: :published).first
56
+ assert_equal @book, Book.where.not(status: :written).first
57
+ end
58
+
59
+ test "find via where with strings" do
60
+ assert_equal @book, Book.where(status: "published").first
61
+ assert_not_equal @book, Book.where(status: "written").first
62
+ assert_equal @book, Book.where(status: ["published"]).first
63
+ assert_not_equal @book, Book.where(status: ["written"]).first
64
+ assert_not_equal @book, Book.where.not(status: "published").first
65
+ assert_equal @book, Book.where.not(status: "written").first
66
+ end
67
+
68
+ test "build from scope" do
69
+ assert Book.written.build.written?
70
+ assert_not Book.written.build.proposed?
71
+ end
72
+
73
+ test "build from where" do
74
+ assert Book.where(status: Book.statuses[:written]).build.written?
75
+ assert_not Book.where(status: Book.statuses[:written]).build.proposed?
76
+ assert Book.where(status: :written).build.written?
77
+ assert_not Book.where(status: :written).build.proposed?
78
+ assert Book.where(status: "written").build.written?
79
+ assert_not Book.where(status: "written").build.proposed?
80
+ end
81
+
82
+ test "update by declaration" do
83
+ @book.written!
84
+ assert @book.written?
85
+ @book.in_english!
86
+ assert @book.in_english?
87
+ @book.author_visibility_visible!
88
+ assert @book.author_visibility_visible?
89
+ end
90
+
91
+ test "update by setter" do
92
+ @book.update! status: :written
93
+ assert @book.written?
94
+ end
95
+
96
+ test "enum methods are overwritable" do
97
+ assert_equal "do publish work...", @book.published!
98
+ assert @book.published?
99
+ end
100
+
101
+ test "direct assignment" do
102
+ @book.status = :written
103
+ assert @book.written?
104
+ end
105
+
106
+ test "assign string value" do
107
+ @book.status = "written"
108
+ assert @book.written?
109
+ end
110
+
111
+ test "enum changed attributes" do
112
+ old_status = @book.status
113
+ old_language = @book.language
114
+ @book.status = :proposed
115
+ @book.language = :spanish
116
+ assert_equal old_status, @book.changed_attributes[:status]
117
+ assert_equal old_language, @book.changed_attributes[:language]
118
+ end
119
+
120
+ test "enum changes" do
121
+ old_status = @book.status
122
+ old_language = @book.language
123
+ @book.status = :proposed
124
+ @book.language = :spanish
125
+ assert_equal [old_status, 'proposed'], @book.changes[:status]
126
+ assert_equal [old_language, 'spanish'], @book.changes[:language]
127
+ end
128
+
129
+ test "enum attribute was" do
130
+ old_status = @book.status
131
+ old_language = @book.language
132
+ @book.status = :published
133
+ @book.language = :spanish
134
+ assert_equal old_status, @book.attribute_was(:status)
135
+ assert_equal old_language, @book.attribute_was(:language)
136
+ end
137
+
138
+ test "enum attribute changed" do
139
+ @book.status = :proposed
140
+ @book.language = :french
141
+ assert @book.attribute_changed?(:status)
142
+ assert @book.attribute_changed?(:language)
143
+ end
144
+
145
+ test "enum attribute changed to" do
146
+ @book.status = :proposed
147
+ @book.language = :french
148
+ assert @book.attribute_changed?(:status, to: 'proposed')
149
+ assert @book.attribute_changed?(:language, to: 'french')
150
+ end
151
+
152
+ test "enum attribute changed from" do
153
+ old_status = @book.status
154
+ old_language = @book.language
155
+ @book.status = :proposed
156
+ @book.language = :french
157
+ assert @book.attribute_changed?(:status, from: old_status)
158
+ assert @book.attribute_changed?(:language, from: old_language)
159
+ end
160
+
161
+ test "enum attribute changed from old status to new status" do
162
+ old_status = @book.status
163
+ old_language = @book.language
164
+ @book.status = :proposed
165
+ @book.language = :french
166
+ assert @book.attribute_changed?(:status, from: old_status, to: 'proposed')
167
+ assert @book.attribute_changed?(:language, from: old_language, to: 'french')
168
+ end
169
+
170
+ test "enum didn't change" do
171
+ old_status = @book.status
172
+ @book.status = old_status
173
+ assert_not @book.attribute_changed?(:status)
174
+ end
175
+
176
+ test "persist changes that are dirty" do
177
+ @book.status = :proposed
178
+ assert @book.attribute_changed?(:status)
179
+ @book.status = :written
180
+ assert @book.attribute_changed?(:status)
181
+ end
182
+
183
+ test "reverted changes that are not dirty" do
184
+ old_status = @book.status
185
+ @book.status = :proposed
186
+ assert @book.attribute_changed?(:status)
187
+ @book.status = old_status
188
+ assert_not @book.attribute_changed?(:status)
189
+ end
190
+
191
+ test "reverted changes are not dirty going from nil to value and back" do
192
+ book = Book.create!(nullable_status: nil)
193
+
194
+ book.nullable_status = :married
195
+ assert book.attribute_changed?(:nullable_status)
196
+
197
+ book.nullable_status = nil
198
+ assert_not book.attribute_changed?(:nullable_status)
199
+ end
200
+
201
+ test "assign non existing value raises an error" do
202
+ e = assert_raises(ArgumentError) do
203
+ @book.status = :unknown
204
+ end
205
+ assert_equal "'unknown' is not a valid status", e.message
206
+ end
207
+
208
+ test "NULL values from database should be casted to nil" do
209
+ Book.where(id: @book.id).update_all("status = NULL")
210
+ assert_nil @book.reload.status
211
+ end
212
+
213
+ test "assign nil value" do
214
+ @book.status = nil
215
+ assert_nil @book.status
216
+ end
217
+
218
+ test "assign empty string value" do
219
+ @book.status = ''
220
+ assert_nil @book.status
221
+ end
222
+
223
+ test "assign long empty string value" do
224
+ @book.status = ' '
225
+ assert_nil @book.status
226
+ end
227
+
228
+ test "constant to access the mapping" do
229
+ assert_equal 0, Book.statuses[:proposed]
230
+ assert_equal 1, Book.statuses["written"]
231
+ assert_equal 2, Book.statuses[:published]
232
+ end
233
+
234
+ test "building new objects with enum scopes" do
235
+ assert Book.written.build.written?
236
+ assert Book.read.build.read?
237
+ assert Book.in_spanish.build.in_spanish?
238
+ assert Book.illustrator_visibility_invisible.build.illustrator_visibility_invisible?
239
+ end
240
+
241
+ test "creating new objects with enum scopes" do
242
+ assert Book.written.create.written?
243
+ assert Book.read.create.read?
244
+ assert Book.in_spanish.create.in_spanish?
245
+ assert Book.illustrator_visibility_invisible.create.illustrator_visibility_invisible?
246
+ end
247
+
248
+ test "_before_type_cast returns the enum label (required for form fields)" do
249
+ if @book.status_came_from_user?
250
+ assert_equal "published", @book.status_before_type_cast
251
+ else
252
+ assert_equal "published", @book.status
253
+ end
254
+ end
255
+
256
+ test "reserved enum names" do
257
+ klass = Class.new(ActiveRecord::Base) do
258
+ self.table_name = "books"
259
+ enum status: [:proposed, :written, :published]
260
+ end
261
+
262
+ conflicts = [
263
+ :column, # generates class method .columns, which conflicts with an AR method
264
+ :logger, # generates #logger, which conflicts with an AR method
265
+ :attributes, # generates #attributes=, which conflicts with an AR method
266
+ ]
267
+
268
+ conflicts.each_with_index do |name, i|
269
+ e = assert_raises(ArgumentError) do
270
+ klass.class_eval { enum name => ["value_#{i}"] }
271
+ end
272
+ assert_match(/You tried to define an enum named \"#{name}\" on the model/, e.message)
273
+ end
274
+ end
275
+
276
+ test "reserved enum values" do
277
+ klass = Class.new(ActiveRecord::Base) do
278
+ self.table_name = "books"
279
+ enum status: [:proposed, :written, :published]
280
+ end
281
+
282
+ conflicts = [
283
+ :new, # generates a scope that conflicts with an AR class method
284
+ :valid, # generates #valid?, which conflicts with an AR method
285
+ :save, # generates #save!, which conflicts with an AR method
286
+ :proposed, # same value as an existing enum
287
+ :public, :private, :protected, # some important methods on Module and Class
288
+ :name, :parent, :superclass
289
+ ]
290
+
291
+ conflicts.each_with_index do |value, i|
292
+ e = assert_raises(ArgumentError, "enum value `#{value}` should not be allowed") do
293
+ klass.class_eval { enum "status_#{i}" => [value] }
294
+ end
295
+ assert_match(/You tried to define an enum named .* on the model/, e.message)
296
+ end
297
+ end
298
+
299
+ test "overriding enum method should not raise" do
300
+ assert_nothing_raised do
301
+ Class.new(ActiveRecord::Base) do
302
+ self.table_name = "books"
303
+
304
+ def published!
305
+ super
306
+ "do publish work..."
307
+ end
308
+
309
+ enum status: [:proposed, :written, :published]
310
+
311
+ def written!
312
+ super
313
+ "do written work..."
314
+ end
315
+ end
316
+ end
317
+ end
318
+
319
+ test "validate uniqueness" do
320
+ klass = Class.new(ActiveRecord::Base) do
321
+ def self.name; 'Book'; end
322
+ enum status: [:proposed, :written]
323
+ validates_uniqueness_of :status
324
+ end
325
+ klass.delete_all
326
+ klass.create!(status: "proposed")
327
+ book = klass.new(status: "written")
328
+ assert book.valid?
329
+ book.status = "proposed"
330
+ assert_not book.valid?
331
+ end
332
+
333
+ test "validate inclusion of value in array" do
334
+ klass = Class.new(ActiveRecord::Base) do
335
+ def self.name; 'Book'; end
336
+ enum status: [:proposed, :written]
337
+ validates_inclusion_of :status, in: ["written"]
338
+ end
339
+ klass.delete_all
340
+ invalid_book = klass.new(status: "proposed")
341
+ assert_not invalid_book.valid?
342
+ valid_book = klass.new(status: "written")
343
+ assert valid_book.valid?
344
+ end
345
+
346
+ test "enums are distinct per class" do
347
+ klass1 = Class.new(ActiveRecord::Base) do
348
+ self.table_name = "books"
349
+ enum status: [:proposed, :written]
350
+ end
351
+
352
+ klass2 = Class.new(ActiveRecord::Base) do
353
+ self.table_name = "books"
354
+ enum status: [:drafted, :uploaded]
355
+ end
356
+
357
+ book1 = klass1.proposed.create!
358
+ book1.status = :written
359
+ assert_equal ['proposed', 'written'], book1.status_change
360
+
361
+ book2 = klass2.drafted.create!
362
+ book2.status = :uploaded
363
+ assert_equal ['drafted', 'uploaded'], book2.status_change
364
+ end
365
+
366
+ test "enums are inheritable" do
367
+ subklass1 = Class.new(Book)
368
+
369
+ subklass2 = Class.new(Book) do
370
+ enum status: [:drafted, :uploaded]
371
+ end
372
+
373
+ book1 = subklass1.proposed.create!
374
+ book1.status = :written
375
+ assert_equal ['proposed', 'written'], book1.status_change
376
+
377
+ book2 = subklass2.drafted.create!
378
+ book2.status = :uploaded
379
+ assert_equal ['drafted', 'uploaded'], book2.status_change
380
+ end
381
+
382
+ test "declare multiple enums at a time" do
383
+ klass = Class.new(ActiveRecord::Base) do
384
+ self.table_name = "books"
385
+ enum status: [:proposed, :written, :published],
386
+ nullable_status: [:single, :married]
387
+ end
388
+
389
+ book1 = klass.proposed.create!
390
+ assert book1.proposed?
391
+
392
+ book2 = klass.single.create!
393
+ assert book2.single?
394
+ end
395
+
396
+ test "enum with alias_attribute" do
397
+ klass = Class.new(ActiveRecord::Base) do
398
+ self.table_name = "books"
399
+ alias_attribute :aliased_status, :status
400
+ enum aliased_status: [:proposed, :written, :published]
401
+ end
402
+
403
+ book = klass.proposed.create!
404
+ assert book.proposed?
405
+ assert_equal 'proposed', book.aliased_status
406
+
407
+ book = klass.find(book.id)
408
+ assert book.proposed?
409
+ assert_equal 'proposed', book.aliased_status
410
+ end
411
+
412
+ test "query state by predicate with prefix" do
413
+ assert @book.author_visibility_visible?
414
+ assert_not @book.author_visibility_invisible?
415
+ assert @book.illustrator_visibility_visible?
416
+ assert_not @book.illustrator_visibility_invisible?
417
+ end
418
+
419
+ test "query state by predicate with custom prefix" do
420
+ assert @book.in_english?
421
+ assert_not @book.in_spanish?
422
+ assert_not @book.in_french?
423
+ end
424
+
425
+ test "uses default status when no status is provided in fixtures" do
426
+ book = books(:tlg)
427
+ assert book.proposed?, "expected fixture to default to proposed status"
428
+ assert book.in_english?, "expected fixture to default to english language"
429
+ end
430
+
431
+ test "uses default value from database on initialization" do
432
+ book = Book.new
433
+ assert book.proposed?
434
+ end
435
+
436
+ test "uses default value from database on initialization when using custom mapping" do
437
+ book = Book.new
438
+ assert book.hard?
439
+ end
440
+
441
+ test "data type of Enum type" do
442
+ assert_equal :integer, Book.type_for_attribute('status').type
443
+ end
444
+ end