ibm_db 4.0.0-x86-mingw32 → 5.1.0-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 (576) 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.h +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +11879 -11887
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db.h +241 -241
  15. data/ext/ruby_ibm_db_cli.c +866 -866
  16. data/ext/ruby_ibm_db_cli.h +500 -500
  17. data/ext/ruby_ibm_db_cli.o +0 -0
  18. data/ext/unicode_support_version.h +3 -0
  19. data/init.rb +41 -41
  20. data/lib/IBM_DB.rb +27 -27
  21. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3593 -3452
  22. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -5
  23. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  24. data/lib/mswin32/ibm_db.rb +94 -90
  25. data/lib/mswin32/rb2x/i386/ruby26/ibm_db.so +0 -0
  26. data/lib/mswin32/rb2x/i386/ruby27/ibm_db.so +0 -0
  27. data/test/active_record/connection_adapters/fake_adapter.rb +49 -49
  28. data/test/assets/example.log +1 -1
  29. data/test/assets/test.txt +1 -1
  30. data/test/cases/adapter_test.rb +351 -351
  31. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -193
  32. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -50
  33. data/test/cases/adapters/mysql2/boolean_test.rb +100 -100
  34. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -63
  35. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -54
  36. data/test/cases/adapters/mysql2/connection_test.rb +210 -210
  37. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -45
  38. data/test/cases/adapters/mysql2/enum_test.rb +26 -26
  39. data/test/cases/adapters/mysql2/explain_test.rb +21 -21
  40. data/test/cases/adapters/mysql2/json_test.rb +195 -195
  41. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -83
  42. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -152
  43. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -59
  44. data/test/cases/adapters/mysql2/schema_test.rb +126 -126
  45. data/test/cases/adapters/mysql2/sp_test.rb +36 -36
  46. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -14
  47. data/test/cases/adapters/mysql2/table_options_test.rb +42 -42
  48. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -66
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -98
  50. data/test/cases/adapters/postgresql/array_test.rb +339 -339
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -82
  52. data/test/cases/adapters/postgresql/bytea_test.rb +134 -134
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -26
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -38
  55. data/test/cases/adapters/postgresql/cidr_test.rb +25 -25
  56. data/test/cases/adapters/postgresql/citext_test.rb +78 -78
  57. data/test/cases/adapters/postgresql/collation_test.rb +53 -53
  58. data/test/cases/adapters/postgresql/composite_test.rb +132 -132
  59. data/test/cases/adapters/postgresql/connection_test.rb +257 -257
  60. data/test/cases/adapters/postgresql/datatype_test.rb +92 -92
  61. data/test/cases/adapters/postgresql/domain_test.rb +47 -47
  62. data/test/cases/adapters/postgresql/enum_test.rb +91 -91
  63. data/test/cases/adapters/postgresql/explain_test.rb +20 -20
  64. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -63
  65. data/test/cases/adapters/postgresql/full_text_test.rb +44 -44
  66. data/test/cases/adapters/postgresql/geometric_test.rb +378 -378
  67. data/test/cases/adapters/postgresql/hstore_test.rb +382 -382
  68. data/test/cases/adapters/postgresql/infinity_test.rb +69 -69
  69. data/test/cases/adapters/postgresql/integer_test.rb +25 -25
  70. data/test/cases/adapters/postgresql/json_test.rb +237 -237
  71. data/test/cases/adapters/postgresql/ltree_test.rb +53 -53
  72. data/test/cases/adapters/postgresql/money_test.rb +96 -96
  73. data/test/cases/adapters/postgresql/network_test.rb +94 -94
  74. data/test/cases/adapters/postgresql/numbers_test.rb +49 -49
  75. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -405
  76. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -22
  77. data/test/cases/adapters/postgresql/quoting_test.rb +44 -44
  78. data/test/cases/adapters/postgresql/range_test.rb +343 -343
  79. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -111
  80. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -34
  81. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -119
  82. data/test/cases/adapters/postgresql/schema_test.rb +597 -597
  83. data/test/cases/adapters/postgresql/serial_test.rb +154 -154
  84. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -41
  85. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -90
  86. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -33
  87. data/test/cases/adapters/postgresql/utils_test.rb +62 -62
  88. data/test/cases/adapters/postgresql/uuid_test.rb +294 -294
  89. data/test/cases/adapters/postgresql/xml_test.rb +54 -54
  90. data/test/cases/adapters/sqlite3/collation_test.rb +53 -53
  91. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -98
  92. data/test/cases/adapters/sqlite3/explain_test.rb +21 -21
  93. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -101
  94. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -441
  95. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -24
  96. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -20
  97. data/test/cases/aggregations_test.rb +168 -168
  98. data/test/cases/ar_schema_test.rb +146 -146
  99. data/test/cases/associations/association_scope_test.rb +16 -16
  100. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1141
  101. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -41
  102. data/test/cases/associations/callbacks_test.rb +190 -190
  103. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  104. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  105. data/test/cases/associations/eager_load_nested_include_test.rb +126 -126
  106. data/test/cases/associations/eager_singularization_test.rb +148 -148
  107. data/test/cases/associations/eager_test.rb +1514 -1514
  108. data/test/cases/associations/extension_test.rb +87 -87
  109. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -1004
  110. data/test/cases/associations/has_many_associations_test.rb +2501 -2501
  111. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1271
  112. data/test/cases/associations/has_one_associations_test.rb +707 -707
  113. data/test/cases/associations/has_one_through_associations_test.rb +383 -383
  114. data/test/cases/associations/inner_join_association_test.rb +139 -139
  115. data/test/cases/associations/inverse_associations_test.rb +733 -733
  116. data/test/cases/associations/join_model_test.rb +777 -777
  117. data/test/cases/associations/left_outer_join_association_test.rb +88 -88
  118. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  119. data/test/cases/associations/required_test.rb +102 -102
  120. data/test/cases/associations_test.rb +385 -385
  121. data/test/cases/attribute_decorators_test.rb +126 -125
  122. data/test/cases/attribute_methods/read_test.rb +60 -60
  123. data/test/cases/attribute_methods_test.rb +1009 -1009
  124. data/test/cases/attribute_set_test.rb +270 -270
  125. data/test/cases/attribute_test.rb +246 -246
  126. data/test/cases/attributes_test.rb +253 -253
  127. data/test/cases/autosave_association_test.rb +1708 -1708
  128. data/test/cases/base_test.rb +1713 -1713
  129. data/test/cases/batches_test.rb +489 -489
  130. data/test/cases/binary_test.rb +44 -44
  131. data/test/cases/bind_parameter_test.rb +110 -110
  132. data/test/cases/cache_key_test.rb +26 -25
  133. data/test/cases/calculations_test.rb +798 -798
  134. data/test/cases/callbacks_test.rb +636 -636
  135. data/test/cases/clone_test.rb +40 -40
  136. data/test/cases/coders/json_test.rb +15 -15
  137. data/test/cases/coders/yaml_column_test.rb +63 -63
  138. data/test/cases/collection_cache_key_test.rb +115 -115
  139. data/test/cases/column_alias_test.rb +17 -17
  140. data/test/cases/column_definition_test.rb +92 -92
  141. data/test/cases/comment_test.rb +145 -143
  142. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -56
  143. data/test/cases/connection_adapters/connection_handler_test.rb +160 -160
  144. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  145. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -255
  146. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -69
  147. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  148. data/test/cases/connection_adapters/schema_cache_test.rb +61 -61
  149. data/test/cases/connection_adapters/type_lookup_test.rb +118 -118
  150. data/test/cases/connection_management_test.rb +112 -112
  151. data/test/cases/connection_pool_test.rb +521 -521
  152. data/test/cases/connection_specification/resolver_test.rb +131 -131
  153. data/test/cases/core_test.rb +112 -112
  154. data/test/cases/counter_cache_test.rb +214 -214
  155. data/test/cases/custom_locking_test.rb +17 -17
  156. data/test/cases/database_statements_test.rb +34 -34
  157. data/test/cases/date_test.rb +44 -44
  158. data/test/cases/date_time_precision_test.rb +107 -106
  159. data/test/cases/date_time_test.rb +61 -61
  160. data/test/cases/defaults_test.rb +219 -218
  161. data/test/cases/dirty_test.rb +763 -763
  162. data/test/cases/disconnected_test.rb +30 -30
  163. data/test/cases/dup_test.rb +157 -157
  164. data/test/cases/enum_test.rb +444 -444
  165. data/test/cases/errors_test.rb +16 -16
  166. data/test/cases/explain_subscriber_test.rb +64 -64
  167. data/test/cases/explain_test.rb +87 -87
  168. data/test/cases/finder_respond_to_test.rb +60 -60
  169. data/test/cases/finder_test.rb +1294 -1294
  170. data/test/cases/fixture_set/file_test.rb +156 -156
  171. data/test/cases/fixtures_test.rb +988 -988
  172. data/test/cases/forbidden_attributes_protection_test.rb +165 -165
  173. data/test/cases/habtm_destroy_order_test.rb +61 -61
  174. data/test/cases/helper.rb +204 -204
  175. data/test/cases/hot_compatibility_test.rb +142 -142
  176. data/test/cases/i18n_test.rb +45 -45
  177. data/test/cases/inheritance_test.rb +606 -606
  178. data/test/cases/integration_test.rb +155 -155
  179. data/test/cases/invalid_connection_test.rb +24 -24
  180. data/test/cases/invertible_migration_test.rb +387 -387
  181. data/test/cases/json_serialization_test.rb +311 -311
  182. data/test/cases/locking_test.rb +493 -493
  183. data/test/cases/log_subscriber_test.rb +225 -225
  184. data/test/cases/migration/change_schema_test.rb +458 -458
  185. data/test/cases/migration/change_table_test.rb +256 -256
  186. data/test/cases/migration/column_attributes_test.rb +176 -176
  187. data/test/cases/migration/column_positioning_test.rb +56 -56
  188. data/test/cases/migration/columns_test.rb +310 -310
  189. data/test/cases/migration/command_recorder_test.rb +350 -350
  190. data/test/cases/migration/compatibility_test.rb +118 -118
  191. data/test/cases/migration/create_join_table_test.rb +157 -157
  192. data/test/cases/migration/foreign_key_test.rb +362 -360
  193. data/test/cases/migration/helper.rb +39 -39
  194. data/test/cases/migration/index_test.rb +218 -218
  195. data/test/cases/migration/logger_test.rb +36 -36
  196. data/test/cases/migration/pending_migrations_test.rb +52 -52
  197. data/test/cases/migration/references_foreign_key_test.rb +221 -216
  198. data/test/cases/migration/references_index_test.rb +101 -101
  199. data/test/cases/migration/references_statements_test.rb +136 -136
  200. data/test/cases/migration/rename_table_test.rb +93 -93
  201. data/test/cases/migration_test.rb +1157 -1157
  202. data/test/cases/migrator_test.rb +471 -470
  203. data/test/cases/mixin_test.rb +68 -68
  204. data/test/cases/modules_test.rb +172 -172
  205. data/test/cases/multiparameter_attributes_test.rb +372 -372
  206. data/test/cases/multiple_db_test.rb +122 -122
  207. data/test/cases/nested_attributes_test.rb +1098 -1098
  208. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  209. data/test/cases/persistence_test.rb +1001 -1001
  210. data/test/cases/pooled_connections_test.rb +81 -81
  211. data/test/cases/primary_keys_test.rb +376 -376
  212. data/test/cases/query_cache_test.rb +446 -446
  213. data/test/cases/quoting_test.rb +202 -202
  214. data/test/cases/readonly_test.rb +119 -119
  215. data/test/cases/reaper_test.rb +85 -85
  216. data/test/cases/reflection_test.rb +509 -509
  217. data/test/cases/relation/delegation_test.rb +63 -63
  218. data/test/cases/relation/merging_test.rb +157 -157
  219. data/test/cases/relation/mutation_test.rb +183 -183
  220. data/test/cases/relation/or_test.rb +92 -92
  221. data/test/cases/relation/predicate_builder_test.rb +16 -16
  222. data/test/cases/relation/record_fetch_warning_test.rb +40 -40
  223. data/test/cases/relation/where_chain_test.rb +105 -105
  224. data/test/cases/relation/where_clause_test.rb +182 -182
  225. data/test/cases/relation/where_test.rb +322 -322
  226. data/test/cases/relation_test.rb +328 -328
  227. data/test/cases/relations_test.rb +2026 -2026
  228. data/test/cases/reload_models_test.rb +22 -22
  229. data/test/cases/result_test.rb +90 -90
  230. data/test/cases/sanitize_test.rb +176 -176
  231. data/test/cases/schema_dumper_test.rb +457 -457
  232. data/test/cases/schema_loading_test.rb +52 -52
  233. data/test/cases/scoping/default_scoping_test.rb +528 -528
  234. data/test/cases/scoping/named_scoping_test.rb +561 -561
  235. data/test/cases/scoping/relation_scoping_test.rb +400 -400
  236. data/test/cases/secure_token_test.rb +32 -32
  237. data/test/cases/serialization_test.rb +104 -104
  238. data/test/cases/serialized_attribute_test.rb +364 -364
  239. data/test/cases/statement_cache_test.rb +136 -136
  240. data/test/cases/store_test.rb +195 -195
  241. data/test/cases/suppressor_test.rb +63 -63
  242. data/test/cases/tasks/database_tasks_test.rb +462 -462
  243. data/test/cases/tasks/mysql_rake_test.rb +345 -345
  244. data/test/cases/tasks/postgresql_rake_test.rb +304 -304
  245. data/test/cases/tasks/sqlite_rake_test.rb +220 -220
  246. data/test/cases/test_case.rb +131 -131
  247. data/test/cases/test_fixtures_test.rb +36 -36
  248. data/test/cases/time_precision_test.rb +103 -102
  249. data/test/cases/timestamp_test.rb +501 -501
  250. data/test/cases/touch_later_test.rb +121 -121
  251. data/test/cases/transaction_callbacks_test.rb +518 -518
  252. data/test/cases/transaction_isolation_test.rb +106 -106
  253. data/test/cases/transactions_test.rb +835 -834
  254. data/test/cases/type/adapter_specific_registry_test.rb +133 -133
  255. data/test/cases/type/date_time_test.rb +14 -14
  256. data/test/cases/type/integer_test.rb +27 -27
  257. data/test/cases/type/string_test.rb +22 -22
  258. data/test/cases/type/type_map_test.rb +177 -177
  259. data/test/cases/type_test.rb +39 -39
  260. data/test/cases/types_test.rb +24 -24
  261. data/test/cases/unconnected_test.rb +33 -33
  262. data/test/cases/validations/absence_validation_test.rb +73 -73
  263. data/test/cases/validations/association_validation_test.rb +97 -97
  264. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  265. data/test/cases/validations/i18n_validation_test.rb +86 -86
  266. data/test/cases/validations/length_validation_test.rb +79 -79
  267. data/test/cases/validations/presence_validation_test.rb +103 -103
  268. data/test/cases/validations/uniqueness_validation_test.rb +548 -548
  269. data/test/cases/validations_repair_helper.rb +19 -19
  270. data/test/cases/validations_test.rb +194 -194
  271. data/test/cases/view_test.rb +216 -216
  272. data/test/cases/yaml_serialization_test.rb +121 -121
  273. data/test/config.example.yml +97 -97
  274. data/test/config.rb +5 -5
  275. data/test/connections/native_ibm_db/connection.rb +44 -0
  276. data/test/fixtures/accounts.yml +29 -29
  277. data/test/fixtures/admin/accounts.yml +2 -2
  278. data/test/fixtures/admin/users.yml +10 -10
  279. data/test/fixtures/author_addresses.yml +17 -17
  280. data/test/fixtures/author_favorites.yml +3 -3
  281. data/test/fixtures/authors.yml +23 -23
  282. data/test/fixtures/bad_posts.yml +9 -9
  283. data/test/fixtures/binaries.yml +133 -133
  284. data/test/fixtures/books.yml +31 -31
  285. data/test/fixtures/bulbs.yml +5 -5
  286. data/test/fixtures/cars.yml +9 -9
  287. data/test/fixtures/categories.yml +19 -19
  288. data/test/fixtures/categories/special_categories.yml +9 -9
  289. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  290. data/test/fixtures/categories_ordered.yml +7 -7
  291. data/test/fixtures/categories_posts.yml +31 -31
  292. data/test/fixtures/categorizations.yml +23 -23
  293. data/test/fixtures/clubs.yml +8 -8
  294. data/test/fixtures/collections.yml +3 -3
  295. data/test/fixtures/colleges.yml +3 -3
  296. data/test/fixtures/comments.yml +65 -65
  297. data/test/fixtures/companies.yml +67 -67
  298. data/test/fixtures/computers.yml +10 -10
  299. data/test/fixtures/content.yml +3 -3
  300. data/test/fixtures/content_positions.yml +3 -3
  301. data/test/fixtures/courses.yml +8 -8
  302. data/test/fixtures/customers.yml +25 -25
  303. data/test/fixtures/dashboards.yml +6 -6
  304. data/test/fixtures/dead_parrots.yml +5 -5
  305. data/test/fixtures/developers.yml +22 -22
  306. data/test/fixtures/developers_projects.yml +16 -16
  307. data/test/fixtures/dog_lovers.yml +7 -7
  308. data/test/fixtures/dogs.yml +4 -4
  309. data/test/fixtures/doubloons.yml +3 -3
  310. data/test/fixtures/edges.yml +5 -5
  311. data/test/fixtures/entrants.yml +14 -14
  312. data/test/fixtures/essays.yml +6 -6
  313. data/test/fixtures/faces.yml +11 -11
  314. data/test/fixtures/fk_test_has_fk.yml +3 -3
  315. data/test/fixtures/fk_test_has_pk.yml +1 -1
  316. data/test/fixtures/friendships.yml +4 -4
  317. data/test/fixtures/funny_jokes.yml +10 -10
  318. data/test/fixtures/interests.yml +33 -33
  319. data/test/fixtures/items.yml +3 -3
  320. data/test/fixtures/jobs.yml +7 -7
  321. data/test/fixtures/legacy_things.yml +3 -3
  322. data/test/fixtures/live_parrots.yml +4 -4
  323. data/test/fixtures/mateys.yml +4 -4
  324. data/test/fixtures/member_details.yml +8 -8
  325. data/test/fixtures/member_types.yml +6 -6
  326. data/test/fixtures/members.yml +11 -11
  327. data/test/fixtures/memberships.yml +34 -34
  328. data/test/fixtures/men.yml +5 -5
  329. data/test/fixtures/minimalistics.yml +2 -2
  330. data/test/fixtures/minivans.yml +5 -5
  331. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  332. data/test/fixtures/mixins.yml +29 -29
  333. data/test/fixtures/movies.yml +7 -7
  334. data/test/fixtures/naked/yml/accounts.yml +1 -1
  335. data/test/fixtures/naked/yml/companies.yml +1 -1
  336. data/test/fixtures/naked/yml/courses.yml +1 -1
  337. data/test/fixtures/naked/yml/parrots.yml +2 -2
  338. data/test/fixtures/naked/yml/trees.yml +3 -3
  339. data/test/fixtures/nodes.yml +29 -29
  340. data/test/fixtures/organizations.yml +5 -5
  341. data/test/fixtures/other_comments.yml +6 -6
  342. data/test/fixtures/other_dogs.yml +2 -2
  343. data/test/fixtures/other_posts.yml +7 -7
  344. data/test/fixtures/other_topics.yml +42 -42
  345. data/test/fixtures/owners.yml +9 -9
  346. data/test/fixtures/parrots.yml +27 -27
  347. data/test/fixtures/parrots_pirates.yml +7 -7
  348. data/test/fixtures/people.yml +24 -24
  349. data/test/fixtures/peoples_treasures.yml +3 -3
  350. data/test/fixtures/pets.yml +19 -19
  351. data/test/fixtures/pirates.yml +12 -15
  352. data/test/fixtures/posts.yml +80 -80
  353. data/test/fixtures/price_estimates.yml +16 -16
  354. data/test/fixtures/products.yml +4 -4
  355. data/test/fixtures/projects.yml +7 -7
  356. data/test/fixtures/ratings.yml +14 -14
  357. data/test/fixtures/readers.yml +11 -11
  358. data/test/fixtures/references.yml +17 -17
  359. data/test/fixtures/reserved_words/distinct.yml +5 -5
  360. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  361. data/test/fixtures/reserved_words/group.yml +14 -14
  362. data/test/fixtures/reserved_words/select.yml +8 -8
  363. data/test/fixtures/reserved_words/values.yml +7 -7
  364. data/test/fixtures/ships.yml +6 -6
  365. data/test/fixtures/speedometers.yml +8 -8
  366. data/test/fixtures/sponsors.yml +12 -12
  367. data/test/fixtures/string_key_objects.yml +7 -7
  368. data/test/fixtures/subscribers.yml +10 -10
  369. data/test/fixtures/subscriptions.yml +12 -12
  370. data/test/fixtures/taggings.yml +78 -78
  371. data/test/fixtures/tags.yml +11 -11
  372. data/test/fixtures/tasks.yml +7 -7
  373. data/test/fixtures/teapots.yml +3 -3
  374. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  375. data/test/fixtures/to_be_linked/users.yml +10 -10
  376. data/test/fixtures/topics.yml +49 -49
  377. data/test/fixtures/toys.yml +14 -14
  378. data/test/fixtures/traffic_lights.yml +9 -9
  379. data/test/fixtures/treasures.yml +10 -10
  380. data/test/fixtures/trees.yml +3 -3
  381. data/test/fixtures/uuid_children.yml +3 -3
  382. data/test/fixtures/uuid_parents.yml +2 -2
  383. data/test/fixtures/variants.yml +4 -4
  384. data/test/fixtures/vegetables.yml +19 -19
  385. data/test/fixtures/vertices.yml +3 -3
  386. data/test/fixtures/warehouse_things.yml +2 -2
  387. data/test/fixtures/zines.yml +5 -5
  388. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  389. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  390. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  391. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  392. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  393. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  394. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  395. data/test/migrations/rename/1_we_need_things.rb +11 -11
  396. data/test/migrations/rename/2_rename_things.rb +9 -9
  397. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  400. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  401. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  402. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  403. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  404. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  405. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  406. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  407. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  408. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  409. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  410. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  411. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  412. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  413. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  414. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  415. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  416. data/test/models/admin.rb +5 -5
  417. data/test/models/admin/account.rb +3 -3
  418. data/test/models/admin/user.rb +40 -40
  419. data/test/models/aircraft.rb +5 -5
  420. data/test/models/arunit2_model.rb +3 -3
  421. data/test/models/author.rb +209 -209
  422. data/test/models/auto_id.rb +4 -4
  423. data/test/models/autoloadable/extra_firm.rb +2 -2
  424. data/test/models/binary.rb +2 -2
  425. data/test/models/bird.rb +12 -12
  426. data/test/models/book.rb +23 -23
  427. data/test/models/boolean.rb +2 -2
  428. data/test/models/bulb.rb +52 -52
  429. data/test/models/cake_designer.rb +3 -3
  430. data/test/models/car.rb +29 -29
  431. data/test/models/carrier.rb +2 -2
  432. data/test/models/cat.rb +10 -10
  433. data/test/models/categorization.rb +19 -19
  434. data/test/models/category.rb +35 -35
  435. data/test/models/chef.rb +8 -8
  436. data/test/models/citation.rb +3 -3
  437. data/test/models/club.rb +25 -25
  438. data/test/models/college.rb +10 -10
  439. data/test/models/column.rb +3 -3
  440. data/test/models/column_name.rb +3 -3
  441. data/test/models/comment.rb +76 -76
  442. data/test/models/company.rb +230 -230
  443. data/test/models/company_in_module.rb +98 -98
  444. data/test/models/computer.rb +3 -3
  445. data/test/models/contact.rb +41 -41
  446. data/test/models/content.rb +40 -40
  447. data/test/models/contract.rb +20 -20
  448. data/test/models/country.rb +7 -7
  449. data/test/models/course.rb +6 -6
  450. data/test/models/customer.rb +83 -83
  451. data/test/models/customer_carrier.rb +14 -14
  452. data/test/models/dashboard.rb +3 -3
  453. data/test/models/default.rb +2 -2
  454. data/test/models/department.rb +4 -4
  455. data/test/models/developer.rb +274 -274
  456. data/test/models/dog.rb +5 -5
  457. data/test/models/dog_lover.rb +5 -5
  458. data/test/models/doubloon.rb +12 -12
  459. data/test/models/drink_designer.rb +3 -3
  460. data/test/models/edge.rb +5 -5
  461. data/test/models/electron.rb +5 -5
  462. data/test/models/engine.rb +4 -4
  463. data/test/models/entrant.rb +3 -3
  464. data/test/models/essay.rb +5 -5
  465. data/test/models/event.rb +3 -3
  466. data/test/models/eye.rb +37 -37
  467. data/test/models/face.rb +9 -9
  468. data/test/models/friendship.rb +6 -6
  469. data/test/models/guid.rb +2 -2
  470. data/test/models/guitar.rb +4 -4
  471. data/test/models/hotel.rb +11 -11
  472. data/test/models/image.rb +3 -3
  473. data/test/models/interest.rb +5 -5
  474. data/test/models/invoice.rb +4 -4
  475. data/test/models/item.rb +7 -7
  476. data/test/models/job.rb +7 -7
  477. data/test/models/joke.rb +7 -7
  478. data/test/models/keyboard.rb +3 -3
  479. data/test/models/legacy_thing.rb +3 -3
  480. data/test/models/lesson.rb +11 -11
  481. data/test/models/line_item.rb +3 -3
  482. data/test/models/liquid.rb +4 -4
  483. data/test/models/man.rb +11 -11
  484. data/test/models/matey.rb +4 -4
  485. data/test/models/member.rb +42 -42
  486. data/test/models/member_detail.rb +8 -8
  487. data/test/models/member_type.rb +3 -3
  488. data/test/models/membership.rb +35 -35
  489. data/test/models/mentor.rb +2 -2
  490. data/test/models/minimalistic.rb +2 -2
  491. data/test/models/minivan.rb +9 -9
  492. data/test/models/mixed_case_monkey.rb +3 -3
  493. data/test/models/mocktail_designer.rb +2 -2
  494. data/test/models/molecule.rb +6 -6
  495. data/test/models/movie.rb +5 -5
  496. data/test/models/node.rb +5 -5
  497. data/test/models/non_primary_key.rb +2 -2
  498. data/test/models/notification.rb +3 -3
  499. data/test/models/order.rb +4 -4
  500. data/test/models/organization.rb +14 -14
  501. data/test/models/other_dog.rb +5 -5
  502. data/test/models/owner.rb +37 -37
  503. data/test/models/parrot.rb +28 -28
  504. data/test/models/person.rb +142 -142
  505. data/test/models/personal_legacy_thing.rb +4 -4
  506. data/test/models/pet.rb +18 -18
  507. data/test/models/pet_treasure.rb +6 -6
  508. data/test/models/pirate.rb +92 -92
  509. data/test/models/possession.rb +3 -3
  510. data/test/models/post.rb +273 -273
  511. data/test/models/price_estimate.rb +4 -4
  512. data/test/models/professor.rb +5 -5
  513. data/test/models/project.rb +40 -40
  514. data/test/models/publisher.rb +2 -2
  515. data/test/models/publisher/article.rb +4 -4
  516. data/test/models/publisher/magazine.rb +3 -3
  517. data/test/models/rating.rb +4 -4
  518. data/test/models/reader.rb +23 -23
  519. data/test/models/recipe.rb +3 -3
  520. data/test/models/record.rb +2 -2
  521. data/test/models/reference.rb +22 -22
  522. data/test/models/reply.rb +61 -61
  523. data/test/models/ship.rb +39 -39
  524. data/test/models/ship_part.rb +8 -8
  525. data/test/models/shop.rb +17 -17
  526. data/test/models/shop_account.rb +6 -6
  527. data/test/models/speedometer.rb +6 -6
  528. data/test/models/sponsor.rb +7 -7
  529. data/test/models/string_key_object.rb +3 -3
  530. data/test/models/student.rb +4 -4
  531. data/test/models/subject.rb +16 -16
  532. data/test/models/subscriber.rb +8 -8
  533. data/test/models/subscription.rb +4 -4
  534. data/test/models/tag.rb +13 -13
  535. data/test/models/tagging.rb +13 -13
  536. data/test/models/task.rb +5 -5
  537. data/test/models/topic.rb +118 -118
  538. data/test/models/toy.rb +6 -6
  539. data/test/models/traffic_light.rb +4 -4
  540. data/test/models/treasure.rb +14 -14
  541. data/test/models/treaty.rb +7 -7
  542. data/test/models/tree.rb +3 -3
  543. data/test/models/tuning_peg.rb +4 -4
  544. data/test/models/tyre.rb +11 -11
  545. data/test/models/user.rb +14 -14
  546. data/test/models/uuid_child.rb +3 -3
  547. data/test/models/uuid_item.rb +6 -6
  548. data/test/models/uuid_parent.rb +3 -3
  549. data/test/models/vegetables.rb +24 -24
  550. data/test/models/vehicle.rb +6 -6
  551. data/test/models/vertex.rb +9 -9
  552. data/test/models/warehouse_thing.rb +5 -5
  553. data/test/models/wheel.rb +3 -3
  554. data/test/models/without_table.rb +3 -3
  555. data/test/models/zine.rb +3 -3
  556. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  557. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  558. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  559. data/test/schema/mysql2_specific_schema.rb +68 -68
  560. data/test/schema/oracle_specific_schema.rb +40 -40
  561. data/test/schema/postgresql_specific_schema.rb +114 -114
  562. data/test/schema/schema.rb +1057 -1057
  563. data/test/schema/schema.rb.original +1057 -1057
  564. data/test/schema/sqlite_specific_schema.rb +18 -18
  565. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  566. data/test/support/config.rb +43 -43
  567. data/test/support/connection.rb +23 -23
  568. data/test/support/connection_helper.rb +14 -14
  569. data/test/support/ddl_helper.rb +8 -8
  570. data/test/support/schema_dumping_helper.rb +20 -20
  571. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -22
  572. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -182
  573. metadata +30 -14
  574. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  575. data/test/fixtures/author_addresses.original +0 -11
  576. 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